首页
论坛
课程
招聘
[原创]第七题 鱼目混珠 by k1ee
2020-12-2 15:26 2889

[原创]第七题 鱼目混珠 by k1ee

2020-12-2 15:26
2889

鱼目混珠

修复各种❀,比如连续的两个分支跳转,以及call手动回堆栈,旋转跳跃等。

 

image-20201201131933965

 

image-20201201132051498

 

image-20201201132138531

 

image-20201201132227255

 

image-20201201132318478

 

image-20201201132326459

 

image-20201201132358407

 

image-20201201132406700

 

image-20201201132816299

 

image-20201201132823301

 

image-20201201132943820

 

image-20201201133214713

 

image-20201201133223762

 

image-20201201133805372

 

image-20201201133904220

 

image-20201201134631351

 

image-20201201140228363

 

修复完成后看到原始代码

 

image-20201202151710965

 

初始化反调试函数表,注释是理论上的没调试情况,但本人Win反正不是这样,最后靠爆破得出。建议防守方自己扣分。随后由两个字符串新建了两个256位数。

 

image-20201202151830127

 

对前7字节以及后7字节进行校验,其中反调函数9和10是对main以及另一个函数本体进行校验和,通过逆向算法可以得出结果

 

image-20201201230323864

 

后续算法就是256位的加减乘除,其中关键点在于加法会溢出(pwn题?),导致覆盖后面的256数结构的比特数,如下

 

image-20201202152302782

 

两个大的数相加会把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编辑 ,原因: 强迫症
收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回