新手破解练习Crackme160之093 - Crackme7

  1. 暴力破解
    使用Delphi Decompiler分析源码可知各个控制事件的入口地址
	TfrmMain.edtNameChange	    004435A4
	TfrmMain.btnNSTestClick	    0044378C
	TfrmMain.edtSerialChange    00443808
	TfrmMain.btnCOTestClick	    00443A64

直接来到两个按钮事件, 分别将关键跳改到成功分支去,
0044378C的jnz改为jmp, 00443AA4改为 jmp 00443F0E, 保存~
 

  1. 正常破解
    使用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

 
 
 
这是160个软件part1
这是160个软件part2

1~160每个破解过程,在吾爱破解论坛都有高手破解过了,也有整理好现成的, 我这边主要就是自己动手操作的过程,与他们的不太一样
附上高手们的连接: 点击前往查看
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载

新人入门教程"玩玩破解,写给新人看" 点击前往查看
我就是从这里开始的,对我这样的小白感觉超级友好~

下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~
OD界面布局

posted @ 2024-07-08 09:05  hankerstudio  阅读(25)  评论(0)    收藏  举报