能力值:
( LV2,RANK:10 )
|
-
-
26 楼
谢谢,收到
|
能力值:
( LV2,RANK:10 )
|
-
-
27 楼
厉害,看来破解路真还漫长呀
现在看不到、尽头拉
|
能力值:
( LV2,RANK:10 )
|
-
-
28 楼
感谢riijj的这么详细的分析。
我之前使用OD破一个小软件时,遇到了你贴中所说的SEH保护,我当时不知道用SHIFT F9过它,只好先让软件运行,之后再用OD的ATTACH功能。在看了你的文章后,回去试了一试,很方便。
另外,你这个小软件有个小BUG:运行时,吃内存,内存慢慢地会被全部耗尽。能解释一下是代码中的什么部分造成的吗?
|
能力值:
(RANK:300 )
|
-
-
29 楼
最初由 icbcodc 发布 感谢riijj的这么详细的分析。 我之前使用OD破一个小软件时,遇到了你贴中所说的SEH保护,我当时不知道用SHIFT F9过它,只好先让软件运行,之后再用OD的ATTACH功能。在看了你的文章后,回去试了一试,很方便。 另外,你这个小软件有个小BUG:运行时,吃内存,内存慢慢地会被全部耗尽。能解释一下是代码中的什么部分造成的吗?
估计是某处 memory leak ,暂时不知道,要测试一下
|
能力值:
( LV2,RANK:10 )
|
-
-
30 楼
我想问一下,如果一个软件f9运行不会发生SHE异常,f7单步跟踪会发生SHE异常,那怎么办啊?
|
能力值:
( LV9,RANK:410 )
|
-
-
31 楼
好文,真详细!收藏!
|
能力值:
( LV2,RANK:10 )
|
-
-
32 楼
-----------------------
“我们把 SetUnhandledExceptionFilter 的地方修改了,当我们用 OD 运行时,程序便会顺利地到达下一个执行位置,不会发生
异常。我们把现在的程序关闭,用 OD 把刚才修改了的 crack2.exe 打开
我们再设定断点在 SetUnhandledExceptionFilter,小心地把所有 SetUnhandledExceptionFilter 的陷阱清除。
bp SetUnhandledExceptionFilter
F9 运行,每按一下 Shift+F9,便留意 OD
果然,我们再断在 SetUnhandledExceptionFilter,按几下 F8 返回,来到了
00401830 . 56 PUSH ESI
00401831 . 6A 00 PUSH 0 ; /pTopLevelFilter = NULL
00401833 . FF15 48504000 CALL DWORD PTR DS:[<&KERNEL32.SetUnhandl>; \SetUnhandledExceptionFilter
00401839 . E8 92FFFFFF CALL riijj_cr.004017D0 <-------我们在这里
0040183E . 68 80694000 PUSH riijj_cr.00406980 ; /Buffer = riijj_cr.00406980
00401843 . 68 F4010000 PUSH 1F4 ; |BufSize = 1F4 (500.)
00401848 . FF15 44504000 CALL DWORD PTR DS:[<&KERNEL32.GetTempPat>; \GetTempPathA
0040184E . 68 74604000 PUSH riijj_cr.00406074 ; /pModule = "kernel32.dll"
00401853 . FF15 40504000 CALL DWORD PTR DS:[<&KERNEL32.GetModuleH>; \GetModuleHandleA
00401859 . 68 C06B4000 PUSH riijj_cr.00406BC0 ; /ProcNameOrOrdinal = ""
0040185E . 50 PUSH EAX ; |hModule
0040185F . FF15 20504000 CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd>; \GetProcAddress
00401865 . 8BF0 MOV ESI,EAX
00401867 > FFD6 CALL ESI
00401869 . 85C0 TEST EAX,EAX
0040186B . 74 05 JE SHORT riijj_cr.00401872
0040186D . E8 BEF9FFFF CALL riijj_cr.00401230
00401872 > E8 89FEFFFF CALL riijj_cr.00401700
00401877 . E8 34F9FFFF CALL riijj_cr.004011B0
0040187C . C705 58694000 0>MOV DWORD PTR DS:[406958],1
00401886 .^EB DF JMP SHORT riijj_cr.00401867
”
----------------------
为什么我F8的时候断在了这里?
00401C22 00 DB 00
00401C23 . C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1
00401C2A . E9 E8000000 JMP riijj_cr.00401D17
00401C2F . B8 01000000 MOV EAX,1
00401C34 . C3 RETN
00401C35 . 8B65 E8 MOV ESP,DWORD PTR SS:[EBP-18]
00401C38 . C745 FC 050000>MOV DWORD PTR SS:[EBP-4],5
00401C3F . 6A 00 PUSH 0 ; /pArguments = NULL
00401C41 . 6A 00 PUSH 0 ; |nArguments = 0
00401C43 . 6A 01 PUSH 1 ; |ExceptionFlags = EXCEPTION_NONCONTINUABLE
00401C45 . 68 333312C0 PUSH C0123333 ; |ExceptionCode = C0123333
00401C4A . FF15 4C504000 CALL DWORD PTR DS:[<&KERNEL32.RaiseExcep>; \RaiseException
00401C50 . C745 FC FFFFFF>MOV DWORD PTR SS:[EBP-4],-1 //我断在了这里
00401C57 . E9 B4000000 JMP riijj_cr.00401D10
00401C5C . B8 01000000 MOV EAX,1
00401C61 . C3 RETN
00401C62 . 8B65 E8 MOV ESP,DWORD PTR SS:[EBP-18]
00401C65 . C745 FC 060000>MOV DWORD PTR SS:[EBP-4],6
00401C6C . 68 90184000 PUSH riijj_cr.00401890 ; /Arg2 = 00401890
00401C71 . 6A 0F PUSH 0F ; |Arg1 = 0000000F
00401C73 . E8 BB030000 CALL riijj_cr.00402033 ; \riijj_cr.00402033
00401C78 . 83C4 08 ADD ESP,8
00401C7B . FF25 54694000 JMP DWORD PTR DS:[406954]
然后我持续F8,最后停在了这里:
77F8EE02 ^EB AD JMP SHORT ntdll.77F8EDB1
77F8EE04 > B8 E0000000 MOV EAX,0E0
77F8EE09 8D5424 04 LEA EDX,DWORD PTR SS:[ESP+4]
77F8EE0D CD 2E INT 2E
77F8EE0F C2 0800 RETN 8 //停在了这里
77F8EE12 803D 0403FD77 00 CMP BYTE PTR DS:[77FD0304],0
77F8EE19 0F85 3E430000 JNZ ntdll.77F9315D
77F8EE1F 834D FC FF OR DWORD PTR SS:[EBP-4],FFFFFFFF
77F8EE23 E8 0F000000 CALL ntdll.77F8EE37
77F8EE28 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
然后就终止了,请斑竹清点迷津,谢谢!
|
能力值:
(RANK:300 )
|
-
-
33 楼
最初由 dwolf 发布 ----------------------- 为什么我SHIFT+F9的时候断在了这里?
........
下断 bp SetUnhandledExceptionFilter
不停按 shift+F9 通过,直至 OD 断在 SetUnhandledExceptionFilter 的断点,再按几下 F8 从 retn 返回 crackme
|
能力值:
( LV2,RANK:10 )
|
-
-
34 楼
感谢斑竹!
现在我RETUN返回到了
77F8EE04 > B8 E0000000 MOV EAX,0E0
77F8EE09 8D5424 04 LEA EDX,DWORD PTR SS:[ESP+4]
77F8EE0D CD 2E INT 2E
77F8EE0F C2 0800 RETN 8
77F8EE12 803D 0403FD77 00 CMP BYTE PTR DS:[77FD0304],0
77F8EE19 0F85 3E430000 JNZ ntdll.77F9315D
77F8EE1F 834D FC FF OR DWORD PTR SS:[EBP-4],FFFFFFFF
然后就终止了~
我把这个过程做了个动画:
http://www.sharesec.com/riijj.rar
请指点,谢谢!
|
能力值:
( LV2,RANK:10 )
|
-
-
35 楼
本人初学CRACK,屡经挫折,思而不解,RIIJJ斑竹可以留下联系方式或者加我QQ吗?感激不尽!
QQ:48249
|
能力值:
(RANK:300 )
|
-
-
36 楼
你遇到 Exception C0123333 的时候 (留意 OD 左下方) ,继续按 shift +F9 通过,在 OD 下方出现
Breakpoint at KERNEL32. SetUnhandledExceptionFilter 的时候才开始 F8 跟踪
|
能力值:
( LV2,RANK:10 )
|
-
-
37 楼
支持支持
|
能力值:
( LV2,RANK:10 )
|
-
-
38 楼
楼主讲解很详细。收藏起来我等菜鸟好好学习。谢谢楼主!
|
能力值:
( LV2,RANK:10 )
|
-
-
39 楼
"============================
我们要知道这个秘密的程序,必须要用硬件断点
我们按一下 F9,让程序正常运行
在 OD 下方的内存窗口,输入 406B84 ,来到了 406B84 的位置
按一下鼠标右键,选 Long -> Hex ,使显示模式变成 Long (4 字节)
我们发现,406B84 的值是 0,现在点选在 406B84 的资料上,
按鼠标右键,选 breakpoint -> hardware, on access -> DWORD ,这样便设定了硬件断点在这 4 个字位上
这时候,程序突然断下,看来它被我们的断点拦截了
00401030 /$ A1 846B4000 MOV EAX,DWORD PTR DS:[406B84]
00401035 |. 85C0 TEST EAX,EAX <---------我们在这里
00401037 |. 0F84 90000000 JE riijj_cr.004010CD
0040103D |. 56 PUSH ESI
0040103E |. 57 PUSH EDI
================"
请问因为有 exception,按F9怎么正常运行啊?我按SHIFT+F9才可以
“在 OD 下方的内存窗口,输入 406B84 ,来到了 406B84 的位置”,我输入怎么没效果呢,下拉找到了406B80和406B90,就是没406B84啦~~
请斑竹赐教,谢谢!
|
能力值:
(RANK:300 )
|
-
-
40 楼
当然是依文章先把所有 exception 的地方修改,使程序没有 exception 才继续这里
内存的窗口点 鼠标右键,选 Go to -> Expression ,输入位置,按确定
|
能力值:
( LV2,RANK:10 )
|
-
-
41 楼
分析的太好了,进来学习
|
能力值:
( LV2,RANK:10 )
|
-
-
42 楼
本论坛最大的一只菜鸟是我啊~~~~晕菜了,看不懂。。。
努力学习啦
|
能力值:
( LV3,RANK:30 )
|
-
-
43 楼
学习呀,谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
44 楼
riijj 斑竹好热心,感动中。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
45 楼
版主,能不能把这个crackme的源码穿上来,让大家参考学习一下
|
能力值:
( LV2,RANK:10 )
|
-
-
46 楼
hao.............
|
能力值:
( LV2,RANK:10 )
|
-
-
47 楼
(设置是没有使用插件,没有隐藏 OD)
是什么意思呀,谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
48 楼
强贴啊
|
能力值:
( LV2,RANK:10 )
|
-
-
49 楼
认真学习了一遍。好文,谢谢!
|
能力值:
( LV2,RANK:10 )
|
-
-
50 楼
这个贴子真的不错,完整而详细,风格很好。
|
|
|