我的Github:   Github

逆向破解之160个CrackMe —— 029

CrackMe —— 029

160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序

CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 cracker,想挑战一下其它 cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破。

CrackMe简称CM。
程序下载地址:点击我

来源 <-点击查看

编号 作者 保护方式
029 Cosh Name/Serial

 

 

 

工具 

x32dbg

开始破解之旅

ON.1

爆破方式

首先使用x32dbg打开029号程序,搜索字符串

这里我们看到了正确信息提示符和错误信息提示符

进入正确信息提示符地址004015E0

0040159A | 8B45 F0                  | mov eax,dword ptr ss:[ebp-10]           |
0040159D | 8A18                     | mov bl,byte ptr ds:[eax]                |
0040159F | 32D9                     | xor bl,cl                               |
004015A1 | 8818                     | mov byte ptr ds:[eax],bl                |
004015A3 | 41                       | inc ecx                                 |
004015A4 | 40                       | inc eax                                 |
004015A5 | 8038 00                  | cmp byte ptr ds:[eax],0                 |
004015A8 | 75 F3                    | jne cosh.3.40159D                       |
004015AA | 8B45 E4                  | mov eax,dword ptr ss:[ebp-1C]           |
004015AD | 8B55 F0                  | mov edx,dword ptr ss:[ebp-10]           | edx:EntryPoint
004015B0 | 33C9                     | xor ecx,ecx                             |
004015B2 | 8A18                     | mov bl,byte ptr ds:[eax]                |
004015B4 | 8A0A                     | mov cl,byte ptr ds:[edx]                | edx:EntryPoint
004015B6 | 3AD9                     | cmp bl,cl                               |
004015B8 | 75 09                    | jne cosh.3.4015C3                       | 此处验证跳转
004015BA | 40                       | inc eax                                 |
004015BB | 42                       | inc edx                                 | edx:EntryPoint
004015BC | 8038 00                  | cmp byte ptr ds:[eax],0                 |
004015BF | 75 EF                    | jne cosh.3.4015B0                       | 此处验证跳转
004015C1 | EB 16                    | jmp cosh.3.4015D9                       |
004015C3 | 6A 00                    | push 0                                  |
004015C5 | 68 6C304000              | push cosh.3.40306C                      | 40306C:"ERROR"
004015CA | 68 40304000              | push cosh.3.403040                      | 403040:"One of the Details you entered was wrong"
004015CF | 8B4D E0                  | mov ecx,dword ptr ss:[ebp-20]           |
004015D2 | E8 BB020000              | call <JMP.&Ordinal#4224>                |
004015D7 | EB 14                    | jmp cosh.3.4015ED                       |
004015D9 | 6A 00                    | push 0                                  |
004015DB | 68 34304000              | push cosh.3.403034                      | 403034:"YOU DID IT"
004015E0 | 68 20304000              | push cosh.3.403020                      | 403020:"Well done,Cracker"
004015E5 | 8B4D E0                  | mov ecx,dword ptr ss:[ebp-20]           |
004015E8 | E8 A5020000              | call <JMP.&Ordinal#4224>                |
004015ED | 6A 64                    | push 64                                 |
004015EF | FF15 00204000            | call dword ptr ds:[<&Sleep>]            |

我们看到在地址004015BF处经过JMP来到了正确提示符处,这里就是验证注册码正确性的地方,在继续向上翻看,也有验证地址为004015B8,此处验证失败也会跳转到错误的地方

我们将这两个地址修改为NOP,F9运行输入任意字符点击check按钮

bingo ~ 破解成功

在上方还会有多处验证判断,判断输入格式是否正确

ON.2

追码方式

我们看到00401580地址到00401587地址为Name计算的方法

使用Python代码为

name = 'lonenysky'
value = []
for i, key in enumerate(name):
    value.append(chr(ord(key) ^ (i + 1)))
print('name is %s' % ''.join(value))
value = []
for i, key in enumerate(name):
    value.append(chr(ord(key) ^ (i + 0x0a)))
print('serial is %s' % ''.join(value))

 bingo ~ 破解成功

在追码的过程中当我们不知道cl的值时可以观看下方的窗口推测出来

 

posted @ 2019-09-09 00:12  寂夜云  阅读(281)  评论(0编辑  收藏  举报