新手破解练习Crackme160之054 - eKH.1
-
暴力破解, OD加载搜索关键字定位到00427BAC, 找到入口第一个关键跳00427B73, 改为jmp 00427BC3直接跳到成功分支, 保存, 搞定~
-
正常破解, 按钮入口处00427B44下断点, 输入用户名abcde注册码12345开始单步分析算法,
1). 用户名每一位值加起来左移8,
2). 从固定串"LANNYDIBANDINGINANAKEKHYANGNGENTOT" 按位取出与用户名每一位异或
3). 小于0就乘以-1转为正数, 大于等于0就继续下一位
4). 循环完与0x12345678异或
5). 结果转10进制并计算长度
6). ecx = 0xA
7). eax /= ecx
8). 从固定串"LANNY5646521"中(从10进制数的低位到高位取一位当位置值)取一位数
9). 取出值存起来
10). eax /=ecx, 循环6).~10).
11). 得到与10位数一样位数的字符串, (调试时我已经迫不急待的把这个当系列号输入测试了, 结果是喜人的)
12). 与系列号对比
13). ebx = 0x12D691(失败) / 0xBC614E(成功)
到此, 算法分析完了, 开始写注册机了: keygen.c
#include <stdio.h>
#include "string.h"
int main() {
char *str1 = "LANNYDIBANDINGINANAKEKHYANGNGENTOT";
char *str2 = "LANNY5646521";
char user[20] = {0};
printf("请输入用户名: ");
scanf("%s", user);
int len = strlen(user);
int eax = 1, ebx = 0;
char s;
for(int i=0; i<len; i++){
ebx += user[i];
if(ebx < 0) { ebx *= -1; }
ebx = ebx << 0x8;
s = *(str1+i);
ebx = ebx | s;
if(ebx < 0) { ebx *= -1; }
}
ebx ^= 0x12345678;
char rlt[20];
sprintf(rlt, "%d", ebx);
len = strlen(rlt);
for(int i=len-1; i>=0; i--){
user[len-1-i] = *(str2 + rlt[i] - '0');
}
user[len] = 0;
printf("系列号为: %s\n\n按任意键继续~", user);
getchar();getchar();
return 0;
}
1~160每个破解过程,在吾爱破解论坛都有高手破解过了,也有整理好现成的, 我这边主要就是自己动手操作的过程,与他们的不太一样
附上高手们的连接: 点击前往查看
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载
新人入门教程"玩玩破解,写给新人看" 点击前往查看
我就是从这里开始的,对我这样的小白感觉超级友好~
下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~