结合z3求解2025新春题目DaNianChuErNoadopted的flag

查看 17|回复 2
作者:Barnes   
结合z3求解DaNianChuErNoadopted的flag
直接丢进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刷新即可

下载次数, 下载附件

52pojie1111   

恭喜,你是这些人里分析的相对全面的,至少没用AI,等大年初五公布源码吧
52pojie1111   

太难了,做了一下午一晚上也没整出来
您需要登录后才可以回帖 登录 | 立即注册

返回顶部