CrackMe —— 010

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

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

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

来源 <-点击查看

编号 作者 保护方式
010 Andrénalin3 Serial
011 Andrénalin4 Serial

工具

x32dbg

VB Decompiler Pro

吾爱破解内存补丁生成器1.0

开始破解之旅

ON.1

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

我们看到有一个 “RiCHTiG !" 的字符串,从字面上猜测应该是输入正确的Key之后所跳转的地方

我们点进进入来地址,向上翻看,看到最近的一个跳转,跳过了正确跳转的提示地方,我们在此下断点

F9运行,在输入框内输入任意文字,停在了我们的断点处,将寄存器ZF值设置为0,F9运行,发现弹出正确提示框

首先我们使用DelphiDecompiler 打开010号程序

点击左侧边框中的Code -> Form1 -> Command1_Click

右侧显示出了源代码

我们分析源代码可得

loc_00401EC2: var_58 = Text1.Text              取输入框文本
loc_00401EFA: var_44 = var_58              
loc_00401F56: For var_24 = 1 To Len(var_44) Step 1  循环输入框文本长度
loc_00401F68:
loc_00401F6A: If var_104 = 0 Then GoTo loc_0040202B
loc_00401FA3: var_58 = CStr(Mid(var_44, CLng(var_24), 1))  取变量var_24个长度的字符串
loc_00401FB0: Asc(var_58) = Asc(var_58) + 000Ah        将变量进行ascii运算+000AH
loc_00401FC4: var_84 = Chr$(Asc(var_58)+000Ah)         将变量进行ascii运算+000AH 将结果转化为字符串
loc_00401FE6: var_9C = var_34 & Chr$(Asc(var_58)+000Ah) 将变量进行ascii运算+000AH 将结果转化为字符串 同时和var_34变量相加
loc_00401FED: var_34 = var_9C
loc_00402020: Next var_24
loc_00402026: GoTo loc_00401F68
loc_0040202B: 'Referenced from: 00401F6A
loc_00402053: If (var_34 = "kXy^rO|*yXo*m\kMuOn*+") = 0 Then GoTo loc_00402119 比较如何变量var_34等于 kXy^rO|*yXo*m\kMuOn*+ 进行跳转

ON.2

爆破方式破解

00402050 | 66:85C0                  | test ax,ax                                              |
00402053 | 0F84 C0000000 | je andrénalin.3.402119 | 将JE 修改为NOP
00402059 | FF15 6C414000 | call dword ptr ds:[<&rtcBeep>] |
0040205F | 8B1D 94414000 | mov ebx,dword ptr ds:[<&__vbaVarDup>] |
00402065 | B9 0A000000 | mov ecx,0xA | A:'\n'
0040206A | B8 04000280 | mov eax,0x80020004 |
0040206F | 898D 64FFFFFF | mov dword ptr ss:[ebp-0x9C],ecx | [ebp-9C]:"梵"
00402075 | 898D 74FFFFFF | mov dword ptr ss:[ebp-0x8C],ecx |
0040207B | 8D95 44FFFFFF | lea edx,dword ptr ss:[ebp-0xBC] | [ebp-BC]:"梵"
00402081 | 8D4D 84 | lea ecx,dword ptr ss:[ebp-0x7C] |
00402084 | 8985 6CFFFFFF | mov dword ptr ss:[ebp-0x94],eax |
0040208A | 8985 7CFFFFFF | mov dword ptr ss:[ebp-0x84],eax |
00402090 | C785 4CFFFFFF 281B4000 | mov dword ptr ss:[ebp-0xB4],andrénalin.3.401B28 | 401B28:L"RiCHTiG !"

我们将地址修改为NOP保存,即可爆破成功

内存补丁方式

我们打开内存补丁生成器,在内存地址中填入 ,修改指令处填写0F84 ,原指令为对应汇编语言为je,jne为

将程序拖入内存补丁程序内,点击添加指令,再点击导出补丁即可

打开010号程序,打开生成的内存补丁程序,点击开始补丁,在输入框内输入任意数据,点击OK,破解成功

CrackMe —— 011

ON.1

首先使用 VB Decompiler Pro程序打开011号程序

点击Code -> Form1

我们看到下面有4个Timer函数,我们点击一个查看反编译代码

经过分析可以得知计算方式

循环:

  向前取第N为计算ascii 值+从后取一位转换为数值型

  计算其16进制

字符串相加其结果

循环完毕

对比判断Key

以上为伪代码

我们可以得知最后两位为数值型

我们可以逆向其已知Key

拿 0817E747D7A7D7C7F82836D74747A7F7E7B7C7D826D817E7B7C 举例,x32dbg搜索字符串会搜索到很多类似的字符串,仔细观察发现其中会充满RR之类的字符无法转成16进制,固寻找一个正确的字符串

