【文章标题】:我的第一个CrackMe算法分析
【文章作者】:今夜无雨
【作者邮箱】:89732558@qq.com
【作者主页】:想有,但没有~~
【作者QQ】:89732558
【破解工具】:OllyICE,Windows自带计算器
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
---------------------------------------------------------------
今天轮到我在队里值班,一个字冷啊,没有办法,太无聊,打开电脑找几篇看雪精华看看,也学习了好久,在论坛上也逛了好久
今天来看看我到底学了多少东东,为了避免伤自信心,找个容易的吧,看到andy00大哥的一篇精华,先down下crack再说
(andy00大哥不会说我侵权吧~?~如果违规的话,请老大删除),一步步跟啊,最后发现我的注册名通过跟踪出来的注册码是正确的,
呵呵,嘻!!!就拿来献丑啦~~~
开始啦~~~
点击 Ultra 字符串参考, 条目 地址=0040120B 反汇编=PUSH Crackme1.004020D9文本字符串=well done.well done.
呵呵 双击 向上拉啊拉啊,看到<JMP.&USER32.GetDlgItemTextA> 发现新大陆,直接在这按f2啊,运行,输入注册信息,断下
,嘻~~~开始f8啦~~
00401139 $ 6A 32 PUSH 32 ; /Count = 32 (50.)
0040113B . 68 F3204000 PUSH Crackme1.004020F3 ; |Buffer = Crackme1.004020F3
00401140 . 68 C8000000 PUSH 0C8 ; |ControlID = C8 (200.)
00401145 . FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd
00401148 . E8 DE000000 CALL <JMP.&USER32.GetDlgItemTextA> ; \GetDlgItemTextA
0040114D . 83F8 00 CMP EAX,0 ; 检查注册名是否输入
00401150 . 0F84 99000000 JE Crackme1.004011EF
00401156 . 83F8 04 CMP EAX,4 ; 注册名大于4位
00401159 . 0F82 90000000 JB Crackme1.004011EF
0040115F . 33C9 XOR ECX,ECX ; ecx 清零
00401161 . 33DB XOR EBX,EBX ; ebx 清零
00401163 . 33F6 XOR ESI,ESI ; esi 清零
00401165 . 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
00401168 > 0FBE81 F32040>MOVSX EAX,BYTE PTR DS:[ECX+4020F3] ; 取注册名的第i位的ascii值 传给 eax
0040116F . 83F8 20 CMP EAX,20 ; 注册名的第i位ascii码值和20比较
00401172 . 74 07 JE SHORT Crackme1.0040117B ; 相等跳走(参考andy00才知此处处理注册码中的空格的)
00401174 . 6BC0 04 IMUL EAX,EAX,4 ; EAX=i位的ascii码值(eax×4)(十六进制运算)
00401177 . 03D8 ADD EBX,EAX ; 将注册名的i位ascii码值×4 保存在ebx
00401179 . 8BF3 MOV ESI,EBX ; 将ebx赋值给 esi
0040117B > 41 INC ECX ; 控制循环
0040117C . 3B4D FC CMP ECX,DWORD PTR SS:[EBP-4] ; 下面的JNE 由ecx 控制 什么时候 ecx=注册名的长度时 循环退出
0040117F .^ 75 E7 JNZ SHORT Crackme1.00401168
00401181 . 83FE 00 CMP ESI,0 ; esi的值是各位ascii码的值×4 后相加得到的
00401184 . 74 69 JE SHORT Crackme1.004011EF
00401186 . BB 89476500 MOV EBX,654789 ; ebx =654789
0040118B > 0FBE81 F22040>MOVSX EAX,BYTE PTR DS:[ECX+4020F2] ; 倒序取注册名
00401192 . 4B DEC EBX
00401193 . 6BC3 02 IMUL EAX,EBX,2 ; ex=ebx×2
00401196 . 03D8 ADD EBX,EAX ; EBX=ebx+eax
00401198 . 4B DEC EBX
00401199 . 49 DEC ECX ; dec 影响zf 当ecx值为1时 下面的跳转结束
0040119A .^ 75 EF JNZ SHORT Crackme1.0040118B
0040119C . 56 PUSH ESI ; /将上面的esi经过运算的值 压栈
0040119D . 53 PUSH EBX ; |将上面的ebx经过运算的值 压栈
0040119E . 68 C7204000 PUSH Crackme1.004020C7 ; |bs-%lx-%lu
004011A3 . 68 BB214000 PUSH Crackme1.004021BB ; |s = Crackme1.004021BB
004011A8 . E8 6C000000 CALL <JMP.&USER32.wsprintfA> ; \wsprintfA
004011AD . 58 POP EAX ; 注册码出现的地方(注意啦~!~)
004011AE . 58 POP EAX
004011AF . 58 POP EAX
004011B0 . 58 POP EAX
004011B1 . E8 01000000 CALL Crackme1.004011B7
004011B6 . C3 RETN
004011B7 $ 33C9 XOR ECX,ECX
004011B9 . 6A 32 PUSH 32 ; /Count = 32 (50.)
004011BB . 68 57214000 PUSH Crackme1.00402157 ; |Buffer = Crackme1.00402157
004011C0 . 68 C9000000 PUSH 0C9 ; |ControlID = C9 (201.)
004011C5 . FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd
004011C8 . E8 5E000000 CALL <JMP.&USER32.GetDlgItemTextA> ; \GetDlgItemTextA
004011CD . 83F8 00 CMP EAX,0
004011D0 . 74 1D JE SHORT Crackme1.004011EF
004011D2 . 33C9 XOR ECX,ECX
004011D4 > 0FBE81 572140>MOVSX EAX,BYTE PTR DS:[ECX+402157] ; 取注册码的i为ascii码
004011DB . 0FBE99 BB2140>MOVSX EBX,BYTE PTR DS:[ECX+4021BB] ; 这里出现明码比较
004011E2 . 3BC3 CMP EAX,EBX ; 出现一位可以记录一位 ,虽然你的注册码和他不 一样,你可以更改标志位(zf的值)来达到继续跟踪的目的
004011E4 . 75 09 JNZ SHORT Crackme1.004011EF ; 爆破的关键位置
004011E6 . 83F8 00 CMP EAX,0
004011E9 . 74 19 JE SHORT Crackme1.00401204
004011EB . 41 INC ECX
004011EC .^ EB E6 JMP SHORT Crackme1.004011D4
004011EE . C3 RETN
004011EF > 6A 10 PUSH 10 ; /Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
004011F1 . 68 E4204000 PUSH Crackme1.004020E4 ; |nope
004011F6 . 68 E9204000 PUSH Crackme1.004020E9 ; |try again
004011FB . FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hOwner
004011FE . E8 34000000 CALL <JMP.&USER32.MessageBoxA> ; \MessageBoxA
00401203 . C3 RETN
00401204 > 6A 40 PUSH 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00401206 . 68 D2204000 PUSH Crackme1.004020D2 ; |solved
0040120B . 68 D9204000 PUSH Crackme1.004020D9 ; |well done.
00401210 . FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hOwner
00401213 . E8 1F000000 CALL <JMP.&USER32.MessageBoxA> ; \MessageBoxA
00401218 . C3 RETN
这是我的注册信息
free_day
BS-23AE2AE9-3324
[培训]《安卓高级研修班(网课)》月薪三万计划,掌
握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法