攻防世界两题简单RE,学习了一下手工脱壳


是哪个比赛的题目忘记截图。

dmd-50

拖入IDA查看主函数。看名字猜知道为md5,直接md5解密得到答案。

crackme

这题给自己练习了一下手动脱壳。

使用PEID查壳显示无壳,但是拖入IDA查看时显示输入表被破坏什么的,明显有壳。
所以使用手动脱壳
使用OD打开,利用堆栈平衡原理寻找OEP。

执行完pushfd时候,记录下ESP,对此ESP值下内存读断点 HR 0x19FF80,F9运行至断点处
,然后F8跟进几步到达一块全是数据的地方。

此时右键 [分析]-[从模块中删除分析],可以看到已经到达OEP处。此时再利用LoadPE 完整dump出内存镜像。

找到对应进程,完整dump出内存镜像。得到dumped文件。打开该文件会显示

h何使因为IAT表被破坏,需要去修复它。
此时可以手工填也可以利用import REC去修复,我选择使用import REC

首先选择对应的进程,然后将OEP修改为刚刚在OD里找到的内存偏移。

点击自动搜索IAT,如果可以找到,点击fix dump选择刚刚的dumped文件即可完成修复。至此,脱壳完毕。
再用IDA打开该脱壳修复后的文件

可以看到主函数非常简单。利用IDA里的python脚本

flag=""
add1=0x402130
add2=0x402150
for i in range(0,42):
    flag += chr(Byte(add1+i%16)^Byte(add2+i*4) )
print flag
#flag{59b8ed8f-af22-11e7-bb4a-3cf862d1ee75}

两题都比较简单,但是学习了一下脱壳也不算没有收获。

猜你喜欢

转载自blog.csdn.net/qq_38025365/article/details/89307688