能力值:
( LV2,RANK:10 )
|
-
-
51 楼
我晕......sessiondiy可以去中五百万了....
我的OD左边地址都快全部变成红色了~~
|
能力值:
( LV9,RANK:140 )
|
-
-
52 楼
那位大牛写个教程吧,让我们这些小第也成功下,我也按照你的做法得了
|
能力值:
( LV9,RANK:140 )
|
-
-
53 楼
感谢大牛的教育,希望能写下完整破解篇,让小第们也得也见识
|
能力值:
( LV9,RANK:180 )
|
-
-
54 楼
啊...不会写..因为没什么过程 , 而且我也不是用 OllyDbg
若硬要说有的话..那就
TerminateProcess 时, [ESP+18h] 的上面几行就看到在判断档案大小了
|
能力值:
( LV9,RANK:140 )
|
-
-
55 楼
谢谢楼上大牛的教育我受教啦!!
|
能力值:
( LV2,RANK:10 )
|
-
-
56 楼
这种方法在OD里好像行不通,这个程序直接通过JMP EAX到TerminateProcess的系统领空,所以CTRL+N那里断不到,BP TerminateProcess后没看到你所说的信息,看来光靠ollydbg不行。
|
能力值:
( LV9,RANK:180 )
|
-
-
57 楼
为什么 OllyDbg 用 bp MessageBoxA 可以正确的断下来,
而 TerminateProcess 却断不下来啊?
|
能力值:
( LV2,RANK:10 )
|
-
-
58 楼
CTRL+N那里断不了,用插件BP TerminateProcess可以断,但没看到你所说的信息。在你没公布答案之前,我看不出那段代码是比较文件大小。。。。
|
能力值:
( LV9,RANK:180 )
|
-
-
59 楼
刚刚用 OD 试了一下.
bp 480b3e <- 检查 Loader
bp 4b50c1 <- 检查 FileSize
上面第1点. 你要先略过他的比对 Explorer ' CMD
没略过的话好像结束跟 TerminateProcess 无关.
然后才会来到第2点(比对FileSize处), 此时他的结束 可正确的断在 TerminateProcess 的开头.
|
能力值:
( LV2,RANK:10 )
|
-
-
60 楼
第一点已经略过,可以断TerminateProcess ,这个程序我也跟了很久没头绪,水平太菜,总之多谢sessiondiy出手。
|
能力值:
( LV9,RANK:140 )
|
-
-
61 楼
这个程序好象断点下啦,要就是能停下来,但是却找不到内容,要就是断不下来直接就给关闭,我现在去试试大牛写的这些办法!!!
|
能力值:
( LV9,RANK:530 )
|
-
-
62 楼
004B50C1 817D CC 301F080>cmp dword ptr [ebp-34], 81F30
004B50C8 0F8C 05000000 jl 004B50D3
|
能力值:
( LV9,RANK:140 )
|
-
-
63 楼
楼上的大牛,关键是如何来到你上面写的这里!!1下那个段
|
能力值:
( LV9,RANK:530 )
|
-
-
64 楼
第一个检查, 过 loader , 是下断 bp ExitProcess, 略过。
第二个检查, 是下断 bp TerminateProcess, F9, 断下
然后到 Menu ==> View ==> Call stack , 如下:
Call stack of main thread
Address Stack Procedure / arguments Called from Frame
0012FBE8 004AAAD3 .004B6A8F .004AAACE 0012FC00
很明显, call stack 不全;
CPU 窗口,Ctrl+G 到 004AASACE, 看到 有些反汇编代码是 db ..., 如下
004AAACE |. E8 BCBF0000 call 004B6A8F
004AAAD3 |. 3965 F8 cmp dword ptr [ebp-8], esp
004AAAD6 |. 74 0D je short 004AAAE5
004AAAD8 |. 68 06000000 push 6
004AAADD |. E8 A7BF0000 call 004B6A89
004AAAE2 |. 83C4 04 add esp, 4
004AAAE5 |> E9 00000000 jmp 004AAAEA
004AAAEA |> 8BE5 mov esp, ebp
004AAAEC |. 5D pop ebp
004AAAED \. C2 0400 retn 4
004AAAF0 55 db 55 ; CHAR 'U'
004AAAF1 8B db 8B
004AAAF2 EC db EC
004AAAF3 81 db 81
004AAAF4 EC db EC
004AAAF5 1C db 1C
004AAAF6 00 db 00
右键点CPU窗后, Analysis ==> Remove analysis from module
再看 Call stack 如下:
Call stack of main thread
Address Stack Procedure / arguments Called from Frame
0012FBE8 004AAAD3 .004B6A8F .004AAACE 0012FC00
0012FC04 004B5142 ? .004AAA7F .004B513D
0012FC68 004B51A4 .004B449B .004B519F 0012FC64
0012FC80 77D1CCD1 Includes .004B51A4 USER32.77D1CCCE 0012FC9C
0012FCA0 77D1CDAD USER32.77D1CC7D USER32.77D1CDA8 0012FC9C
0012FCC0 004B4301 .004B6A8F .004B42FC 0012FCBC
0012FCE4 10028ED9 Includes .004B4301 krnln.10028ED6 0012FCE0
0012FD18 100523D8 krnln.10028E69 krnln.100523D3 0012FD14
0012FD48 10056AB9 krnln.10051FE0 krnln.10056AB4
0012FD58 10056A7A Includes krnln.10056AB9 krnln.10056A78
0012FD68 10053A91 krnln.10056A60 krnln.10053A8C
0012FD6C 000007D8 Arg1 = 000007D8
0012FD70 0012FE24 Arg2 = 0012FE24
0012FD74 00000000 Arg3 = 00000000
0012FE50 10053EB0 krnln.10053160 krnln.10053EAB
0012FE6C 10029658 krnln.10053E80 krnln.10029653
0012FE78 004B6A47 .004B6A65 .004B6A42
然后用 两个OD重跟,一个跟原程序, 一个跟脱壳的, 最好是在两台机器上跟, 效果最好。
过了第一个检查点后, 在所有的 上面的 Call stack 中的 Called from 地址上下断, 即
004AAACE
004B513D
004B519F
004B42FC
然后两个OD一起运行, 看看经过哪个call 后不一样, 脱壳的会过每一个断点, 到TerminateProcess, 未脱壳 的不会;
F8 经过下面的一句, 两个OD的结果不一样,
004B519F E8 F7F2FFFF call 004B449B
脱壳的在004B449B中会走到
004B513D E8 3D59FFFF call 004AAA7F
未脱壳的不会;
所以问题出在004B449B中, 用两个OD F8单步跟, 很快可发现过了004B50C8后不一样, 一个跳, 一个不跳
|
能力值:
( LV2,RANK:10 )
|
-
-
65 楼
blackeyes写的很详细,完美的步骤,原来堆栈调用可以这样用,受教。
|
能力值:
( LV2,RANK:10 )
|
-
-
66 楼
感谢blackeyes的指教!
以后一定发奋图强
|
能力值:
( LV9,RANK:140 )
|
-
-
67 楼
3Q那位大牛,我学会啦!!!!!
|
能力值:
( LV9,RANK:180 )
|
-
-
68 楼
Sorry. 问一个跟主题无关的问题.
当初在跟踪楼主的程式时发现 API名称 会正确的显示在右边, 如下:
像 GetModuleFileNameA 就有正确显示出来.(宽度问题, 右边的注解已去掉)
004011EC /$ 55 push ebp
004011ED |. 8BEC mov ebp, esp
004011EF |. 68 80000000 push 80
004011F4 |. FF75 08 push dword ptr [ebp+8]
004011F7 |. 6A 00 push 0
004011F9 |. E8 28000000 call <jmp.&KERNEL32.GetModuleFileNameA>
004011FE |. 8B4D 08 mov ecx, dword ptr [ebp+8]
00401201 |. 8D4C08 FA lea ecx, dword ptr [eax+ecx-6]
可是我进入GetModuleFileNameA时, 却没有在开头或右边显示 API名称, 如下:
77E6BEC4 > 55 push ebp
77E6BEC5 8BEC mov ebp, esp
77E6BEC7 83EC 10 sub esp, 10
77E6BECA 56 push esi
77E6BECB 57 push edi
77E6BECC 64:A1 18000000 mov eax, dword ptr fs:[18]
这种情况引发了, 像我下 bp MessageBoxA 可以正确. 但我去看断点列表时根本不知
那一个断点才是 MessageBoxA.
像SoftICE只要事先有将Kernel32.dll载入进来的话就会显示出来.
OllyDbg 要怎么做才能做到呢?
thx.
|
能力值:
( LV2,RANK:10 )
|
-
-
69 楼
这个确实很难搞啊,要等大虾了!
|
能力值:
( LV2,RANK:10 )
|
-
-
70 楼
好像原版的OD没命令下断功能,要靠插件,应该没这功能。
|
|
|