新手破解练习Crackme160之049 - DueList.4

  1. 暴力破解, OD搜索失败关键字定位到00401224, 向上找到入口00401127, 第一个跳是0040113F, 改为 jmp 004010D7到成功入口处, 保存完成~

  2. 正常破解, 从入口00401127开始单步调试, 得知:
    1). 用户名不得超过8位,
    2). 注册码与用户名长度得一致
    3). 如果是小写字母则转大写(取值范围是: 0x41 ~ 0x&7A, 不包含数字)
    4). 用户名每一位与字符串"A1LSK2DJF4HGP3QWO5EIR6UTYZ8MXN7CBV9", 对比得到是第几位
    5). 对应的将字符串"SU7CSJKF09NCSDO9SDF09SDRLVK7809S4NF"中的第几位取出来存到内存中
    6). 然后对比结果与注册码是否一致
    到此算法分析完成, 因为两字符串是固定的, 所以, 正解也是相对固定的, 但也是有很多解的, 1~8位都可以, 全排列组合加上大小写, _
    下面给出注册机代码(随机法): keygen.c

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include "string.h"

int main() {
    char *str1 = "A1LSK2DJF4HGP3QWO5EIR6UTYZ8MXN7CBV9"; 
    char *str2 = "SU7CSJKF09NCSDO9SDF09SDRLVK7809S4NF";
    char user[9] = {0};
    char key[9] = {0};
    int len, i, j, k;
    srand(time(NULL));
    len = rand() % 8 + 1; // 1~8
    for(i=0;i<len;i++){
    	j = rand() % 27; //从串中随机位置取
    	if(str1[j] < 0x41) { j--;} //不能是数字所以需要踢除, 取前一位 
    	k = rand() % 2;
		user[i] = *(str1 + j) + (k == 1 ? 0x20 : 0); //随机确定是否转小写 
		key[i] = *(str2 + j);
	}
	printf("长度: %d\n用户名: %s\n注册码: %s\n", len, user, key); 
 	printf("\n按任意键继续~");
 	getchar();
    return 0;
}

长度: 6
用户名: azIsrD
注册码: SV0C9K

发现一个有趣的问题, 当用户名只输入一位有效值时(0x41~0x7A), 不管注册码输入一位什么都是正确的

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

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

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

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

posted @ 2024-05-10 17:18  hankerstudio  阅读(23)  评论(0)    收藏  举报