X-CTF(REVERSE高级) Windows_Reverse2

查壳,ASPACK的壳

 

 没有现成的脱壳软件,手动脱壳

1.用LordPE打开,第一步点击PE Editor加载目标的exe,第二步选择characteristics后面的三个点,第三步勾选图中四个选项

 

 

 2.OD加载目标exe,很幸运一打开就看见了pushad,利用esp定律,第一步按F8执行pushad命令, 第二步右键ESP下一个硬件断点HW break

 

ESP定律参考微信公众号《逆向工程师Reverse》:从零开始(3)ESP定律、OD断点

 

3.程序硬件断点停下来的地方,有两个跳转。第一跳成功执行到push 123.0040170F,第二跳通过retn命令跳转到push 123.0040170F压入栈的地址

 

 4.F7执行两个跳转,来到40170F这个地址,没有代码,一些杂乱的数据,右键--分析--从模块中删除分析。删除后40170F就是一个call指令了。

 

 

 5.回车进这个call指令,发现4个安全函数,那么call指令是程序的真正oep。

 

 

 6.最后一步脱壳保存程序,按esc返回到call指令,右键“用ollydump脱壳调试程序”,“修正为”的值要和od里的EIP后四位一样,基地址(起始地址)等于od里的EIP减去“修正为”,保证oep的起始位置为当前。重建表去掉,等下手动重建。设置完后,点击脱壳到新exe。

 

 

 7.OD不关闭,保持状态,打开ImportREC,第一步附加进程为OD正在调试的目标exe,第二步修改OEP为步骤6里”修正为“的值,第三步自动获取IAT表,第四步显示成功后,点击fix dump保存修改到步骤6里的新exe。

 

 8.查壳,显示为unknown packer,不是no pack,用ida打开看看,反汇编main函数没什么问题,继续往下分析

 

 

 9.分析main函数,sub_4011F0函数对输入做一些校验,sub_401240函数为重点,flag在这里面诞生。

 

 10.分析sub_401240函数,输入是”0-9“减”0“,字符串“0”-“0”变成数字0了,输入是”A-F“减”7”,字符串“A”-“7”变成数字10了,所以这是在将输入两位两位的从字符串变为0x的数字。

 

 11.分析sub_401240函数结尾的函数sub_401000,所有0x数字传入sub_401000,做base64加密

 

 12.返回main函数,如果flag地址的值等于reverse+,那么输入的flag正确

 

 

 13.flag:ADEBDEAEC7BE

 

posted @ 2022-07-19 17:06  黑冰Lisa  阅读(245)  评论(0编辑  收藏  举报