首页
社区
课程
招聘
[旧帖] [原创]小莱鸟的一篇用内存镜像法的脱文,表示一点点自己的进步吧 0.00雪花
发表于: 2007-11-9 00:35 5980

[旧帖] [原创]小莱鸟的一篇用内存镜像法的脱文,表示一点点自己的进步吧 0.00雪花

2007-11-9 00:35
5980
首先感谢风林兄,想不通兄二位给遇我的指点和不厌烦的赐教!
前人已经写过很多了,小弟在此多写一点麻烦的东西,高手莫笑,有不对之处请多多指正!
费话不多说,进入正题
PEID查壳为:PEBundle 2.0x - 2.4x-> Jeremy Collake [Overlay] 详细版本小弟还没有查到。
点击选项——调试选项——异常,把里面的忽略全部√上!CTRL+F2重载下程序!
OD载入停在这里
*******************************************************************************************************************
0059F000 哈哈.<模块入口点>      9C                    pushfd
0059F001                        60                    pushad
0059F002                        E8 02000000           call    哈哈.0059F009
0059F007                        33C0                  xor     eax, eax
0059F009                        8BC4                  mov     eax, esp
0059F00B                        83C0 04               add     eax, 4
0059F00E                        93                    xchg    eax, ebx
0059F00F                        8BE3                  mov     esp, ebx
0059F011                        8B5B FC               mov     ebx, dword ptr [ebx-4]
0059F014                        81EB 07204000         sub     ebx, 哈哈.00402007
0059F01A                        87DD                  xchg    ebp, ebx
0059F01C                        83BD 3D294000 01      cmp     dword ptr [ebp+40293D], 1
0059F023                        0F84 33040000         je      哈哈.0059F45C
0059F029                        80BD 522F4000 00      cmp     byte ptr [ebp+402F52], 0
0059F030                        74 37                 je      short 哈哈.0059F069
*************************************************************************************************************************************
注意一开始便有一个CALL,这样的CALL一般不能单步步过(跑题了)
设置好调试选项进入入口点便按
ALT+M,打开内存镜象,找到如图:
.rsrc.按F2下断点,然后按F9运行到断点,接着再按ALT+M,打开内存镜象,找到程序的第一个.rsrc.上面的上上行(也就是00401000处),按F2下断点!然后按F9,然后单步跟踪,遇到已实再的向回跳的J就在下一行点左键然后F4(运行到此位置,目的是让跟踪少些时间)直到如下面代码的地方:
**************************************************************************************************************************************
00534098                        95                    xchg    eax, ebp
00534099                        8A07                  mov     al, byte ptr [edi]
0053409B                        47                    inc     edi
0053409C                        08C0                  or      al, al
0053409E                      ^ 74 DC                 je      short 哈哈.0053407C
005340A0                        89F9                  mov     ecx, edi
005340A2                        79 07                 jns     short 哈哈.005340AB
005340A4                        0FB707                movzx   eax, word ptr [edi]
005340A7                        47                    inc     edi
005340A8                        50                    push    eax
005340A9                        47                    inc     edi
005340AA                        B9 5748F2AE           mov     ecx, AEF24857
005340AF                        55                    push    ebp
005340B0                        FF96 486A1300         call    dword ptr [esi+136A48]
005340B6                        09C0                  or      eax, eax
005340B8                        74 07                 je      short 哈哈.005340C1
005340BA                        8903                  mov     dword ptr [ebx], eax
005340BC                        83C3 04               add     ebx, 4
005340BF                      ^ EB D8                 jmp     short 哈哈.00534099    //发现一直在这里循环的跳,同时意一下下面几行有个POPAD,找到这个则OEP就不远了,则在005340C8 处F2下断点然后F9运行,被断下,来到如后面一断所示代码处
005340C1                        FF96 4C6A1300         call    dword ptr [esi+136A4C]
005340C7                        61                    popad
005340C8                      - E9 1B38EEFF           jmp     哈哈.004178E8
005340CD                        0000                  add     byte ptr [eax], al
005340CF                        0000                  add     byte ptr [eax], al
*********************************************************************************************************************************
接前面的代码处:
004178E8                        55                    push    ebp     //这里就是OEP了
004178E9                        8BEC                  mov     ebp, esp
004178EB                        6A FF                 push    -1
004178ED                        68 40BE4500           push    哈哈.0045BE40
004178F2                        68 4C7A4100           push    哈哈.00417A4C                      ; jmp 到 msvcrt._except_handler3
004178F7                        64:A1 00000000        mov     eax, dword ptr fs:[0]
004178FD                        50                    push    eax
004178FE                        64:8925 00000000      mov     dword ptr fs:[0], esp
00417905                        83EC 68               sub     esp, 68
00417908                        53                    push    ebx
00417909                        56                    push    esi
0041790A                        57                    push    edi
0041790B                        8965 E8               mov     dword ptr [ebp-18], esp
0041790E                        33DB                  xor     ebx, ebx
00417910                        895D FC               mov     dword ptr [ebp-4], ebx
00417913                        6A 02                 push    2
00417915                        FF15 3C9B4500         call    dword ptr [459B3C]               ; msvcrt.__set_app_type
0041791B                        59                    pop     ecx
0041791C                        830D 04224700 FF      or      dword ptr [472204], FFFFFFFF
00417923                        830D 08224700 FF      or      dword ptr [472208], FFFFFFFF
0041792A                        FF15 389B4500         call    dword ptr [459B38]               ; msvcrt.__p__fmode
00417930                        8B0D 8C1A4700         mov     ecx, dword ptr [471A8C]
******************************************************************************************************************************************
可以看出是VC++的OEP特征,然后用LOADPE DUMP内存镜像(在此,小弟先用的OD的DUMP插件结果脱出来的无法修复,类似自校验的状况,吃了不少苦头,后来用LOADPE才行)
保存为DUMP.EXE,抓取完后查壳已经无壳,但不能运行,最后用IRC工具打开OD里正在加载的进程(注意前面抓取完后不能关掉OD)在OEP处输入OEP地址:178E8 (按别人的经验和教程里说的是这个值,我也一直没有搞明白为什么不是4178E8呢??可能是处于一个段中的原因吧)
然后点自动查找IAT,再点获取输入表,这时输入表块全显示出来了,但有一些块有无效指针直接删除掉然后修复转存文件,最后就OK了,IRC自动生成一个DUMP_.EXE的文件,运行,正常!
就写到这里吧,主要是为了个人总结,也为了请高手们指点我其中的疑惑,感谢看完!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 233
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
呵呵,你已经写好了啊!
2007-11-9 09:46
0
雪    币: 192
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
风林兄,速度好快啊,谢谢支持啊,里面有几个小疑问,给看看是怎么回事?或推荐点什么贴子看
2007-11-9 10:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
178E8是4178E8减去镜像基址得到的
2007-11-9 11:08
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
在此,小弟先用的OD的DUMP插件结果脱出来的无法修复,类似自校验的状况,吃了不少苦头,后来用LOADPE才行

