新手破解练习Crackme160之089 - Phrek crackme

  1. 暴力破解
    程序在win10下无法运行, 复制到xp虚拟机中可运行, 随便输入后验证, 提示"Naah! Wrong!"
    IDA工具载入, 搜索文本: Naah, 定位到如下代码处:
	......
	cseg01:01D2                 dd tiTForm
	cseg01:01D6                 db  38h ; 8
	cseg01:01D7                 db    0
	cseg01:01D8                 db    4
	cseg01:01D9                 db  4Dh ; M
	cseg01:01DA                 db  61h ; a
	cseg01:01DB                 db  69h ; i
	cseg01:01DC                 db  6Eh ; n
	cseg01:01DD                 db    0
	cseg01:01DE                 db    0
	cseg01:01DF aG3df           db 4,'g3df'             ; DATA XREF: cseg01:021Do
	cseg01:01E4 aH9cf8          db 5,'h9cf8'            ; DATA XREF: cseg01:0260o
	cseg01:01EA aNaahWrong      db 12,'Naah! Wrong!'    ; DATA XREF: cseg01:0297o
	cseg01:01EA                                         ; cseg01:loc_2FBo
	cseg01:01F7 aYeahGoodWork   db 16,'YEAH! Good work!' ; DATA XREF: cseg01:02E5o
	cseg01:0208 ; ---------------------------------------------------------------------------
	cseg01:0208
	cseg01:0208 loc_208:                                ; DATA XREF: cseg01:010Eo
	cseg01:0208                 push    bp
	cseg01:0209                 mov     bp, sp
	cseg01:020B                 mov     ax, 500h
	cseg01:020E                 call    @__StackCheck$q4Word ; __StackCheck(Word)
	cseg01:0213                 sub     sp, 500h
	cseg01:0217                 lea     di, [bp-400h]
	cseg01:021B                 push    ss
	cseg01:021C                 push    di
	cseg01:021D                 mov     di, offset aG3df ; "g3df"					        // di = "g3df"
	cseg01:0220                 push    cs
	cseg01:0221                 push    di
	cseg01:0222                 call    @$basg$qm6Stringt1 ; operator=(String &,String &)
	cseg01:0227                 lea     di, [bp-300h]
	cseg01:022B                 push    ss
	cseg01:022C                 push    di
	cseg01:022D                 les     di, [bp+6]
	cseg01:0230                 les     di, es:[di+18Ch]
	cseg01:0235                 push    es
	cseg01:0236                 push    di
	cseg01:0237                 call    @TControl@GetText$qv ; TControl::GetText(void)			//es = 取出用户名
	cseg01:023C                 call    @Concat$qm6Stringt1 ; Concat(String &,String &)			//st1 = g3df + es
	cseg01:0241                 lea     di, [bp-100h]
	cseg01:0245                 push    ss
	cseg01:0246                 push    di
	cseg01:0247                 push    0FFh
	cseg01:024A                 call    @$basg$qm6Stringt14Byte ; operator=(String &,String &,Byte)	        //这里应该是通过byte方式复制字符串吧, 没看太明白
	cseg01:024F                 lea     di, [bp-300h]
	cseg01:0253                 push    ss
	cseg01:0254                 push    di
	cseg01:0255                 lea     di, [bp-100h]
	cseg01:0259                 push    ss
	cseg01:025A                 push    di
	cseg01:025B                 call    @$basg$qm6Stringt1 ; operator=(String &,String &)
	cseg01:0260                 mov     di, offset aH9cf8 ; "h9cf8"					        //di = "h9cf8"
	cseg01:0263                 push    cs
	cseg01:0264                 push    di
	cseg01:0265                 call    @Concat$qm6Stringt1 ; Concat(String &,String &)			//str = str1 + di
	cseg01:026A                 lea     di, [bp-200h]
	cseg01:026E                 push    ss
	cseg01:026F                 push    di
	cseg01:0270                 push    0FFh
	cseg01:0273                 call    @$basg$qm6Stringt14Byte ; operator=(String &,String &,Byte)
	cseg01:0278                 lea     di, [bp-300h]
	cseg01:027C                 push    ss
	cseg01:027D                 push    di
	cseg01:027E                 les     di, [bp+6]
	cseg01:0281                 les     di, es:[di+18Ch]
	cseg01:0286                 push    es
	cseg01:0287                 push    di
	cseg01:0288                 call    @TControl@GetText$qv ; TControl::GetText(void)		        //取密码串
	cseg01:028D                 add     sp, 4
	cseg01:0290                 cmp     byte ptr [bp-300h], 0						//对比, 如果长度为0则报错
	cseg01:0295                 jnz     short loc_2AD
	cseg01:0297                 mov     di, offset aNaahWrong ; "Naah! Wrong!"
	cseg01:029A                 push    cs
	cseg01:029B                 push    di
	cseg01:029C                 les     di, [bp+6]
	cseg01:029F                 les     di, es:[di+184h]
	cseg01:02A4                 push    es
	cseg01:02A5                 push    di
	cseg01:02A6                 call    @TControl@SetText$q8TCaption ; TControl::SetText(TCaption)
	cseg01:02AB                 jmp     short locret_30F
	cseg01:02AD ; ---------------------------------------------------------------------------
	cseg01:02AD
	cseg01:02AD loc_2AD:                                ; CODE XREF: cseg01:0295j
	cseg01:02AD                 lea     di, [bp-400h]
	cseg01:02B1                 push    ss
	cseg01:02B2                 push    di
	cseg01:02B3                 les     di, [bp+6]
	cseg01:02B6                 les     di, es:[di+17Ch]
	cseg01:02BB                 push    es
	cseg01:02BC                 push    di
	cseg01:02BD                 call    @TControl@GetText$qv ; TControl::GetText(void)                     // 这里又取了一次文本框的值, 应该还是取密码框的值
	cseg01:02C2                 lea     di, [bp-500h]
	cseg01:02C6                 push    ss
	cseg01:02C7                 push    di
	cseg01:02C8                 lea     di, [bp-100h]
	cseg01:02CC                 push    ss
	cseg01:02CD                 push    di
	cseg01:02CE                 call    @$basg$qm6Stringt1 ; operator=(String &,String &)
	cseg01:02D3                 lea     di, [bp-200h]
	cseg01:02D7                 push    ss
	cseg01:02D8                 push    di
	cseg01:02D9                 call    @Concat$qm6Stringt1 ; Concat(String &,String &) 		      //这里又做了一次字符串相连
	cseg01:02DE                 call    @$bsub$qm6Stringt1 ; operator-(String &,String &)	              //这里两个字符串想减, 差为0就正确了
	cseg01:02E3                 jnz     short loc_2FB						      //这里又一个关键跳
	cseg01:02E5                 mov     di, offset aYeahGoodWork ; "YEAH! Good work!"
	cseg01:02E8                 push    cs
	cseg01:02E9                 push    di
	cseg01:02EA                 les     di, [bp+6]
	cseg01:02ED                 les     di, es:[di+184h]
	cseg01:02F2                 push    es
	cseg01:02F3                 push    di
	cseg01:02F4                 call    @TControl@SetText$q8TCaption ; TControl::SetText(TCaption)
	cseg01:02F9                 jmp     short locret_30F
	cseg01:02FB ; ---------------------------------------------------------------------------
	cseg01:02FB
	cseg01:02FB loc_2FB:                                ; CODE XREF: cseg01:02E3j
	cseg01:02FB                 mov     di, offset aNaahWrong ; "Naah! Wrong!"
	cseg01:02FE                 push    cs
	cseg01:02FF                 push    di
	cseg01:0300                 les     di, [bp+6]
	cseg01:0303                 les     di, es:[di+184h]
	cseg01:0308                 push    es
	cseg01:0309                 push    di
	cseg01:030A                 call    @TControl@SetText$q8TCaption ; TControl::SetText(TCaption)
	cseg01:030F
	cseg01:030F locret_30F:                             ; CODE XREF: cseg01:02ABj
	cseg01:030F                                         ; cseg01:02F9j
	cseg01:030F                 leave
	cseg01:0310                 retf    8
	......

