FSG2.0 手动脱壳笔记
2008-07-06 22:51
288 查看
为了逆向研究一款木马,给自己的马提供思路,需要脱壳。用PEID侦测,发现类型为FSG 2.0 -> bart/xt。试着脱了一下,ESP定律,内存镜像法都跑飞了。无奈只好单步跟踪了!这个壳很多朋友反应不好脱,有一定的难度,脱完之后的修复是关键! 用OD载入,
00400154 > 8725 6CD34000 xchg ds:[40D36C], esp ;停在这里单步F8
0040015A 61 popad
0040015B 94 xchg eax, esp ;ZX_Clear.0040D370
0040015C 55 push ebp
0040015D A4 movs byte ptr es:[edi], byte ptr ds:[>
0040015E B6 80 mov dh, 80
00400160 FF13 call ds:[ebx]
00400162 ^ 73 F9 jnb short ZX_Clear.0040015D
00400164 33C9 xor ecx, ecx ;F4运行到这 F8继续
00400166 FF13 call ds:[ebx]
00400168 73 16 jnb short ZX_Clear.00400180
0040016A 33C0 xor eax, eax
0040016C FF13 call ds:[ebx]
0040016E 73 1F jnb short ZX_Clear.0040018F
00400170 B6 80 mov dh, 80
00400172 41 inc ecx
00400173 B0 10 mov al, 10
00400175 FF13 call ds:[ebx]
00400177 12C0 adc al, al
00400179 ^ 73 FA jnb short ZX_Clear.00400175
0040017B 75 3A jnz short ZX_Clear.004001B7 ;F4运行到这
0040017D AA stos byte ptr es:[edi]
0040017E ^ EB E0 jmp short ZX_Clear.00400160
00400180 FF53 08 call ds:[ebx+8];F4运行到这
00400183 02F6 add dh, dh
00400185 83D9 01 sbb ecx, 1
00400188 75 0E jnz short ZX_Clear.00400198
0040018A FF53 04 call ds:[ebx+4]
0040018D EB 24 jmp short ZX_Clear.004001B3 ......................... 遇到向上跳的F4
004001C2 AD lods dword ptr ds:[esi]
004001C3 97 xchg eax, edi
004001C4 AD lods dword ptr ds:[esi]
004001C5 50 push eax
004001C6 FF53 10 call ds:[ebx+10]
004001C9 95 xchg eax, ebp
004001CA 8B07 mov eax, ds:[edi]
004001CC 40 inc eax
004001CD ^ 78 F3 js short ZX_Clear.004001C2
004001CF 75 03 jnz short ZX_Clear.004001D4;注意这里不能实现这个跳转
004001D1 FF63 0C jmp ds:[ebx+C]这里就跳到了程序的OEP
004001D4 50 push eax
DUMP 出来之后并没有结束,运行出现错误用,修复引入表之后依然出现错误。很多朋友都做到这一步!由于引入表被壳修改了,需要我们手动查找,如图1,具体的方法是找一个API函数,然后F7跟进去,查看JMP后的地址,如这里我查看了GetMessage这个函数,后边的405130包含在引入表的范围之内,在数据串口跟随地址,然后找到上下全0的开始和结束就是整个引入表的范围了
开始修复 左下角的数值 注意有个错误RVA填成40508C了应该是508C,是我们上一步搜到的 Getimports->show Invalid 然后删除非法的 保存就大功告成了
00400154 > 8725 6CD34000 xchg ds:[40D36C], esp ;停在这里单步F8
0040015A 61 popad
0040015B 94 xchg eax, esp ;ZX_Clear.0040D370
0040015C 55 push ebp
0040015D A4 movs byte ptr es:[edi], byte ptr ds:[>
0040015E B6 80 mov dh, 80
00400160 FF13 call ds:[ebx]
00400162 ^ 73 F9 jnb short ZX_Clear.0040015D
00400164 33C9 xor ecx, ecx ;F4运行到这 F8继续
00400166 FF13 call ds:[ebx]
00400168 73 16 jnb short ZX_Clear.00400180
0040016A 33C0 xor eax, eax
0040016C FF13 call ds:[ebx]
0040016E 73 1F jnb short ZX_Clear.0040018F
00400170 B6 80 mov dh, 80
00400172 41 inc ecx
00400173 B0 10 mov al, 10
00400175 FF13 call ds:[ebx]
00400177 12C0 adc al, al
00400179 ^ 73 FA jnb short ZX_Clear.00400175
0040017B 75 3A jnz short ZX_Clear.004001B7 ;F4运行到这
0040017D AA stos byte ptr es:[edi]
0040017E ^ EB E0 jmp short ZX_Clear.00400160
00400180 FF53 08 call ds:[ebx+8];F4运行到这
00400183 02F6 add dh, dh
00400185 83D9 01 sbb ecx, 1
00400188 75 0E jnz short ZX_Clear.00400198
0040018A FF53 04 call ds:[ebx+4]
0040018D EB 24 jmp short ZX_Clear.004001B3 ......................... 遇到向上跳的F4
004001C2 AD lods dword ptr ds:[esi]
004001C3 97 xchg eax, edi
004001C4 AD lods dword ptr ds:[esi]
004001C5 50 push eax
004001C6 FF53 10 call ds:[ebx+10]
004001C9 95 xchg eax, ebp
004001CA 8B07 mov eax, ds:[edi]
004001CC 40 inc eax
004001CD ^ 78 F3 js short ZX_Clear.004001C2
004001CF 75 03 jnz short ZX_Clear.004001D4;注意这里不能实现这个跳转
004001D1 FF63 0C jmp ds:[ebx+C]这里就跳到了程序的OEP
004001D4 50 push eax
DUMP 出来之后并没有结束,运行出现错误用,修复引入表之后依然出现错误。很多朋友都做到这一步!由于引入表被壳修改了,需要我们手动查找,如图1,具体的方法是找一个API函数,然后F7跟进去,查看JMP后的地址,如这里我查看了GetMessage这个函数,后边的405130包含在引入表的范围之内,在数据串口跟随地址,然后找到上下全0的开始和结束就是整个引入表的范围了
开始修复 左下角的数值 注意有个错误RVA填成40508C了应该是508C,是我们上一步搜到的 Getimports->show Invalid 然后删除非法的 保存就大功告成了
相关文章推荐
- 手动脱壳进阶第三篇PEncrypt V4.0
- jenkins笔记:手动更新插件
- 简单脱壳教程笔记(9) --- 手脱TELock0.98b1壳
- 流水账笔记:PE文件格式(导入表注入---手动)
- [Linux]在Linux上部署Java开发环境笔记(一)-- 补充:Linux下如何手动设置IP及配置DNS服务
- 【安全牛学习笔记】手动漏洞挖掘-SQL注入XSS-简介、跨站脚本检测和常见的攻击利用手段
- 破解之寻找OEP[手动脱壳](2)
- 【安全牛学习笔记】手动漏洞挖掘(四)
- ggplot2学习笔记之手动离散型标度
- 简单脱壳教程笔记(2)---手脱UPX壳(1)
- 【安全牛学习笔记】KALI版本更新(第一个ROLLING RELEASE)和手动漏洞挖掘(SQL注入)
- 【安全牛学习笔记】手动漏洞挖掘-SQL注入
- Android逆向基础笔记—Android NDK开发2之Windows下的gcc手动编译(交叉连编译)和利Linux Ubuntu系统下的交叉工具链手动编译
- 手动实现简单的神经网络(唐宇迪神经网络课程笔记)
- ((ios开发学习笔记五))手动创建Tab Bar Controller 程序
- 手动脱壳进阶第四篇EXE Stealth2.72
- 机器学习笔记(5):多类逻辑回归-手动添加隐藏层
- OC笔记 - 手动内存管理的基本概念(2015.1.30)
- c++ primer plus阅读笔记12---手动调用析构函数
- 简单脱壳笔记