直接丢进IDA,观察main函数
image-20250130135629536.png (25.35 KB, 下载次数: 0)
下载附件
2025-1-30 14:10 上传
分析可知,main函数接收了用户输入并且将输入传到sub_401010函数中。
sub_401010函数大致逻辑如下:
image-20250130135735847.png (38.47 KB, 下载次数: 0)
下载附件
2025-1-30 14:10 上传
注意到反编译代码中将输入字符与数字比对,这里需要将光标放在数字上面右键,菜单中选择Char,或将单击数字后按R键
image-20250130135831381.png (45.17 KB, 下载次数: 0)
下载附件
2025-1-30 14:10 上传
修改后:
image-20250130135951147.png (17.47 KB, 下载次数: 0)
下载附件
2025-1-30 14:10 上传
可以看到前两个字符,分别是H和a
第三个和第四个字符是相同的,并且有一个判断条件,可以将这个条件输入z3求解
image-20250130140125038.png (19.46 KB, 下载次数: 0)
下载附件
2025-1-30 14:11 上传
输出为:
image-20250130140138846.png (2.63 KB, 下载次数: 0)
下载附件
2025-1-30 14:11 上传
根据ASCII码表,对应字符p
((unsigned __int8)input[1] ^ 0x18) == input[4]
第5个字符根据第2个字符推出,第2个字符是a,python中输出:
image-20250130140407374.png (589 Bytes, 下载次数: 0)
下载附件
2025-1-30 14:11 上传
现在已知前五个字符,Happy
后面是数字
(double)(int)(__int64)(cos(1.36690694026) * 10000.0 + 0.5) * 0.0001 == (double)number * 0.0001
等式两段都乘了0.0001,可忽略,先用python算出前面表达式的值
image-20250130140616181.png (1.21 KB, 下载次数: 0)
下载附件
2025-1-30 14:11 上传
得2025,可知flag为Happy2025
image-20250130140640741.png (14.33 KB, 下载次数: 0)
下载附件
2025-1-30 14:11 上传
中文字符串处理
image-20250130135454477.png (16.77 KB, 下载次数: 0)
下载附件
2025-1-30 14:10 上传
中文是不能正常显示的,需要设置一下IDA中对字符串的编码格式,如下:
image-20250130135443496.png (17.54 KB, 下载次数: 0)
下载附件
2025-1-30 14:10 上传
image-20250130135434561.png (29.42 KB, 下载次数: 0)
下载附件
2025-1-30 14:11 上传
设置完毕后,双击一个字符串地址处,按a,全部完成后回到反编译界面F5刷新即可