fjnhwwx 发表于 2006-5-15 20:16:25

没有提示,按钮为灰色的真的好难破

大家好!
我是菜鸟,学习破解已有一个多星期了,如果是在OD中找得到字符提示的我大都会暴破。但对于一些没有提示注册成功、失败提示、输入错误的,以及输入注册码错误,注册按钮未激活,不知如何入手。现在就有一个让我摸不着头脑。
请热心人帮帮忙。谢谢!!!

谢谢所有关注此贴的兄弟
https://www.chinapyg.com/viewthread.php?tid=4830&highlight=
关键一是要用DEDE找到程序两个命令按钮的入口地址下断
关键二是找到关键跳
不明白的是如果不懂算法能否追到真码

[ 本帖最后由 fjnhwwx 于 2006-5-17 21:55 编辑 ]

obi-one 发表于 2006-5-16 08:49:01

看一下我的附件,OK了,同你一样爆破是我的首选!/:D
在论坛多混几天就行了,你才学几天而已!;)

[ 本帖最后由 obi-one 于 2006-5-16 09:32 编辑 ]

寒湖鹤影 发表于 2006-5-16 10:40:29

内容没看,试试用汉化工具,修改其资源试试行不行

逸云 发表于 2006-5-16 11:49:51

原帖由 obi-one 于 2006-5-16 08:49 发表
看一下我的附件,OK了,同你一样爆破是我的首选!/:D
在论坛多混几天就行了,你才学几天而已!;)
能不能说说方法或者思路呢?是不是找按钮变灰的那个函数?

fjnhwwx 发表于 2006-5-16 12:34:17

原帖由 obi-one 于 2006-5-16 08:49 发表
看一下我的附件,OK了,同你一样爆破是我的首选!/:D
在论坛多混几天就行了,你才学几天而已!;)

你好,你能否分别用内存法、消息法、函数法、跟踪法破解它,并写个破文,最好动画演示,我想所有菜鸟都会感谢你的。

obi-one 发表于 2006-5-16 13:41:06

原帖由 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

fjnhwwx 发表于 2006-5-16 14:13:53

原帖由 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...
谢谢指点,我想知道这几个关键点是如何找到的,用何种方法

fantasy 发表于 2006-5-16 14:55:23

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

   

obi-one 发表于 2006-5-16 15:03:49

原帖由 fantasy 于 2006-5-16 14:55 发表
2楼的兄弟可能有错误哦


真确的应该是:


这个crackme蛮有意思的分两次
第1次要点cancella按钮让它消失使得ok按钮变的好用
第2次点ok按钮要让它消失显示下面的图片

******************************* ...


:L:L不好意思,没搞懂!我以为注册后就这样呢!谢谢指点!:P

wzwgp 发表于 2006-5-16 17:11:45

fantasy 分析得太透彻了。我等菜鸟赶紧学吧!
页: [1] 2
查看完整版本: 没有提示,按钮为灰色的真的好难破