能力值:
( LV2,RANK:10 )
|
-
-
2 楼
DING!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
好快呀!辛苦了!
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
谢谢,学习,顶了
|
能力值:
( LV9,RANK:210 )
|
-
-
5 楼
将文章放在了论坛上,方便阅读。
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
精华!!学习了!
|
能力值:
( LV6,RANK:90 )
|
-
-
7 楼
顶.支持.
这么详细的教程,真是谢谢了.
最近很多牛壳被劈了,楼主有时间的话,真希望
能再出好的教程
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
支持。感觉又学会了一些。
|
能力值:
( LV9,RANK:1250 )
|
-
-
9 楼
我也谈谈自己跟踪的结果:
1.OD载入提示非法的win32程序
参考ohuangkeo文章:
http://bbs.pediy.com/showthread.php?threadid=17592
搞定.
2.楼主文章提到VB,找oep:
OD载入运行程序,Ctrl+G:401000,搜索FF25,可以看到:
00403C42 - FF25 A4114000 jmp dword ptr ds:[4011A4] ; MSVBVM50.EVENT_SINK_Release
00403C48 - FF25 90124000 jmp dword ptr ds:[401290] ; MSVBVM50.ThunRTMain
00403C4E 0000 add byte ptr ds:[eax],al
00403C50 AD lods dword ptr ds:[esi] ; here,oep
00403C51 FB sti
00403C52 EC in al,dx
00403C53 B1 08 mov cl,8
00403C55 CA 1F7D retf 7D1F
明显可以看到oep=00403C50
代码被偷了2行.
3.补代码:
这里下硬件访问断点:
00403C48 - FF25 90124000 jmp dword ptr ds:[401290] ; MSVBVM50.ThunRTMain
断下时看堆栈:
0012FBF0 00974BB4 TrashReg.00974BB4
0012FBF4 00403F44 TrashReg.00403F44 // 这个就是push
0012FBF8 0096E344 返回到 TrashReg.0096E344 来自 TrashReg.0096E605
0012FBFC 77FBB272 返回到 ntdll.77FBB272
被偷的代码:
push 00403f44
call 403c48
至此可以搞定脱壳修复.
4.如果想知道如何跟踪到达oep,上Rordbg:
2次异常,第二次异常如下:
026B0412 正常调用(指令数5104753): KERNEL32.DLL!VirtualAlloc
0012FFE0 Unknown Code:FF FF FF FF 6C ; 这里异常
0012FFE0 Unknown Code:FF FF FF FF 6C
发生异常!
FS:[0]==0012FF98
异常处理程序地址:0042B800 ; 注意这个异常处理地址
这个异常被成功捕获!
0096E150 正常调用(指令数5105123): KERNEL32.DLL!LoadLibraryA
0096E2A5 正常调用(指令数5105350): KERNEL32.DLL!GetProcAddress
然后程序就运行了.
5.OD再上,在系统处理异常的地方下断:
77FBB270 FFD1 call ecx ; 处理异常处
这个地址不同操作系统不一样的.
Shift+F9一直运行到rordbg跟踪的异常处理,就是这样结果:
77FBB270 FFD1 call ecx ; TrashReg.0042B800
好了,没有异常了,可以开始跟踪了.
先是返回到:
0096E000 E8 0B000000 call TrashReg.0096E010
0096E005 75 73 jnz short TrashReg.0096E07A
0096E007 65:72 33 jb short TrashReg.0096E03D
然后来到:
0096E33D /75 05 jnz short TrashReg.0096E344 ; 跳转未实现
0096E33F |E8 C1020000 call TrashReg.0096E605 ; 跟进
0096E344 \E8 0D000000 call TrashReg.0096E356
跟进后,里面有 rdtsc检查,可以用工具搞定,我是手工修改跳转的.
然后来到Stolen oep处:
00974B2D 90 nop
00974B2E C74424 FC 443F40>mov dword ptr ss:[esp-4],TrashReg.00403F44
00974B36 EB 01 jmp short TrashReg.00974B39
00974B39 83EC 04 sub esp,4
00974B3C 51 push ecx ; =push 403F44
00974B3D F9 stc
00974B3E 1BC9 sbb ecx,ecx
00974B40 EB 0B jmp short TrashReg.00974B4D
00974BA3 68 B44B9700 push TrashReg.00974BB4
00974BA8 EB 01 jmp short TrashReg.00974BAB
00974BAB 68 483C4000 push TrashReg.00403C48 ; jmp to MSVBVM50.ThunRTMain,=call 403C48
00974BB0 EB 01 jmp short TrashReg.00974BB3
00974BB3 C3 retn ; 返回到 00403C48 (TrashReg.00403C48)
返回到伪oep:
00403C48 - FF25 90124000 jmp dword ptr ds:[401290] ; MSVBVM50.ThunRTMain
00403C4E 0000 add byte ptr ds:[eax],al
00403C50 AD lods dword ptr ds:[esi]
这个就是整个跟踪过程.
|
能力值:
( LV12,RANK:470 )
|
-
-
10 楼
优化的很不错
学习。。
|
能力值:
( LV4,RANK:50 )
|
-
-
11 楼
支持并学习!
|
能力值:
( LV4,RANK:50 )
|
-
-
12 楼
好帖,一定要收藏学习!
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
支持一下,很详细。
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
写好好详细啊!收藏!
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
在汉化新世纪看到过楼主发!
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
好东西,要收藏!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
谢谢~学习ing~
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
支持一下.支持一下
|
能力值:
( LV9,RANK:1130 )
|
-
-
19 楼
晕倒,没人顶起还不知道这么好的文呢。有图更喜欢
|
|
|