没有提示,按钮为灰色的真的好难破
大家好!我是菜鸟,学习破解已有一个多星期了,如果是在OD中找得到字符提示的我大都会暴破。但对于一些没有提示注册成功、失败提示、输入错误的,以及输入注册码错误,注册按钮未激活,不知如何入手。现在就有一个让我摸不着头脑。
请热心人帮帮忙。谢谢!!!
谢谢所有关注此贴的兄弟
https://www.chinapyg.com/viewthread.php?tid=4830&highlight=
关键一是要用DEDE找到程序两个命令按钮的入口地址下断
关键二是找到关键跳
不明白的是如果不懂算法能否追到真码
[ 本帖最后由 fjnhwwx 于 2006-5-17 21:55 编辑 ] 看一下我的附件,OK了,同你一样爆破是我的首选!/:D
在论坛多混几天就行了,你才学几天而已!;)
[ 本帖最后由 obi-one 于 2006-5-16 09:32 编辑 ] 内容没看,试试用汉化工具,修改其资源试试行不行 原帖由 obi-one 于 2006-5-16 08:49 发表
看一下我的附件,OK了,同你一样爆破是我的首选!/:D
在论坛多混几天就行了,你才学几天而已!;)
能不能说说方法或者思路呢?是不是找按钮变灰的那个函数? 原帖由 obi-one 于 2006-5-16 08:49 发表
看一下我的附件,OK了,同你一样爆破是我的首选!/:D
在论坛多混几天就行了,你才学几天而已!;)
你好,你能否分别用内存法、消息法、函数法、跟踪法破解它,并写个破文,最好动画演示,我想所有菜鸟都会感谢你的。 原帖由 fjnhwwx 于 2006-5-16 12:34 发表
你好,你能否分别用内存法、消息法、函数法、跟踪法破解它,并写个破文,最好动画演示,我想所有菜鸟都会感谢你的。
文采不好,大概讲讲了!
00442CAE|.837D FC 00 CMP DWORD PTR SS:,0
00442CB2 74 18 JE SHORT aLoNg3x[.00442CCC --------------这里是按钮激活的关键跳1
00442CB4|.8D55 F4 LEA EDX,DWORD PTR SS:
00442CB7|.8BC6 MOV EAX,ESI
00442CB9|.E8 8249FCFF CALL aLoNg3x[.00407640
00442CBE|.8B55 F4 MOV EDX,DWORD PTR SS:
00442CC1|.8B83 E0020000 MOV EAX,DWORD PTR DS:
00442CC7|.E8 2406FEFF CALL aLoNg3x[.004232F0
00442CCC|>8B83 D0020000 MOV EAX,DWORD PTR DS:
00442CD2|.8078 47 00 CMP BYTE PTR DS:,0
00442CD6 75 0F JNZ SHORT aLoNg3x[.00442CE7 --------------这里是按钮激活的关键跳2
在此爆破,完成后按钮就可以激活了!
00442D80|.8078 47 01 CMP BYTE PTR DS:,1
00442D84|.75 12 JNZ SHORT aLoNg3x[.00442D98--------------这里是爆破成功的关键跳1
00442D86|.BA 002E4400 MOV EDX,aLoNg3x[.00442E00 ;0
00442D8B|.8B83 E0020000 MOV EAX,DWORD PTR DS:
00442D91|.E8 5A05FEFF CALL aLoNg3x[.004232F0
00442D96|.EB 3F JMP SHORT aLoNg3x[.00442DD7
00442D98|>8D55 FC LEA EDX,DWORD PTR SS:
00442D9B|.8B83 E0020000 MOV EAX,DWORD PTR DS:
00442DA1|.E8 1A05FEFF CALL aLoNg3x[.004232C0
00442DA6|.8B45 FC MOV EAX,DWORD PTR SS:
00442DA9|.E8 C248FCFF CALL aLoNg3x[.00407670
00442DAE|.50 PUSH EAX
00442DAF|.8D55 FC LEA EDX,DWORD PTR SS:
00442DB2|.8B83 DC020000 MOV EAX,DWORD PTR DS:
00442DB8|.E8 0305FEFF CALL aLoNg3x[.004232C0
00442DBD|.8B45 FC MOV EAX,DWORD PTR SS:
00442DC0|.5A POP EDX
00442DC1|.E8 DAFDFFFF CALL aLoNg3x[.00442BA0
00442DC6|.84C0 TEST AL,AL
00442DC8|.74 0D JE SHORT aLoNg3x[.00442DD7--------------这里是爆破成功的关键跳2 原帖由 obi-one 于 2006-5-16 13:41 发表
文采不好,大概讲讲了!
00442CAE|.837D FC 00 CMP DWORD PTR SS:,0
00442CB2 74 18 JE SHORT aLoNg3x[.00442CCC --------------这里是按钮激活的关键跳1
00442CB4...
谢谢指点,我想知道这几个关键点是如何找到的,用何种方法 2楼的兄弟可能有错误哦
真确的应该是:
这个crackme蛮有意思的分两次
第1次要点cancella按钮让它消失使得ok按钮变的好用
第2次点ok按钮要让它消失显示下面的图片
********************************点 cancella 让 ok 按钮显示***************************************************************
00442EA8 >/.55 push ebp ; 在这设断点~~ <-TPrincipale@CancellaClick
00442EA9|.8BEC mov ebp, esp
00442EAB|.6A 00 push 0
00442EAD|.53 push ebx
00442EAE|.8BD8 mov ebx, eax
00442EB0|.33C0 xor eax, eax
00442EB2|.55 push ebp
00442EB3|.68 322F4400 push <->System.Proc_00403278>
00442EB8|.64:FF30 push dword ptr fs:
00442EBB|.64:8920 mov fs:, esp
00442EBE|.8D55 FC lea edx,
00442EC1|.8B83 E0020000 mov eax,
00442EC7 >|.E8 F403FEFF call 004232C0 ;->controls.TControl.GetText(TControl):TCaption;
00442ECC|.8B45 FC mov eax,
00442ECF >|.E8 9C47FCFF call 00407670 ;->Unit_00406994.Proc_00407670
00442ED4|.50 push eax
00442ED5|.8D55 FC lea edx,
00442ED8|.8B83 DC020000 mov eax,
00442EDE >|.E8 DD03FEFF call 004232C0 ;->controls.TControl.GetText(TControl):TCaption;
00442EE3|.8B45 FC mov eax,
00442EE6|.5A pop edx
00442EE7 >|.E8 08FCFFFF call 00442AF4 ;算法call
00442EEC|.84C0 test al, al ;测试al
00442EEE 74 1C je short 00442F0C ;关键跳~~~~~爆破改jnz
00442EF0|.33D2 xor edx, edx
00442EF2|.8B83 D0020000 mov eax,
00442EF8 >|.E8 B302FEFF call 004231B0 ;->controls.TControl.SetVisible(TControl;Boolean);
00442EFD|.B2 01 mov dl, 1
00442EFF|.8B83 CC020000 mov eax,
00442F05|.8B08 mov ecx,
00442F07|.FF51 60 call
00442F0A|.EB 10 jmp short 00442F1C
00442F0C|>BA 482F4400 mov edx, 00442F48
00442F11|.8B83 E0020000 mov eax,
00442F17 >|.E8 D403FEFF call 004232F0 ;->controls.TControl.SetText(TControl;TCaption);
00442F1C|>33C0 xor eax, eax
00442F1E|.5A pop edx
00442F1F|.59 pop ecx
00442F20|.59 pop ecx
00442F21|.64:8910 mov fs:, edx
00442F24|.68 392F4400 push 00442F39
00442F29|>8D45 FC lea eax,
00442F2C >|.E8 8708FCFF call 004037B8 ;->System.Proc_004037B8
00442F31\.C3 retn
****************跟入上面(00442EE7)的call***********************************************
00442AF4/$55 push ebp
00442AF5|.8BEC mov ebp, esp
00442AF7|.83C4 F8 add esp, -8
00442AFA|.53 push ebx
00442AFB|.56 push esi
00442AFC|.8955 F8 mov , edx
00442AFF|.8945 FC mov , eax
00442B02|.8B45 FC mov eax,
00442B05|.E8 DE10FCFF call 00403BE8
00442B0A|.33C0 xor eax, eax
00442B0C|.55 push ebp
00442B0D|.68 902B4400 push 00442B90
00442B12|.64:FF30 push dword ptr fs:
00442B15|.64:8920 mov fs:, esp
00442B18|.8B45 FC mov eax,
00442B1B|.E8 140FFCFF call 00403A34 ;取用户名的位数
00442B20|.83F8 05 cmp eax, 5 ;位数与5比较
00442B23|.7E 53 jle short 00442B78 ;小于等于就跳~~
00442B25|.8B45 FC mov eax, ;用户名放到eax中
00442B28|.0FB640 04 movzx eax, byte ptr ;把用户名第5位放到eax中
00442B2C|.B9 07000000 mov ecx, 7 ;把7放到ecx
00442B31|.33D2 xor edx, edx ;edx清0
00442B33|.F7F1 div ecx ;EAX1=EAX / ECX(7) 余数放edx
00442B35|.8BC2 mov eax, edx ;EAX2=EDX=余数
00442B37|.83C0 02 add eax, 2 ;EAX3=EAX2+2
00442B3A|.E8 E1FEFFFF call 00442A20 ;eax=把EAX3里的数 逐位相乘
00442B3F|.8BF0 mov esi, eax ;把eax放到esi中
00442B41|.33DB xor ebx, ebx ;ebx清0
00442B43|.8B45 FC mov eax, ;把用户名放到eax
00442B46|.E8 E90EFCFF call 00403A34 ;在取用户名的位数
00442B4B|.85C0 test eax, eax ;测试 位数
00442B4D|.7E 16 jle short 00442B65 ;小于等于0就跳
00442B4F|.BA 01000000 mov edx, 1 ;把1放到edx中
00442B54|>8B4D FC /mov ecx, ;把用户名放到ecx中
00442B57|.0FB64C11 FF |movzx ecx, byte ptr [ecx+edx>;取用户名第1位 放到ecx中
00442B5C|.0FAFCE |imul ecx, esi ;ECX=ECX*ESI(上面算的值)
00442B5F|.03D9 |add ebx, ecx ;EBX=EBX(0)+ECX
00442B61|.42 |inc edx ;EDX+1
00442B62|.48 |dec eax ;EAX-1
00442B63|.^ 75 EF \jnz short 00442B54 ;没有计算完就继续
00442B65|>2B5D F8 sub ebx, ;ebx=计算好的(ebx)中的值-输入的假码
00442B68|.81FB 697A0000 cmp ebx, 7A69 ;ebx与7A69比较
00442B6E 74 04 je short 00442B74 ;不相等就跳~~~~~~~
00442B70|.B3 01 mov bl, 1 ;相等就把bl赋值1
00442B72|.EB 06 jmp short 00442B7A
00442B74|>33DB xor ebx, ebx
00442B76|.EB 02 jmp short 00442B7A
00442B78|>33DB xor ebx, ebx
00442B7A|>33C0 xor eax, eax
00442B7C|.5A pop edx
00442B7D|.59 pop ecx
00442B7E|.59 pop ecx
00442B7F|.64:8910 mov fs:, edx
00442B82|.68 972B4400 push 00442B97
00442B87|>8D45 FC lea eax,
00442B8A|.E8 290CFCFF call 004037B8
00442B8F\.C3 retn
第1次总结:
Nome:fantasy
Codice:30531223
****************************点 oK 让下面的 图片全显示*****************************************************
00442D64 >/.55 push ebp ;在这设断点~~<-TPrincipale@OkClick
00442D65|.8BEC mov ebp, esp
00442D67|.6A 00 push 0
00442D69|.53 push ebx
00442D6A|.8BD8 mov ebx, eax
00442D6C|.33C0 xor eax, eax
00442D6E|.55 push ebp
00442D6F|.68 ED2D4400 push <->System.Proc_00403278>
00442D74|.64:FF30 push dword ptr fs:
00442D77|.64:8920 mov fs:, esp
00442D7A|.8B83 D0020000 mov eax,
00442D80|.8078 47 01 cmp byte ptr , 1
00442D84|.75 12 jnz short 00442D98
00442D86|.BA 002E4400 mov edx, 00442E00
00442D8B|.8B83 E0020000 mov eax,
00442D91 >|.E8 5A05FEFF call 004232F0 ;->controls.TControl.SetText(TControl;TCaption);
00442D96|.EB 3F jmp short 00442DD7
00442D98|>8D55 FC lea edx,
00442D9B|.8B83 E0020000 mov eax,
00442DA1 >|.E8 1A05FEFF call 004232C0 ;->controls.TControl.GetText(TControl):TCaption;
00442DA6|.8B45 FC mov eax,
00442DA9 >|.E8 C248FCFF call 00407670 ;->Unit_00406994.Proc_00407670
00442DAE|.50 push eax
00442DAF|.8D55 FC lea edx,
00442DB2|.8B83 DC020000 mov eax,
00442DB8 >|.E8 0305FEFF call 004232C0 ;->controls.TControl.GetText(TControl):TCaption;
00442DBD|.8B45 FC mov eax,
00442DC0|.5A pop edx
00442DC1 >|.E8 DAFDFFFF call 00442BA0 ;算法call
00442DC6|.84C0 test al, al ;测试al
00442DC8|.74 0D je short 00442DD7 ;是0就跳~~~
00442DCA|.33D2 xor edx, edx
00442DCC|.8B83 CC020000 mov eax,
00442DD2 >|.E8 D903FEFF call 004231B0 ;->controls.TControl.SetVisible(TControl;Boolean);
00442DD7|>33C0 xor eax, eax
00442DD9|.5A pop edx
00442DDA|.59 pop ecx
00442DDB|.59 pop ecx
00442DDC|.64:8910 mov fs:, edx
00442DDF|.68 F42D4400 push 00442DF4
00442DE4|>8D45 FC lea eax,
00442DE7 >|.E8 CC09FCFF call 004037B8 ;->System.Proc_004037B8
00442DEC\.C3 retn
***************************跟入上面00442DC1的算法call********************************************
00442BA0/$55 push ebp
00442BA1|.8BEC mov ebp, esp
00442BA3|.6A 00 push 0
00442BA5|.6A 00 push 0
00442BA7|.6A 00 push 0
00442BA9|.53 push ebx
00442BAA|.56 push esi
00442BAB|.8BF2 mov esi, edx
00442BAD|.8945 FC mov , eax
00442BB0|.8B45 FC mov eax,
00442BB3|.E8 3010FCFF call 00403BE8
00442BB8|.33C0 xor eax, eax
00442BBA|.55 push ebp
00442BBB|.68 672C4400 push 00442C67
00442BC0|.64:FF30 push dword ptr fs:
00442BC3|.64:8920 mov fs:, esp
00442BC6|.33DB xor ebx, ebx
00442BC8|.8D55 F8 lea edx,
00442BCB|.8BC6 mov eax, esi
00442BCD|.E8 6E4AFCFF call 00407640
00442BD2|.8D45 F4 lea eax,
00442BD5|.8B55 F8 mov edx,
00442BD8|.E8 730CFCFF call 00403850
00442BDD|.8B45 F8 mov eax,
00442BE0|.E8 4F0EFCFF call 00403A34
00442BE5|.83F8 05 cmp eax, 5 ;注册码要大于5位
00442BE8|.7E 60 jle short 00442C4A
00442BEA|.8B45 F8 mov eax, ;假码放到eax
00442BED|.E8 420EFCFF call 00403A34
00442BF2|.8BF0 mov esi, eax ;把注册码的个数放到esi中
00442BF4|.83FE 01 cmp esi, 1 ;与1比较
00442BF7|.7C 2F jl short 00442C28 ;小于就跳
00442BF9|>8D45 F4 /lea eax,
00442BFC|.E8 0310FCFF |call 00403C04
00442C01|.8D4430 FF |lea eax,
00442C05|.50 |push eax ;EAX压栈
00442C06|.8B45 F8 |mov eax,
00442C09|.0FB64430 FF |movzx eax, byte ptr ;把注册码最后1位放到eax中
00442C0E|.F7E8 |imul eax ;eax=eax*eax 0C40
00442C10|.0FBFC0 |movsx eax, ax
00442C13|.F7EE |imul esi ;EAX=EAX*ESI(个数)6200
00442C15|.B9 19000000 |mov ecx, 19 ;0x19放到ECX 中
00442C1A|.99 |cdq ;edx清0
00442C1B|.F7F9 |idiv ecx ;EAX=EAX / ECX(0x19) 余数放到EDX
00442C1D|.83C2 41 |add edx, 41 ;EDX=EDX(余数)+0x41
00442C20|.58 |pop eax ;弹出EAX
00442C21|.8810 |mov , dl ;把DL 放到中 ‘N’
00442C23|.4E |dec esi ;ESI-1
00442C24|.85F6 |test esi, esi ;测试 ESI
00442C26|.^ 75 D1 \jnz short 00442BF9 ;不是0就跳
00442C28|>8B45 F4 mov eax, ;把计算好的值放到eax中(在这可以做内存注册机)
00442C2B|.8B55 FC mov edx, ;把假值放到edx中
00442C2E|.E8 110FFCFF call 00403B44 ;比较(经典)
00442C33|.75 17 jnz short 00442C4C ;不相等就挂~~~
00442C35|.8B45 FC mov eax,
00442C38|.8B55 F4 mov edx,
00442C3B|.E8 040FFCFF call 00403B44
00442C40|.75 04 jnz short 00442C46
00442C42|.B3 01 mov bl, 1
00442C44|.EB 06 jmp short 00442C4C
00442C46|>33DB xor ebx, ebx
00442C48|.EB 02 jmp short 00442C4C
00442C4A|>33DB xor ebx, ebx
00442C4C|>33C0 xor eax, eax
00442C4E|.5A pop edx
00442C4F|.59 pop ecx
00442C50|.59 pop ecx
00442C51|.64:8910 mov fs:, edx
00442C54|.68 6E2C4400 push 00442C6E
00442C59|>8D45 F4 lea eax,
00442C5C|.BA 03000000 mov edx, 3
00442C61|.E8 760BFCFF call 004037DC
00442C66\.C3 retn
第2次总结:
Nome:BADQUVAN
Codice:12345678
**********************************************
完美破解:
第1次点cancell按钮
Nome:fantasy
Codice:30531223
第2次:点ok按钮
Nome:BADQUVAN
Codice:12345678
原帖由 fantasy 于 2006-5-16 14:55 发表
2楼的兄弟可能有错误哦
真确的应该是:
这个crackme蛮有意思的分两次
第1次要点cancella按钮让它消失使得ok按钮变的好用
第2次点ok按钮要让它消失显示下面的图片
******************************* ...
:L:L不好意思,没搞懂!我以为注册后就这样呢!谢谢指点!:P fantasy 分析得太透彻了。我等菜鸟赶紧学吧!
页:
[1]
2