这个和 自校验 有什么关系 ,应该是因为 OD DUMP  的功能有自动修复的原因吧.
2007-11-9 12:01
0
雪    币: 252
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
用OD的DUMP的第二个DUMP方法可以运行,我脱的一个软件也是PEBundle 2.0x - 2.4x-> Jeremy Collake [Overlay] ,可行,你试试!
2007-11-9 18:12
0
雪    币: 192
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
[QUOTE=sunwayking;379684]用OD的DUMP的第二个DUMP方法可以运行,我脱的一个软件也是PEBundle 2.0x - 2.4x-> Jeremy Collake [Overlay] ,可行,你试试![/QUOTE]

感谢提醒,不过我不知道你说的第二个DUMP方法是什么,请赐教
2007-11-9 18:25
0
雪    币: 252
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
用OLLYDUMP的时候,在低下有个method2,看见没,就是它了,默认是method1。
不行就只能手动修复指针了,当然你得排除自校验(如果有的话)
2007-11-9 22:28
0
雪    币: 252
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
顺便说一句,我脱的是SWiSHmax这个软件,有兴趣你可以试一下
该软件用了PEBundle的注册功能,所以脱掉之后软件自然也破解了
当然(又是当然,呵呵),PEBundle这个壳的本质决定了它会释放一些文件,这些文件将是程序运行所必需的,你的程序不能运行很有可能是因为这个原因,监视一下,或者跟踪一下,这个壳在载入的时候就先释放文件,小心跟踪就能找到
另外,它释放的文件在程序运行过程中是不会被删除的(被占用嘛),但是会在程序结束时删除,这一点需要注意!!Good luck!
2007-11-9 22:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
感谢,试试!
2007-11-9 23:14
0
雪    币: 192
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
感谢9楼的仁兄,谢谢,以后多多交流,我加你为好友了,呵呵
2007-11-10 00:31
0
雪    币: 252
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
楼主不必客气,以后还仰仗指教呢
2007-11-11 19:33
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
請問還有什麼時候會用到 Memory Map?
2007-11-11 20:00
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
手动修复指针我咋找不到啊.
2007-11-11 20:28
0
雪    币: 192
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
手动修复指针得用IRC工具,工具的用法论坛上挺多的,楼上的仁兄不防搜搜
2007-11-11 23:58
0
游客
登录 | 注册 方可回帖
返回
//