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

攻防世界两题简单RE,学习了一下手工脱壳_第1张图片
是哪个比赛的题目忘记截图。

dmd-50

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

crackme

这题给自己练习了一下手动脱壳。
攻防世界两题简单RE,学习了一下手工脱壳_第2张图片
使用PEID查壳显示无壳,但是拖入IDA查看时显示输入表被破坏什么的,明显有壳。
所以使用手动脱壳
使用OD打开,利用堆栈平衡原理寻找OEP。
攻防世界两题简单RE,学习了一下手工脱壳_第3张图片
执行完pushfd时候,记录下ESP,对此ESP值下内存读断点 HR 0x19FF80,F9运行至断点处
,然后F8跟进几步到达一块全是数据的地方。
攻防世界两题简单RE,学习了一下手工脱壳_第4张图片
此时右键 [分析]-[从模块中删除分析],可以看到已经到达OEP处。此时再利用LoadPE 完整dump出内存镜像。
攻防世界两题简单RE,学习了一下手工脱壳_第5张图片
找到对应进程,完整dump出内存镜像。得到dumped文件。打开该文件会显示
攻防世界两题简单RE,学习了一下手工脱壳_第6张图片
h何使因为IAT表被破坏,需要去修复它。
此时可以手工填也可以利用import REC去修复,我选择使用import REC
攻防世界两题简单RE,学习了一下手工脱壳_第7张图片
首先选择对应的进程,然后将OEP修改为刚刚在OD里找到的内存偏移。
攻防世界两题简单RE,学习了一下手工脱壳_第8张图片
点击自动搜索IAT,如果可以找到,点击fix dump选择刚刚的dumped文件即可完成修复。至此,脱壳完毕。
再用IDA打开该脱壳修复后的文件
攻防世界两题简单RE,学习了一下手工脱壳_第9张图片
可以看到主函数非常简单。利用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}

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

你可能感兴趣的:(ctf,逆向工程)