lchhome 发表于 2017-4-25 22:25

用ESP定律再脱fsg2.0的壳

本帖最后由 lchhome 于 2017-4-25 22:31 编辑

目标软件:eXeScope.exe
加壳工具:fsg2.0
脱壳工具:OD、IRC、LordPE
方法:ESP定律法
1、用OD载入加壳程序
00400154 >8725 4C565600   xchg dword ptr ds:,esp
0040015A    61            popad
0040015B    94            xchg eax,esp
0040015C    55            push ebp
0040015D    A4            movs byte ptr es:,byte ptrds:
0040015E    B6 80         mov dh,0x8000
400160    FF13            call dword ptr ds:
00400162^ 73 F9         jnb short eXeScope.0040015D
F8单步到0040015B句,看右下堆栈窗口:
00565650   004001E8 eXeScope.004001E8
00565654   004001DC eXeScope.004001DC
00565658   004001DE eXeScope.004001DE
0056565C   004CC7E8 eXeScope.004CC7E8   在这点右键“数据窗口跟随”
00565660 >7C801D7Bkernel32.LoadLibraryA
00565664 >7C80AE40kernel32.GetProcAddress,
看左窗口:
004CC7E800000000    在这点右键“断点——硬件执行”(这里有点不同,不是下硬件访向断点),F9运行
004CC7EC00000000
到这:
004CC7E8    55            push ebp      到OEP
004CC7E9    8BEC            mov ebp,esp
004CC7EB    83C4 E4         add esp,-0x1
C004CC7EE    53            push ebx
004CC7EF    56            push esi
004CC7F0    33C0            xor eax,eax
004CC7F2    8945 E4         mov dword ptr ss:,eax
004CC7F5    8945 EC         mov dword ptr ss:,eax
004CC7F8    8945 E8         mov dword ptr ss:,eax
004CC7FB    B8 E0C44C00   mov eax,eXeScope.004CC4E0                ; UNICODE "`"
004CC800    E8 77A4F3FF   call eXeScope.00406C7C
用OD插件脱壳,然后用IRC修复,填入CC7E8,如图:


file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtmlclip1/01/clip_image002.gif
上面只发现一个指针,肯定不对,不会只有一个,那我们手动找,回OD找一个CALL句跟随(按Enter键),
0040706C   $- FF25 3C334D00 jmp dword ptrds:            ;kernel32.GetUserDefaultLangID
00407072      8BC0          mov eax,eax
我们在命令行输入:dd0x4D333C,看左下窗
004D332C7C80FDFD kernel32.GlobalAlloc
004D33307C836149 kernel32.GlobalAddAtomA
004D33347C810830 kernel32.GetVersionExA
004D33387C811752 kernel32.GetVersion
004D333C7C80C004 kernel32.GetUserDefaultLangID
004D33407C809FB0 kernel32.GetUserDefaultLCID
我们往上找起点地址
004D319000000000
004D319400000000
004D319800000000
004D319C00000000
004D31A000000000                         这里就是起点地址
004D31A47C93137A ntdll.RtlDeleteCriticalSection
004D31A87C9210E0 ntdll.RtlLeaveCriticalSection
004D31AC7C921000 ntdll.RtlEnterCriticalSection
004D31B07C809F91 kernel32.InitializeCriticalSection
找到了,我们回到IRC,在RVA填D31A0,大小就填10000吧,一般不会超过这个值,点获取输入表——显示无效函数——剪切指针——修复转存文件“,修复成功,可以打开文件。

古月同学丶 发表于 2017-4-26 17:41

end620 发表于 2017-4-26 18:05

目测要火!!

★邪梦 发表于 2017-4-26 18:11

过来学习学习,感谢分享,

炮炮君 发表于 2017-4-26 19:24

感觉ESP讲解很详细,目次要火

125733578 发表于 2017-4-26 20:31

用图来表现会不会更好些呢?光看字,一般人都头疼。

loonglee 发表于 2017-4-28 08:17

用心讨论,共获提升!

zq3332427 发表于 2017-4-29 07:45

学习学习,感谢分享

fruitg 发表于 2017-5-12 07:39

ESP定律还没搞懂{:1_906:}

华瑞燊 发表于 2017-5-12 10:08

页: [1] 2
查看完整版本: 用ESP定律再脱fsg2.0的壳