| 
注册时间2005-3-6
阅读权限40
最后登录1970-1-1UID242 独步武林  
 
 该用户从未签到 | 
 
| 【破文标题】破解一个老外的 Crackme 【破文作者】lgjxj
 【作者邮箱】[email protected]
 【作者主页】
 【破解工具】OllyDbg 1.1
 【破解平台】Windows xp SP2
 【软件名称】crackme_5.exe
 【软件大小】
 【原版下载】
 【保护方式】UPX 0.89.6 - 1.02 / 1.05
 【软件简介】这个 Crackme 是由一个老外网页合集中下的,强度 弱   壳也很弱
 
 ------------------------------------------------------------------------
 这个壳手脱比用脱壳机还快,但想到新手开始不要分心的话,可以用脱壳机,脱壳后 OD 载入,大家如果学过一些
 简单的破解(初学),应该知道要搜索字符串的,不过这个 Crackme,你会失望,没有有用的,不过这里我可以教大家
 一个简单的方法。载入后,F9 运行,输入用户名和注册码后在插件里找到 ApiBreak 这个插件,点击-算中 万能断点
 把里面的勾上后,从新在任务栏提出 Crackme ,点 check 中断。Alt+F9 返回 ,一般的软件和 Crackme 只要按 F8
 几下就能找到关键的地方了,可是这个 XXX 妈的,按了我一分钟才到算法点,晕。(上面的方法对付一般的 Crackme都有效)来到下面
 
 
 00450482  |.  C645 FF 01    MOV BYTE PTR SS:[EBP-1],1               ; 这里下断
 
 00450486  |>  33C0          /XOR EAX,EAX                             ;  每轮首先清空 EAX
 00450488  |.  8A45 FF       |MOV AL,BYTE PTR SS:[EBP-1]
 0045048B  |.  8B55 F8       |MOV EDX,DWORD PTR SS:[EBP-8]
 0045048E  |.  0FB64402 FF   |MOVZX EAX,BYTE PTR DS:[EDX+EAX-1]       ;  每个字符入EAX
 00450493  |.  03D8          |ADD EBX,EAX                             ;  bx+ax bx 初始值为 0
 00450495  |.  8BC3          |MOV EAX,EBX
 00450497  |.  25 01000080   |AND EAX,80000001                        ;  与固定数值 2147483649 作与运算
 0045049C  |.  79 05         |JNS SHORT 1.004504A3
 0045049E  |.  48            |DEC EAX
 0045049F  |.  83C8 FE       |OR EAX,FFFFFFFE
 004504A2  |.  40            |INC EAX
 004504A3  |>  F7EB          |IMUL EBX                                ;  把 ax 的结果和 bx 相乘
 004504A5  |.  03D8          |ADD EBX,EAX                             ;  把结果和 bx 相加
 004504A7  |.  8BC3          |MOV EAX,EBX                             ;  又回传给 ax
 004504A9  |.  B9 05000000   |MOV ECX,5                               ;  固定数值 5 传 cx
 004504AE  |.  99            |CDQ
 004504AF  |.  F7F9          |IDIV ECX                                ;  用 AX 除以 5,DX 存高位数,ax 存底位数值
 004504B1  |.  03DA          |ADD EBX,EDX                             ;  bx + dx
 004504B3  |.  8BC3          |MOV EAX,EBX
 004504B5  |.  25 07000080   |AND EAX,80000007                        ;  ax 命苦啊,又和固定数值 2147483655 作与运算
 004504BA  |.  79 05         |JNS SHORT 1.004504C1
 004504BC  |.  48            |DEC EAX
 004504BD  |.  83C8 F8       |OR EAX,FFFFFFF8
 004504C0  |.  40            |INC EAX
 004504C1  |>  03D8          |ADD EBX,EAX                             ;  bx+ax (bx 命好,得收成果)
 004504C3  |.  03DE          |ADD EBX,ESI                             ;  si 初始值为一
 004504C5  |.  8B45 F8       |MOV EAX,DWORD PTR SS:[EBP-8]            ;  用户名入 AX
 004504C8  |.  E8 1340FBFF   |CALL 1.004044E0                         ;  这个 CALL 的用处是得到用户名的长度
 004504CD  |.  8B55 F8       |MOV EDX,DWORD PTR SS:[EBP-8]            ;  用户名入 EDX
 004504D0  |.  0FB64402 FF   |MOVZX EAX,BYTE PTR DS:[EDX+EAX-1]       ;  最后一个字符入 EAX
 004504D5  |.  8BD3          |MOV EDX,EBX                             ;  把上面一轮结果入 EDX
 004504D7  |.  C1E2 02       |SHL EDX,2                               ;  DX * 4
 004504DA  |.  03C2          |ADD EAX,EDX                             ;  AX + DX
 004504DC  |.  8BD8          |MOV EBX,EAX                             ;  都说 BX 命好,又收结果
 004504DE  |.  C1EB 02       |SHR EBX,2                               ;  bx / 4
 004504E1  |.  C1EB 02       |SHR EBX,2                               ;  bx / 4
 004504E4  |.  33DE          |XOR EBX,ESI
 004504E6  |.  33DE          |XOR EBX,ESI
 004504E8  |.  0FAFDE        |IMUL EBX,ESI
 004504EB  |.  8BF3          |MOV ESI,EBX                             ;  原来最好命的是 ESI
 004504ED  |.  FE45 FF       |INC BYTE PTR SS:[EBP-1]
 004504F0  |.  FE4D F3       |DEC BYTE PTR SS:[EBP-D]
 004504F3  |.^ 75 91         \JNZ SHORT 1.00450486
 
 上面这里是一个循环,你输入的用户名有多小个字符就循环几次,下面的 CALL 的分析就不写了,累
 
 004504F5  |>  8D55 E0       LEA EDX,DWORD PTR SS:[EBP-20]
 004504F8  |.  8B87 04030000 MOV EAX,DWORD PTR DS:[EDI+304]
 004504FE  |.  E8 8DEEFDFF   CALL 1.0042F390
 00450503  |.  8B45 E0       MOV EAX,DWORD PTR SS:[EBP-20]
 00450506  |.  50            PUSH EAX
 00450507  |.  8D45 DC       LEA EAX,DWORD PTR SS:[EBP-24]
 0045050A  |.  50            PUSH EAX
 0045050B  |.  8D55 D8       LEA EDX,DWORD PTR SS:[EBP-28]
 0045050E  |.  8BC6          MOV EAX,ESI
 00450510  |.  E8 B37DFBFF   CALL 1.004082C8
 00450515  |.  8B45 D8       MOV EAX,DWORD PTR SS:[EBP-28]            ;  输入用户名 lgjxj 经上面计算后结果 -640106896
 00450518  |.  E8 C33FFBFF   CALL 1.004044E0
 0045051D  |.  83E8 02       SUB EAX,2
 00450520  |.  50            PUSH EAX
 00450521  |.  8D55 D4       LEA EDX,DWORD PTR SS:[EBP-2C]
 00450524  |.  8BC6          MOV EAX,ESI
 00450526  |.  E8 9D7DFBFF   CALL 1.004082C8                          ;
 0045052B  |.  8B45 D4       MOV EAX,DWORD PTR SS:[EBP-2C]
 0045052E  |.  BA 03000000   MOV EDX,3
 00450533  |.  59            POP ECX                                  ;  CX=8
 00450534  |.  E8 FF41FBFF   CALL 1.00404738                        ;这个 CALL 是用来出去上面结果的前两位数
 00450539  |.  8B55 DC       MOV EDX,DWORD PTR SS:[EBP-24]            ;  结果
 
 
 
 ------------------------------------------------------------------------
 这个 crackme 就是把用户名经计算后的结果,去除前两位,如 我的用户名 lgjxj 得到 -640106896
 那么就去除了 -6 ,注册码就是 40106896,很简单的
 
 很多新手都说看不懂算法,其实你要多留意寄存器的变化,基本的汇编语言很容易学的,我中学毕业就没读书了
 现在一间五星酒店任西饼房主管,30多岁的人了,几个月前那起本汇编语言(王爽的那本),三个月就读完了,当然还不能完全理解,但我告诉大家,破解不需要全部的汇编语言,全会当然好
 以前也自学过 C 语言,相信没有什么东西是学不会的,只是没那些大虾厉害,写教程比破解这个 Crackme还累
 ------------------------------------------------------------------------
 【版权声明】随意转载,收藏 ,请注明出处
 | 
 
x本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?加入我们 
  |