新手破解练习Crackme160之093 - Crackme7
- 暴力破解
使用Delphi Decompiler分析源码可知各个控制事件的入口地址
TfrmMain.edtNameChange 004435A4
TfrmMain.btnNSTestClick 0044378C
TfrmMain.edtSerialChange 00443808
TfrmMain.btnCOTestClick 00443A64
直接来到两个按钮事件, 分别将关键跳改到成功分支去,
0044378C的jnz改为jmp, 00443AA4改为 jmp 00443F0E, 保存~
- 正常破解
使用IDR直接看反编译源码(比上面DD反编译出来的好看一些), edtNameChange(004435A4)事件中00443629是具体的算法
1). 前4位 &0x1 转字符串 得: 1010
2). 将1010当成2进制再转16进制得到0xA
3). 后4位 +0xA 得 6F, 70, 71, 72
4). 4个值相乘 得: 0x98BAE20 转 10进制得到code值
再看一下edtSerialChange(00443808)事件,
1). 前6位得是固定串TCRKM7
2). 第7位得是0x2D(-)
3). 再判断是否小于8位
4). 第8位转字符
5). 从固定串"ANGBSZMLYFXRKWCcQDTIVOHPUE"中取出字符对应的位置
6). 循环对比7位以后取出来的位置值是否与code中对应的数值相等~
到此算法分析完成, 可以开始写注册机了, 代码如下: keygen.c
#include <stdio.h>
#include <string.h>
int main() {
char *str = "ANGBSZMLYFXRKWCcQDTIVOHPUE"; //固定串
char name[21] = {0}; //这里限定最多20位吧,再大code可能会溢出
int len = 0;
int n4 = 0; //前4位二进制值
long long code = 1; //4位后的乘积
char codestr[51] = {0}; //code对应的字符串
char serial[51] = {0}; //系列号
while(len < 8){
printf("请输入用户名(最少8位): ");
scanf("%s", name);
len = strlen(name);
}
for(int i=0; i<4; i++){
n4 = (n4 << 1) + (name[i] & 0x1);
}
for(int i=4; i<len; i++){
code *= name[i] + n4;
}
if(code == 0){ //说明溢出了,名字太长了
printf("用户名太长了,请重试~");
getchar();getchar();
return 0;
}
sprintf(codestr, "%lld", code);
for(int i=0; i<strlen(codestr); i++){
serial[i] = str[codestr[i] - '0' + i];
}
printf("用户名为: %s\n注册码为: %s\n系列号为: TCRKM7-%s\n", name, codestr, serial);
getchar();getchar();
return 0;
}
运行结果示例:
用户名为: abcdefgh
注册码为: 160149024
系列号为: TCRKM7-NLGSYCMFK
接下来我们看只有注册码的这个, 进入00443A64,
1). 注册码得是14位
2). 验证前第1, 2, 5, 6, 9, 10, 13, 14位这8个是不是数字0~9
3). 再验证第3, 4, 11位这三个是不是字母a~z
4). 再验证第7, 8, 12位这三个是不是字母A~Z
5). 把数字位都取出来转数字, 前两个数相减是否=0x9
6). 第2个与第3个数相加是否=0x63
7). 最后两个相加是否=0x42
8). 第8位得是G(0x47)
9). 第3位得是p(0x70)
10). 第12位得是X(0x58)
11). 第7位得是L(0x4C)
12). 第4位得是v(0x76)
13). 第11位得是t(0x74)
所以可以得到最终的注册码是: 11pv22LG33tX44, 其中11, 22, 33, 44是两位数字, 需要满足以下条件
11 - 22 = 9
22 + 33 = 99
33 + 44 = 66
由上面三个式子可得
09 < 44 < 58
08 < 33 < 57
42 < 22 < 91
51 < 11 < 100
这样就可以随机生成注册码了, 如
11 = 59, (52~99随机取一个)
22 = 59 - 9 = 50,
33 = 99 - 50 = 49,
44 = 66 - 49 = 17,
则code = 59pv50LG49tX17
1~160每个破解过程,在吾爱破解论坛都有高手破解过了,也有整理好现成的, 我这边主要就是自己动手操作的过程,与他们的不太一样
附上高手们的连接: 点击前往查看
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载
新人入门教程"玩玩破解,写给新人看" 点击前往查看
我就是从这里开始的,对我这样的小白感觉超级友好~
下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~


浙公网安备 33010602011771号