能力值:
( LV2,RANK:10 )
|
-
-
101 楼
因为从这里开始起步入门的,没想到回帖时系统提示441天了
时间真快。感谢作者!!
|
能力值:
( LV2,RANK:10 )
|
-
-
102 楼
我也刚学破解,照楼主说得做了
输入 "bp MessageBoxA"
然后点Register, 程序没有停下来
直接出现对话框"Registration fail"
这是怎么回事呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
103 楼
刚刚学习,照楼主说得做了,在命令栏中输入 "bp MessageBoxA"
然后点Register, 出现对话框"Registration fail",注册失败
这是怎么回事呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
104 楼
输入这行后,当程序使用 MessageBoxA ,程序便会断下
现在,我们把程序正常运行 (按 F9),输入一个名字,我在里输入了 riijj ,在序号那行输入了 AAAABBBBCCCC
按下 "Register" ,这时候程序遇到断点,停在以下地方
77E16544 > 55 PUSH EBP <---停在这里
77E16545 8BEC MOV EBP,ESP
77E16547 51 PUSH ECX
我不是停在那耶-.-....
我用的是看雪上的新的OllyICE
我停在..
77D504EA...
77D504EA > 8BFF mov edi, edi
77D504EC 55 push ebp
77D504ED 8BEC mov ebp, esp
77D504EF 833D BC04D777 0>cmp dword ptr [77D704BC], 0
77D504F6 74 24 je short 77D5051C
77D504F8 64:A1 18000000 mov eax, fs:[18]
77D504FE 6A 00 push 0
77D50500 FF70 24 push dword ptr [eax+24]
77D50503 68 240BD777 push 77D70B24
77D50508 FF15 C812D177 call [<&KERNEL32.InterlockedCompareEx>; kernel32.InterlockedCompareExchange
77D5050E 85C0 test eax, eax
77D50510 75 0A jnz short 77D5051C
77D50512 C705 200BD777 0>mov dword ptr [77D70B20], 1
77D5051C 6A 00 push 0
77D5051E FF75 14 push dword ptr [ebp+14]
77D50521 FF75 10 push dword ptr [ebp+10]
77D50524 FF75 0C push dword ptr [ebp+C]
77D50527 FF75 08 push dword ptr [ebp+8]
77D5052A E8 2D000000 call MessageBoxExA
77D5052F 5D pop ebp
77D50530 C2 1000 retn 10
而且没有出现regist fail!
注册机直接当掉
|
能力值:
( LV2,RANK:10 )
|
-
-
105 楼
刚刚学习,照楼主说得做了,在命令栏中输入 "bp MessageBoxA"
然后点Register, 出现对话框"Registration fail",注册失败,程序没反应,
到这步该怎样做?试了N次了。
|
能力值:
( LV2,RANK:10 )
|
-
-
106 楼
我是初学者,好多地方不明白,每一个步骤能否详细点?
|
能力值:
( LV2,RANK:10 )
|
-
-
107 楼
我刚刚学习,照楼主说得做了输入 "bp MessageBoxA"按F9,
然后点Register,有时就直接出现对话框"Registration fail"
这是怎么回事呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
108 楼
I get~ 3Q LZ
Reg name:wino
Reg key: HMNF
|
能力值:
( LV2,RANK:10 )
|
-
-
109 楼
我在门外探头看,不明白,伤心,还是先得学汇编啊,好可怜.
|
能力值:
( LV2,RANK:10 )
|
-
-
110 楼
我觉得只要把test eax,eax改为xor eax,eax就可以啦
|
能力值:
( LV4,RANK:50 )
|
-
-
111 楼
顶一下 顶一下
|
能力值:
( LV2,RANK:10 )
|
-
-
112 楼
我今年刚刚接触加密和解密,就能看到这么好的帖子,和这么好的论坛。。谢谢大家!!
|
能力值:
( LV2,RANK:10 )
|
-
-
113 楼
我按照你所说得用olly debug调实但刚开始就找不到plugins下的commandline ,只看到了一个commandbar 。对不起,请不要县我凡,我是新手,希望各位能够帮助我。
|
能力值:
( LV2,RANK:10 )
|
-
-
114 楼
按上面说的找到了,但是返回creakme时去找不到77E16569 (retn)那一行,请教各位大虾该怎么板呀。
|
能力值:
( LV2,RANK:10 )
|
-
-
115 楼
77E18098 > 55 push ebp
77E18099 8BEC mov ebp, esp
77E1809B 51 push ecx
77E1809C 833D 3892E477 0>cmp dword ptr [77E49238], 0
77E180A3 0F85 940E0100 jnz 77E28F3D
77E180A9 6A 00 push 0
77E180AB FF75 14 push dword ptr [ebp+14]
77E180AE FF75 10 push dword ptr [ebp+10]
77E180B1 FF75 0C push dword ptr [ebp+C]
77E180B4 FF75 08 push dword ptr [ebp+8]
####77E180B7 E8 04000000 call MessageBoxExA
77E180BC C9 leave
77E180BD C2 1000 retn 10
我用F8执行到加#号的那一行就执行不动了,和源文件对比一下CALL USER32.MESSAGEBOXEXA是不是因为少了USER32,请各位帮忙看一下。
|
能力值:
( LV2,RANK:10 )
|
-
-
116 楼
wruser
GHPJJA
|
能力值:
( LV6,RANK:90 )
|
-
-
117 楼
00401072 /75 1B jnz short ncrackme.0040108F 把这句nop掉就爆破了
|
能力值:
( LV2,RANK:10 )
|
-
-
118 楼
我们要返回 crackme 的领空里,有几个方法
1. 不停接 F8 ,一步一步地执行直至程序遇上 retn ,这是返回指令,它会带我们回去
2. 按 Ctrl + F9 ,这样 OD 会不停执行,直至遇到 retn 停下
3. 按一下返回的 retn ,再按 F4 ,程序会执行到光标所在的地方
4. 打开 OD 的 call stack window,看看我们从那里飞来,便设一个断点在那地方,之后 F9 运行
我们按一下 F2 清除断点,再按一下 77E16569 (retn) 那行,按 F4 执行到那里,再按一下 F7 进入 retn。
00401050 . 817C24 08 1101>CMP DWORD PTR SS:[ESP+8],111
00401058 . 75 74 JNZ SHORT ncrackme.004010CE
0040105A . 8B4424 0C MOV EAX,DWORD PTR SS:[ESP+C]
0040105E . 66:3D EA03 CMP AX,3EA
==================
按照以上的操作,总是不能到达这个地方,而是以下地方,请指教(1.10版好象也没有F4这个键,总之查调试菜单是没有)
004010A1 . 33C0 XOR EAX,EAX
004010A3 . C2 1000 RETN 10
004010A6 > 66:3D EB03 CMP AX,3EB
004010AA . 75 22 JNZ SHORT ncrackme.004010CE
004010AC . A1 C0564000 MOV EAX,DWORD PTR DS:[4056C0]
004010B1 . 85C0 TEST EAX,EAX
004010B3 . 74 19 JE SHORT ncrackme.004010CE
004010B5 . 8B15 B8564000 MOV EDX,DWORD PTR DS:[4056B8]
004010BB . 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
004010BD . 68 80504000 PUSH ncrackme.00405080 ; |Title = "ncrackme"
004010C2 . 68 30504000 PUSH ncrackme.00405030 ; |Text = "good function, i was cracked"
004010C7 . 52 PUSH EDX ; |hOwner => 00260336 ('Newbie smallsize crackme - v1',class='myWindowClass')
004010C8 . FF15 C0404000 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA
004010CE > 33C0 XOR EAX,EAX
004010D0 . C2 1000 RETN 10
004010D3 90 NOP
|
能力值:
( LV2,RANK:10 )
|
-
-
119 楼
楼主的偶还没看懂,但楼下有的更简的我终于懂通了!学习中....
|
能力值:
( LV2,RANK:10 )
|
-
-
120 楼
设下一个断点 :
bp MessageBoxA
输入这行后,当程序使用 MessageBoxA ,程序便会断下
现在,我们把程序正常运行 (按 F9),输入一个名字,我在里输入了 riijj ,在序号那行输入了 AAAABBBBCCCC
按下 "Register" ,这时候程序遇到断点,停在以下地方
77E16544 > 55 PUSH EBP <---停在这里
77E16545 8BEC MOV EBP,ESP
77E16547 51 PUSH ECX
77E16548 833D 1893E477 00 CMP DWORD PTR DS:[77E49318],0
77E1654F 0F85 EA220100 JNZ USER32.77E2883F
77E16555 6A 00 PUSH 0
77E16557 FF75 14 PUSH DWORD PTR SS:[EBP+14]
77E1655A FF75 10 PUSH DWORD PTR SS:[EBP+10]
77E1655D FF75 0C PUSH DWORD PTR SS:[EBP+C]
77E16560 FF75 08 PUSH DWORD PTR SS:[EBP+8]
77E16563 E8 04000000 CALL USER32.MessageBoxExA
77E16568 C9 LEAVE
77E16569 C2 1000 RETN 10
77E1656C > 55 PUSH EBP
----------------------------------------------
我在这个步骤按f9
是跳到
0040109A 51 push ecx
0040109B FF15 C0404000 call [<&USER32.MessageBoxA>] 004010A1 33C0 xor eax、eax
004010A3 C2 1000 retn 10
---------------------------------------------------
跟楼主的有出入
这是为什么?
我所使用的OD是1.10版
|
能力值:
( LV2,RANK:10 )
|
-
-
121 楼
我是新手,首先感谢楼主写了这么好的文章。
昨天晚上用OD跟了两遍程序,发现用户名长度一定要大于等于3,但是当超过3的时候,没有找到第四个字符的值是如何计算的,后来分析得出,其实后的几个字符都是无所谓的,只要前三个字符对了,后的都随便添,比如说123456会对应一个注册码,同样的注册码对于123123写是正确的,但是不能为字母只能为数字,可能有些地方我还没搞清楚。
|
能力值:
( LV2,RANK:10 )
|
-
-
122 楼
不好意思,我根据楼主的方法不能跟踪,我的系统是WIN2000ADV
用OD载入后得到的地址与楼主分析不一样,还有就是在第一个断点拦下后也大概代码是一致的,但有点小的区别,这也许能够接受,但按照楼主的说法,当时在USER32领空里,我要跳出那个领空,在下一个RETN处按F4或者用CTRL+F9,结果这样操作后,错误处理已经完成了,无法继续跟踪。
以下是我第一次断下的代码内容:
77DF3D81 > 8BC0 mov eax,eax
77DF3D83 55 push ebp
77DF3D84 8BEC mov ebp,esp
77DF3D86 51 push ecx
77DF3D87 833D 18D4E477 >cmp dword ptr ds:[77E4D418],0
77DF3D8E 0F85 877D0300 jnz USER32.77E2BB1B
77DF3D94 6A 00 push 0
77DF3D96 FF75 14 push dword ptr ss:[ebp+14]
77DF3D99 FF75 10 push dword ptr ss:[ebp+10]
77DF3D9C FF75 0C push dword ptr ss:[ebp+C]
77DF3D9F FF75 08 push dword ptr ss:[ebp+8]
77DF3DA2 E8 09000000 call USER32.MessageBoxExA
77DF3DA7 C9 leave
77DF3DA8 C2 1000 retn 10
77DF3DAB 90 nop
77DF3DAC 90 nop
77DF3DAD 90 nop
77DF3DAE 90 nop
77DF3DAF 90 nop
77DF3DB0 > 8BC0 mov eax,eax
77DF3DB2 55 push ebp
77DF3DB3 8BEC mov ebp,esp
当时处在USER32领空中
|
能力值:
( LV2,RANK:10 )
|
-
-
123 楼
以下是有错误的代码段:
00401274 |. FFD6 CALL ESI // 再用 GetDlgItemTextA ,得到序号
00401276 |. 0FBE4424 08 MOVSX EAX,BYTE PTR SS:[ESP+8] // 把名字的第一个位,放入 EAX
0040127B |. 0FBE4C24 09 MOVSX ECX,BYTE PTR SS:[ESP+9] // 把名字的第二个位,放入 ECX
00401280 |. 99 CDQ // 把 EAX 扩展,成为 EDX:EAX 的 QWORD(64 位长)
00401281 |. F7F9 IDIV ECX // 把 EDX:EAX 除以 ECX,余数放在 EDX
00401283 |. 8BCA MOV ECX,EDX
00401285 |. 83C8 FF OR EAX,FFFFFFFF // EAX = 0xffffffff
00401288 |. 0FBE5424 0A MOVSX EDX,BYTE PTR SS:[ESP+A] // 把名字的第一个位,放入 EDX
0040128D |. 0FAFCA IMUL ECX,EDX // 把刚才的余数乘以 EDX
00401290 |. 41 INC ECX // ECX 增加 1
00401291 |. 33D2 XOR EDX,EDX // EDX = 0
00401293 |. F7F1 DIV ECX // 以 0xffffffff 除以 ECX
以下是错误所在:
00401288 |. 0FBE5424 0A MOVSX EDX,BYTE PTR SS:[ESP+A] // 把名字的第一个位,放入 EDX
这里的注释应该是把名字的第三位放入EDX
|
能力值:
( LV2,RANK:10 )
|
-
-
124 楼
好。自己试试
|
能力值:
( LV9,RANK:780 )
|
-
-
125 楼
我发现下 bpx MessageBoxA 的断点可直接断在程序领空
|
|
|