首页 > 编程知识 正文

知了脱壳,软件脱壳

时间:2023-05-06 08:13:07 阅读:212394 作者:3209

0x00

查看程序信息:

程序运行状态:

0X01调试器调试


一路F7,可以来到壳程序解密数据的代码,通过反汇编窗口可以实时的跟踪被修改的数据情况:

之后F7 进行单步调试,可以看到很多API函数的调用,在这里需要注意的是,CreateProcessA函数的调用,会新建一个与现有进程名字一样的新进程:

这个进程其实是一个守护进程的作用,在创建进程之后,就会退出当前进程,所以我们要做的操作就是绕过壳代码的创建进程这一操作,直接在上边的JE指令进行改跳转操作,或者直接将je指令修改为JMP指令:

在这一步跳过之后,继续单步调试:
之后会跳转到sysenter指令处,同时可以发现此处有SEH异常处理程序:


下一步。跳转到异常处理函数下断点,然后F9直接运行起来,程序断在异常处理函数上:

之后继续单步调试,就可以发现经典的ESP定律标志:pushad,到这里直接ESP定律就可以直接到OEP:

到达OEP

后边就可以直接脱壳Dump了

最后还需要注意的一点就是,在这里Dump之后,用工具进行修复转储文件的时候,如果用IRC进行修复的时候,修复之后运行程序,会发生错误,程序报错,在偏移00000000的地方错误,后来跟进去看了一下,是因为在执行完一个函数之后,在返回的时候,EIP的值被设为00000000,这个时候触发了异常,但是怎么解决,暂时还没想到好的方法。建议换一个修复工具(我使用的是Scylla_x86),换了修复工具重新进行修复之后,程序可以运行(也不太清楚什么原因,遇到这种情况的话,就换一种工具尝试一下吧)

0X02

总结:在这个程序的脱壳过程中,需要注意两点
1:守护进程的绕过
2:对异常函数的处理
3:对于sysenter指令的理解(该指令是从用户态到内核态的快速调用),在这个程序里边使用,作用应该是触发一个异常,然后让SEH异常处理链去处理
4:在修复转出的文件的时候,多试一下别的程序,多一种尝试,生活更美好

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。