上面的代码大概可以看出是按钮事件对应的代码, 里面就是算法部分~, 大概分析算法结果是:
有两个固定串"g3df"和"h9cf8"分别与我们输入的用户名串相连, 再与注册码比对~
我们找到关键跳
1). cseg01:0295 jnz short loc_2AD 对应的16进制代码段是: 75 16 BF EA 01 0E 57 C4
2). cseg01:02E3 jnz short loc_2FB 对应的16进制代码段是: 75 16 BF F7 01 0E 57 C4
我们打开UE编辑器, 分别搜索到这两个位置, 把1).的75改为EB(即: jnz改为jmp)跳过密码长度验证, 将2).的75 16 改为 90 90(即将jnz改为nop)保存, 复制到xp运行,
输入任意值或不输入, 点验证, 成功看到"YEAH! Good work!"~
 
2. 正常破解
由于在xp下, OD也无法单步调试, 虽然可以加载成功, 但地址段完全不一样, 可能就是因为NE程序的原因吧~ 所以放弃了,
由上面IDA代码可知, 密码串必然跟 用户名 与 "g3df","h9cf8" 这三串字符串相关~, 看了大佬的解法得到算法是:
pwd = g3df + user +g3df + user + h9cf8
例:
用户名: abc
密码为: g3dfabcg3dfabch9cf8

 
 
 
这是160个软件part1
这是160个软件part2

1~160每个破解过程,在吾爱破解论坛都有高手破解过了,也有整理好现成的, 我这边主要就是自己动手操作的过程,与他们的不太一样
附上高手们的连接: 点击前往查看
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载

新人入门教程"玩玩破解,写给新人看" 点击前往查看
我就是从这里开始的,对我这样的小白感觉超级友好~

下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~
OD界面布局

posted @ 2024-07-02 11:43  hankerstudio  阅读(8)  评论(0)    收藏  举报