好友
阅读权限 30
听众
最后登录 1970-1-1
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。
本帖最后由 a070458 于 2013-12-15 13:02 编辑
-------------------------------------------------【文章简介】-------------------------------------------------
【文章标题】 【吾爱2013CM大赛解答】-- Fuc kKido -- Unsped
【文章作者】 a070458
【作者邮箱】 无~
【作者主页】 无~
【软件名称】 2013CM
【软件大小】 44.0 KB (45,056 字节)
【下载地址】 http://www.52pojie.cn/thread-228711-1-1.html
【加壳方式】 无~
【保护方式】 无~
【编写语言】 易语言?
【使用工具】 OD
【操作平台】 XPSP3
【软件介绍】 52pojieCM大赛题目
【作者声明】 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
-------------------------------------------------【文章正文】-------------------------------------------------
打开CM 随便输入1234567 确定 发现错误信息框
暂停 返回 来到这里
[C++] 纯文本查看 复制代码
0040142C |. 68 00000000 push 0x0
00401431 |. 68 01524000 push CrackMe5.00405201 ; hoho
00401436 |. 68 06524000 push CrackMe5.00405206 ; No tips
0040143B |. FF35 DD524000 push dword ptr ds:[0x4052DD]
00401441 |. FF15 ED524000 call dword ptr ds:[0x4052ED] ; user32.MessageBoxA 错误信息框
00401447 |. 90 nop
00401448 |. 90 nop
00401449 |. 90 nop
0040144A |. 90 nop
0040144B |. 3965 FC cmp [local.1],esp //返回来到这里
0040144E |. 74 0D je short CrackMe5.0040145D
00401450 |. 68 06000000 push 0x6
00401455 |. E8 67070000 call CrackMe5.00401BC1
0040145A |. 83C4 04 add esp,0x4
0040145D |> 8BE5 mov esp,ebp
0040145F |. 5D pop ebp
00401460 \. C3 retn
00401461 . 56 push esi
00401462 . 57 push edi
00401463 . 53 push ebx
00401464 . E8 B7FFFFFF call CrackMe5.00401420
00401469 . 5B pop ebx ; 0012F9B0 //retn后来到这里
0040146A . 5F pop edi
0040146B . 5E pop esi
0040146C . C3 retn
push esi
push edi
push ebx
call XXXXXXXX
pop ebx
pop edi
pop esi
retn
看到这样的代码我就想到易语言的线程函数
创建线程 肯定要传递线程入口 这里的入口就是 00401461 . 56 push esi
所以 右键-搜索 -所有常量 然后找到全部下断
然后就定位到关键CALL 00401519 /$ 55 push ebp
[C++] 纯文本查看 复制代码
00401519 /$ 55 push ebp
0040151A |. 8BEC mov ebp,esp
0040151C |. 81EC 0C000000 sub esp,0xC
00401522 |. 68 04000080 push 0x80000004
00401527 |. 6A 00 push 0x0
00401529 |. A1 E1524000 mov eax,dword ptr ds:[0x4052E1]
0040152E |. 85C0 test eax,eax
00401530 |. 75 05 jnz short CrackMe5.00401537
00401532 |. B8 00524000 mov eax,CrackMe5.00405200
00401537 |> 50 push eax
00401538 |. 68 01000000 push 0x1
0040153D |. BB 98010000 mov ebx,0x198
00401542 |. E8 590C0000 call CrackMe5.004021A0
00401547 |. 83C4 10 add esp,0x10
0040154A |. 8945 FC mov [local.1],eax
0040154D |. 8D45 FC lea eax,[local.1]
00401550 |. 50 push eax ; //push 输入的
00401551 |. B8 0E524000 mov eax,CrackMe5.0040520E
00401556 |. 8945 F8 mov [local.2],eax
00401559 |. 8D45 F8 lea eax,[local.2]
0040155C |. 50 push eax ; //push一组固定字符
0040155D |. E8 E5010000 call CrackMe5.00401747 ; 算法call
00401562 |. 8945 F4 mov [local.3],eax ; 取回返回值
00401565 |. 8B5D F8 mov ebx,[local.2]
00401568 |. 85DB test ebx,ebx
0040156A |. 74 09 je short CrackMe5.00401575
0040156C |. 53 push ebx
0040156D |. E8 49060000 call CrackMe5.00401BBB
00401572 |. 83C4 04 add esp,0x4
00401575 |> 8B5D FC mov ebx,[local.1]
00401578 |. 85DB test ebx,ebx
0040157A |. 74 09 je short CrackMe5.00401585
0040157C |. 53 push ebx
0040157D |. E8 39060000 call CrackMe5.00401BBB
00401582 |. 83C4 04 add esp,0x4
00401585 |> 8B45 F4 mov eax,[local.3]
00401588 |. 50 push eax
00401589 |. 8B1D E5524000 mov ebx,dword ptr ds:[0x4052E5]
0040158F |. 85DB test ebx,ebx
00401591 |. 74 09 je short CrackMe5.0040159C
00401593 |. 53 push ebx
00401594 |. E8 22060000 call CrackMe5.00401BBB
00401599 |. 83C4 04 add esp,0x4
0040159C |> 58 pop eax
0040159D |. A3 E5524000 mov dword ptr ds:[0x4052E5],eax
004015A2 |. 68 04000080 push 0x80000004
004015A7 |. 6A 00 push 0x0
004015A9 |. A1 E5524000 mov eax,dword ptr ds:[0x4052E5]
004015AE |. 85C0 test eax,eax
004015B0 |. 75 05 jnz short CrackMe5.004015B7
004015B2 |. B8 00524000 mov eax,CrackMe5.00405200
004015B7 50 push eax ; //push 返回值
004015B8 |. 68 01000000 push 0x1
004015BD |. BB 98010000 mov ebx,0x198
004015C2 |. E8 D90B0000 call CrackMe5.004021A0
004015C7 |. 83C4 10 add esp,0x10
004015CA |. 8945 FC mov [local.1],eax
004015CD |. B8 1D524000 mov eax,CrackMe5.0040521D
004015D2 |. 33C9 xor ecx,ecx
004015D4 |. 85C0 test eax,eax
004015D6 |. 74 03 je short CrackMe5.004015DB
004015D8 |. 8B48 04 mov ecx,dword ptr ds:[eax+0x4]
004015DB |> 51 push ecx
004015DC |. 83C0 08 add eax,0x8
004015DF |. 50 push eax
004015E0 |. 8B45 FC mov eax,[local.1]
004015E3 |. 33DB xor ebx,ebx
004015E5 |. 85C0 test eax,eax
004015E7 |. 74 03 je short CrackMe5.004015EC
004015E9 |. 8B58 04 mov ebx,dword ptr ds:[eax+0x4]
004015EC |> 83C0 08 add eax,0x8
004015EF |. 50 push eax
004015F0 |. 3BD9 cmp ebx,ecx ; // 比较2字符串长度是否一样
004015F2 |. B8 01000000 mov eax,0x1
004015F7 |. 75 0A jnz short CrackMe5.00401603
004015F9 |. 48 dec eax
004015FA |. 85C9 test ecx,ecx
004015FC |. 74 05 je short CrackMe5.00401603
004015FE |. E8 6AFEFFFF call CrackMe5.0040146D ; //比较2字符串是否相等
00401603 |> 83C4 0C add esp,0xC
00401606 |. 85C0 test eax,eax
00401608 |. B8 00000000 mov eax,0x0
0040160D 0F94C0 sete al
00401610 |. 8945 F8 mov [local.2],eax
00401613 |. 8B5D FC mov ebx,[local.1]
00401616 |. 85DB test ebx,ebx
00401618 |. 74 09 je short CrackMe5.00401623 ; //爆破乱码
0040161A |. 53 push ebx ; //显示输入处理后的
0040161B |. E8 9B050000 call CrackMe5.00401BBB
00401620 |. 83C4 04 add esp,0x4
00401623 |> 68 61144000 push CrackMe5.00401461 //这个就是搜出来的常量
00401628 |. 68 1C1B4000 push CrackMe5.00401B1C
0040162D |. FF75 F8 push [local.2]
00401630 |. E8 51FDFFFF call CrackMe5.00401386
00401635 |. 8BE5 mov esp,ebp
00401637 |. 5D pop ebp
00401638 \. C3 retn
先看这里吧
00401550 |. 50 push eax ; push 输入的
00401551 |. B8 0E524000 mov eax,CrackMe5.0040520E
00401556 |. 8945 F8 mov [local.2],eax
00401559 |. 8D45 F8 lea eax,[local.2]
0040155C |. 50 push eax ; 一组固定字符
0040155D |. E8 E5010000 call CrackMe5.00401747 ; 算法call
00401562 |. 8945 F4 mov [local.3],eax ; 取回返回值
先PUSH输入的字符串
然后就是固定字符串
经过call 返回的
易语言的字符串都是 先一个dword 01 然后跟一个长度07 然后跟字符串的内容
假码 31 32 33 34 35 36 37
固定 CE D2 E0 40 A2 D2 D2
返回 9C 9F AC 0B 6C 9B A1 00 湡?l洝..
继续运行 到达004015DF |. 50 push eax ; CrackMe5.00405225 发现又push 一串字符串 You Win
然后后面 004015FE |. E8 6AFEFFFF call CrackMe5.0040146D ; 比较2字符串是否相等
手动改0040160D 0F94C0 sete al 为 setne al
显示
显示算法算出来的
算法call就不详细分析了 留意
0040189C |. 8A03 |mov al,byte ptr ds:[ebx] ; 取出xorbuf
00401924 |. 8A03 |mov al,byte ptr ds:[ebx] ; Regcode[i+1]
004019BA |. DC65 A8 |fsub qword ptr ss:[ebp-0x58] ; 相减
就一减法
手动计算一下求出了真码 duck Ki(64 75 63 6B 20 4B 69)
填入 成功
免费评分
查看全部评分