data = '0817E747D7A7D7C7F82836D74747A7F7E7B7C7D826D817E7B7C'
a = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '*', '#']
k = 0
for i in a:
for j in a:
if j in ['*', '#'] or i in ['*', '#']:        因为* # 字符无法转换为10进制所以跳过
continue
if ord(i) + (10 * int(i) + int(j)) == int(data[1:3], 16):
k = 10 * int(i) + int(j)
print('最后一位为:', k)
break
password = ''
for i in range(1, len(data), 2):
password = password + chr(int(str(data[i:i + 2]), 16) - k)
print(password)

最后计算出结果为 74*3032589#**0541238#7412

我们填入输入框内,提示我们注册成功

ON.2

搜索字符串,找到正确的注册字符,地址为0040D0CC,进入该地址

0040D0AE | 66:85C0                  | test ax,ax                                              |
0040D0B1 | 74 4C | je andrénalin.4.40D0FF |
0040D0B3 | 8B45 08 | mov eax,dword ptr ss:[ebp+0x8] |
0040D0B6 | 50 | push eax |
0040D0B7 | 8B10 | mov edx,dword ptr ds:[eax] | edx:EntryPoint
0040D0B9 | FF92 38030000 | call dword ptr ds:[edx+0x338] |
0040D0BF | 50 | push eax |
0040D0C0 | 8D45 AC | lea eax,dword ptr ss:[ebp-0x54] |

看到最近的跳转处0040D0B1,此处跳转会经过我们的正确代码,将其改为NOP

此时回到程序界面发现程序已经注册成功

逆向破解之160个CrackMe —— 010-011的更多相关文章

  1. 逆向破解之160个CrackMe —— 001

    CrackMe —— 001 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  2. 逆向破解之160个CrackMe —— 002-003

    CrackMe —— 002 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  3. 逆向破解之160个CrackMe —— 004-005

    CrackMe —— 004 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  4. 逆向破解之160个CrackMe —— 013

    CrackMe —— 013 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  5. 逆向破解之160个CrackMe —— 014

    CrackMe —— 014 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  6. 逆向破解之160个CrackMe —— 016

    CrackMe —— 016 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  7. 逆向破解之160个CrackMe —— 017

    CrackMe —— 017 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  8. 逆向破解之160个CrackMe —— 018

    CrackMe —— 018 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  9. 逆向破解之160个CrackMe —— 025

    CrackMe —— 025 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

随机推荐

  1. 解构如何运用的解构--报错 throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn))

    let aa={ error_code: 0, reason: "插入数据成功" };//如何拿到 error_code 和 reason 的值 let { error_code, ...

  2. LG3389 「模板」高斯消元法 高斯消元

    问题描述 LG3389 题解 高斯消元,是用来解\(n\)元一次方程组的算法,时间复杂度\(O(n^3)\) 这样就构造出了这个方程组的矩阵 目标就是把这个矩阵左边\(n \times n\)消为单位 ...

  3. Python实现网络多人聊天室 - Windows

    项目名称:多人聊天室项目结构: client.py server.py settings.py项目思路:服务端接收客户端连接,客户端发送信息给服务端,服务端将信息发送给所有客户端.项目实现:主进程负责 ...

  4. hydra 常用命令解析

    参数说明: Hydra v9.0 (c) 2019 by van Hauser/THC - Please do not use in military or secret service organi ...

  5. 源码详解系列(五) ------ C3P0的使用和分析(包括JNDI)

    简介 c3p0是用于创建和管理连接,利用"池"的方式复用连接减少资源开销,和其他数据源一样,也具有连接数控制.连接可靠性测试.连接泄露控制.缓存语句等功能.目前,hibernate ...

  6. [开源]OSharpNS 步步为营系列 - 4. 添加业务对外API

    什么是OSharp OSharpNS全称OSharp Framework with .NetStandard2.0,是一个基于.NetStandard2.0开发的一个.NetCore快速开发框架.这个 ...

  7. torch_12_dataset和dataLoader,Batchnormalization解读

    参考博客https://blog.csdn.net/qq_36556893/article/details/86505934 深度学习入门之pytorch https://github.com/L1a ...

  8. 阿里云 CDN 业务基于边缘容器的云原生转型实践

    导读:本文基于边缘容器的阿里云 CDN 云原生实践, 涵盖了边缘容器的背景和趋势,边缘托管集群 ACK Managed Edge K8s(文中简称“Edge@ACK”) 的能力.架构,以及基于边缘容器 ...

  9. 一个jetty部署多个项目配置之方法一

    https://my.oschina.net/wangyongqing/blog/115647 Jetty用户经常想配置他们的web应用到不同的虚拟主机. 通常情况下,一个单一的IP地址的机器有不同的 ...

  10. 升级GCC

    1. wget http://ftp.gnu.org/gnu/gcc/gcc-4.9.4/gcc-4.9.4.tar.gz 2. tar -zxvf gcc-4.9.4.tar.gz 3. cd gc ...