好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 lchhome 于 2017-4-25 22:31 编辑
目标软件:eXeScope.exe
加壳工具:fsg2.0
脱壳工具:OD、IRC、LordPE
方法:ESP定律法
1、用OD载入加壳程序
00400154 > 8725 4C565600 xchg dword ptr ds:[0x56564C],esp
0040015A 61 popad
0040015B 94 xchg eax,esp
0040015C 55 push ebp
0040015D A4 movs byte ptr es:[edi],byte ptrds:[esi]
0040015E B6 80 mov dh,0x8000
400160 FF13 call dword ptr ds:[ebx]
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 >7C801D7B kernel32.LoadLibraryA
00565664 >7C80AE40 kernel32.GetProcAddress,
看左窗口:
004CC7E8 00000000 在这点右键“断点——硬件执行”(这里有点不同,不是下硬件访向断点),F9运行
004CC7EC 00000000
到这:
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:[ebp-0x1C],eax
004CC7F5 8945 EC mov dword ptr ss:[ebp-0x14],eax
004CC7F8 8945 E8 mov dword ptr ss:[ebp-0x18],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:[0x4D333C] ; kernel32.GetUserDefaultLangID
00407072 8BC0 mov eax,eax
我们在命令行输入:dd 0x4D333C,看左下窗
004D332C 7C80FDFD kernel32.GlobalAlloc
004D3330 7C836149 kernel32.GlobalAddAtomA
004D3334 7C810830 kernel32.GetVersionExA
004D3338 7C811752 kernel32.GetVersion
004D333C 7C80C004 kernel32.GetUserDefaultLangID
004D3340 7C809FB0 kernel32.GetUserDefaultLCID
我们往上找起点地址
004D3190 00000000
004D3194 00000000
004D3198 00000000
004D319C 00000000
004D31A0 00000000 这里就是起点地址
004D31A4 7C93137A ntdll.RtlDeleteCriticalSection
004D31A8 7C9210E0 ntdll.RtlLeaveCriticalSection
004D31AC 7C921000 ntdll.RtlEnterCriticalSection
004D31B0 7C809F91 kernel32.InitializeCriticalSection
找到了,我们回到IRC,在RVA填D31A0,大小就填10000吧,一般不会超过这个值,点获取输入表——显示无效函数——剪切指针——修复转存文件“,修复成功,可以打开文件。 |
-
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|