Yoda's Crypter 1.3.e 加密壳脱壳
前言:Yoda's Crypter1.3.e脱壳笔记
逆向过程
首先载入OD,界面为如下,并且红标处有pushad,尝试进行ESP定律脱壳,进行硬件断点
F9第一次来到popad的后面,如下图,那么里OEP也不远了,然后尝试对代码code段进行内存访问断点
然后继续F9,发现到了OEP处,那么此时脱壳的工作已经完成了
OEP为 004271B0 . 55 PUSH EBP
进行转储存储,这里自己使用的pe tools,打开发现错误,那么还需要进行相应的IAT修复
重新载入转储的程序,发现OEP无法到达,直接报错,跟随到OEP 004271B0,查看IAT表是否正确,我们知道正常的IAT表其中存放着各个函数的地址,而经过重定向的IAT表,其中并不是存放着地址,而是一个指针,这个指针,指向壳的某个内存空间中,然后在壳中代码片段将地址返回回去
如如下的图,经过重定向之后,IAT表地址中保存的就不是API函数地址了,而是被覆盖了重定向后的地址
所以我们处理这些被加密IAT的地址的办法是找到加密这些IAT的地址的跳转(就是Magic Jump),将它修改为强制跳转(JMP),使之无法加密IAT,从而达到脱壳修复的目的!
我们需要知道IAT表的起始地址和结束地址,在原来脱壳完之后进行寻找
起始地址->00460818 值->0014329A
结束地址->00460F28 值->00000000
差值为:710
然后重新载入一个有壳的程序,我们需要给它的IAT表的地址进行定位,数据窗口查找表达式460818,然后在460818到460F28设置内存写入断点,原因是一开始我们加载进入还是有壳的情况下,都是被加密过的,如果当程序运行起来的时候,iat表的地址就会被覆盖成重定向后的地址,那就会写入,所以这里设置内存写入断点,设置完了之后F9运行程序,如下图,来到了第一个要被修改的api地址
00465730 8902 MOV DWORD PTR DS:[EDX],EAX ; WINMM.PlaySoundA
继续F8走到如下图中,红标处就是IAT表中的地址被重新修改为重定向的地址,所以我们需要进行NOP,让下面的跳转进行跳过,使其不进行重定向
然后进行F9运行程序,发现程序直接中断,但是还是可以获取当前程序的IAT表,此时的IAT是正确的,所以可以进行修复成功!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY