逆向破解之160个CrackMe —— 016

  • 2019 年 10 月 3 日
  • 筆記

CrackMe —— 016

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

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

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

来源 <-点击查看

编号 作者 保护方式
016 bjanes Serial(VB5)

 

 

 

工具 

x32dbg

VB Decompiler Pro

开始破解之旅

ON.1

爆破方式

使用x32dbg打开016号程序

右键 搜索->当前模块->字符串 

我们看见了错误提示字符串地址00403A69和正确提示字符串地址00403AE9

我们进入错误提示字符串地址00403A69处向上查看

004039FE | 83C4 18                  | add esp,18                              |  00403A01 | 66:85FF                  | test di,di                              |  00403A04 | 75 1C                    | jne bjcm20a.403A22                      |跳转处 跳转到00403A22  00403A06 | 8B7D 08                  | mov edi,dword ptr ss:[ebp+8]            |  00403A09 | B8 01000000              | mov eax,1                               |  00403A0E | 66:0345 E8               | add ax,word ptr ss:[ebp-18]             |  00403A12 | 0F80 94010000            | jo bjcm20a.403BAC                       |大跳  00403A18 | 8945 E8                  | mov dword ptr ss:[ebp-18],eax           |  00403A1B | 33DB                     | xor ebx,ebx                             |  00403A1D | E9 5AFDFFFF              | jmp bjcm20a.40377C                      |  00403A22 | 33DB                     | xor ebx,ebx                             |  00403A24 | 8B35 A4104000            | mov esi,dword ptr ds:[<&__vbaVarDup>]   |  00403A2A | B9 04000280              | mov ecx,80020004                        |  00403A2F | 894D 98                  | mov dword ptr ss:[ebp-68],ecx           |  00403A32 | B8 0A000000              | mov eax,A                               | A:'n'  00403A37 | 894D A8                  | mov dword ptr ss:[ebp-58],ecx           |  00403A3A | BF 08000000              | mov edi,8                               |  00403A3F | 8D95 50FFFFFF            | lea edx,dword ptr ss:[ebp-B0]           | edx:EntryPoint  00403A45 | 8D4D B0                  | lea ecx,dword ptr ss:[ebp-50]           |  00403A48 | 8945 90                  | mov dword ptr ss:[ebp-70],eax           |  00403A4B | 8945 A0                  | mov dword ptr ss:[ebp-60],eax           |  00403A4E | C785 58FFFFFF F0224000   | mov dword ptr ss:[ebp-A8],bjcm20a.4022F | 4022F0:L"Wrong serial!"  00403A58 | 89BD 50FFFFFF            | mov dword ptr ss:[ebp-B0],edi           |  00403A5E | FFD6                     | call esi                                |  00403A60 | 8D95 60FFFFFF            | lea edx,dword ptr ss:[ebp-A0]           | edx:EntryPoint  00403A66 | 8D4D C0                  | lea ecx,dword ptr ss:[ebp-40]           |  00403A69 | C785 68FFFFFF C8224000   | mov dword ptr ss:[ebp-98],bjcm20a.4022C | 4022C8:L"Sorry, try again!"

我们看到了最近的跳转处是00403A1D 该处是一个向上跳的JMP明显不是我们要找的跳转,在往上00403A12是一个向下的大跳也不是我们要找的跳转,再往上00403A04是一个跳转到00403A1D下发的地址可能是我们要找的跳转,在此处下断点

F9运行,在输入框内输入任意数据,点击Check it按钮,没有在跳转处暂停,我们在下一条指令下设置断点,再次点击按钮,此时程序暂停到了我们的断点处

由此可知,程序是通过别处跳转到00403A24

我在x32dbg内右键 搜索->当前模块->常数   在输入框内输入00403A24点击确定

 

搜索到一处引用的地址

点击进入该地址,在此处下断点

再次点击Check it 按钮

此时程序停在了我们刚刚设置的断点处,我们单步向下

此时可以看出程序跳转到了错误信息提示处,我们将00403A04处的指令改为NOP,F9运行

bingo~ 此时破解成功

 

ON.2

注册机方式

我们使用VB Decompiler Pro打开016号程序 

发现和我们的014号程序代码一样

附上我们的注册机代码

code = ''  for i in range(1, 10):      a = i ^ 2      code = code + str(a)[-1]  print(code)

得出结果为301674501我们输入到输入框内,点击Check it按钮

 

bingo ~ 破解成功