NewStarCTF 2023 Endian

这题... 出个flag都这么离谱的吗?老早就解出flag了但是...
今天玩了玩花吻再来做这道题...(我还特地换成用C写...)
IDA打开一个简单的Xor
python c 都可以解

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
signed main(){
	__int32 array[6]={0x75553A1E, 0x7B583A03, 0x4D58220C, 0x7B50383D, 0x736B3819, 0x0};
	int i; // [rsp+4h] [rbp-3Ch]
  char *v5; // [rsp+8h] [rbp-38h]
  char v6[40]; // [rsp+10h] [rbp-30h] BYREF
  unsigned __int64 v7; // [rsp+38h] [rbp-8h]

//  v7 = __readfsqword(0x28u);
  puts("please input your flag");
  scanf("%s", v6);
  v5 = v6;
  cout<<(*(DWORD *)v5)<<"\n\n";
//  cout<<atoi("flag")<<"\n";
//  cout<<(int)('f')*pow(16,3)+(int)('l')*pow(16,2)+(int)('a')*pow(16,1)+(int)('g')*pow(16,0)<<"\n";
  for ( i = 0; i <= 5; ++i )
  {
//    if ( *(DWORD *)v5 != (array[i] ^ 0x12345678) )
//    {
//      printf("wrong!");
//      exit(0);
//    }
    cout<<(array[i] ^ 0x12345678)<<"\n";
    v5 += 4;
  }
  printf("you are right");
  return 0;
}
/*
aaaa
1633771873

aaab
1650549089
*/

由于搞不清楚C是怎么将四个字母的字符串转成整数的 我用枚举的方法爆破

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
signed main(){
	long long num[] = {1768713339,1600943220,1768189509,1633644129,1734437990,305419896};
	char dict[]="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_{}@!#$%^&*()";
	int t=1;
	
		int n=num[t];
		char s[4];
		for(int i=0;i<strlen(dict);i++)
			for(int j=0;j<strlen(dict);j++)
				for(int k=0;k<strlen(dict);k++)
					for(int l=0;l<strlen(dict);l++)
					{
						s[0]=dict[i],s[1]=dict[j];
						s[2]=dict[k],s[3]=dict[l];
						char *v5;
						v5 = s;
						if((*(DWORD *)v5)==n){
							cout<<s;
							t++;
							return 0;
						}
					}
}
/*
flag{llittl_Endian_a
*/

结果解出flag这个P样
flag{llittl_Endian_a
我以为没解全 但是本地运行 task
image
这就离谱好吧... 出题人不能闭合个括号吗? 而且也毫无语义...
所以flag:
flag{llittl_Endian_a}
...
本题唯一的作用就是让我知道了 _ DWORD(4byte指针) 和 DWORD(4byte)的区别

posted @ 2023-10-01 00:06  N0zoM1z0  阅读(325)  评论(0编辑  收藏  举报