新手破解练习Crackme160之064 - execution
-
暴力破解, OD关键字搜索定位到关键跳0040DB9C , nop掉 进入成功分支, 保存, 搞定~
-
正常破解, 向上找到方法入口0040D8F0, 开始单步调试, 算法分析:
1). 输入转大写
2). 每一位ascii值 - 0x40
3). 再 * 0x82
4). 再 + edi低4位
5) 再 + 16次 0x50
以上每步操作完都是低4位操作并判断是否变负数了, 得及时转换回正数, 代码如下, keygen.c
#include <stdio.h>
#include "string.h"
int main() {
char user[20] = {0};
printf("请输入用户名: ");
scanf("%s", user);
int len = strlen(user);
int eax = 1, edi = 0;
for(int i=0; i<len; i++){
if((user[i] >= 'a') && (user[i] <= 'z')) { user[i] -= 0x20; } //转大写
eax = (user[i] - 0x40) & 0xFFFF;
if(eax < 0) { eax *= -1; }
eax = (eax * 0x82) & 0xFFFF;
if(eax < 0) { eax *= -1; }
eax = (eax + (edi & 0xFFFF)) & 0xFFFF;
if(eax < 0) { eax *= -1; }
eax = (eax + 0x50) & 0xFFFF; //下面加16次0x50
if(eax < 0) { eax *= -1; }
eax = (eax + 0x50) & 0xFFFF;
if(eax < 0) { eax *= -1; }
eax = (eax + 0x50) & 0xFFFF;
if(eax < 0) { eax *= -1; }
eax = (eax + 0x50) & 0xFFFF;
if(eax < 0) { eax *= -1; }
eax = (eax + 0x50) & 0xFFFF;
if(eax < 0) { eax *= -1; }
eax = (eax + 0x50) & 0xFFFF;
if(eax < 0) { eax *= -1; }
eax = (eax + 0x50) & 0xFFFF;
if(eax < 0) { eax *= -1; }
eax = (eax + 0x50) & 0xFFFF;
if(eax < 0) { eax *= -1; }
eax = (eax + 0x50) & 0xFFFF;
if(eax < 0) { eax *= -1; }
eax = (eax + 0x50) & 0xFFFF;
if(eax < 0) { eax *= -1; }
eax = (eax + 0x50) & 0xFFFF;
if(eax < 0) { eax *= -1; }
eax = (eax + 0x50) & 0xFFFF;
if(eax < 0) { eax *= -1; }
eax = (eax + 0x50) & 0xFFFF;
if(eax < 0) { eax *= -1; }
eax = (eax + 0x50) & 0xFFFF;
if(eax < 0) { eax *= -1; }
eax = (eax + 0x50) & 0xFFFF;
if(eax < 0) { eax *= -1; }
eax = (eax + 0x50) & 0xFFFF;
if(eax < 0) { eax *= -1; }
edi = eax;
}
printf("系列号为: %d\n\n按任意键继续~", edi);
getchar();getchar();
return 0;
}
1~160每个破解过程,在吾爱破解论坛都有高手破解过了,也有整理好现成的, 我这边主要就是自己动手操作的过程,与他们的不太一样
附上高手们的连接: 点击前往查看
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载
新人入门教程"玩玩破解,写给新人看" 点击前往查看
我就是从这里开始的,对我这样的小白感觉超级友好~
下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~


浙公网安备 33010602011771号