-
-
[原创]第七题 鱼目混珠 by k1ee
-
2020-12-2 15:26 2889
-
鱼目混珠
修复各种❀,比如连续的两个分支跳转,以及call手动回堆栈,旋转跳跃等。
修复完成后看到原始代码
初始化反调试函数表,注释是理论上的没调试情况,但本人Win反正不是这样,最后靠爆破得出。建议防守方自己扣分。随后由两个字符串新建了两个256位数。
对前7字节以及后7字节进行校验,其中反调函数9和10是对main以及另一个函数本体进行校验和,通过逆向算法可以得出结果
后续算法就是256位的加减乘除,其中关键点在于加法会溢出(pwn题?),导致覆盖后面的256数结构的比特数,如下
两个大的数相加会把dword_4C5110
的长度由0x10变为0x01,因此最终比对的其实是1,因此要逆向推导
1 2 3 4 5 6 7 8 9 10 11 | a = 1 b = 0x3FAFFA2B01B6BA9744C4B4E010010401 * 0xFEA1BD9E6964129D8F5079E1 print ( hex (a)) a = a + b a = a - 0xFEA1BD9E6964129D8F5079E1 a = a - 0x3FAFFA2B01B6BA9744C4B4E010010401 a = a * 0xE053D0F a = a / / 0x10010401 print (''.join( reversed ( hex (a))).upper()) |
得到输出
1 | 00C7F30833B9C4563BF035C32D8C7709E040FCA64E211F34CD3FE773X0 |
注意到头尾和刚才的计算结果,得出最终Flag
1 | 10C7F30833B9C4563BF035C32D8C7709E040FCA64E211F34CD3FE773 |
最后于 2020-12-16 20:29
被k1ee编辑
,原因: 强迫症
赞赏
他的文章
[原创]第九题 命悬一线 by k1ee
2850
[原创]第八题 惊天阴谋 by k1ee
2739
[原创]第七题 鱼目混珠 by k1ee
2890
[原创]第六题 兵刃相向 by k1ee
2861
[原创]第五题 紧急救援 by k1ee
4254