- UID
- 242
注册时间2005-3-6
阅读权限40
最后登录1970-1-1
独步武林
该用户从未签到
|
【破文标题】破解一个老外的 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
|