新手破解练习Crackme160之127 - NZC.2
这个程序是命令行程序, OD运行正常~
OD载入程序后, 搜索界面没有看到关键词, 但有一些占位符%s, %02X什么的, 定位到代码的方法入口, 发现全是在00401000处, 所以果断下个断点, F9运行程序, 断点处停下, F8单步跟踪, 在004010BC处要求输入Name,
输入abc, 程序继续执行到下一行, 同时也成功获取到了用户名, 寄存器eax="abc\n", 004010EC处要求输入Code, 我们输入123, 程序又成功执行到下一行并获取到了系列号, 此时eax = "123\n", 这两个分别存在了内存的[03290010] 和 [03290120], 004010F2将用户名每一位值加起来得eax(包括最后的\n), eax^=0x5E, eax *= 119, eax <<=1, 00401115处将eax转10进制数前面用0补齐10位, 接着将这10位循环运算n1=0, n2=0, for(i=0;i<10;i++){ n2=num[i]n1i ; n1 += 0x40; code[i]=n2; }, 到此算法就完成了~ 接着就是对比计算值与系列号是否相等了
#include <stdio.h>
#include <string.h>
int main() {
char user[21] = { 0 };
char num[11] = { 0 };
unsigned int n1 = 0, n2 = 0;
unsigned long sum = 0;
printf("用户名: "); scanf("%s", user);
int len = strlen(user);
for(int i=0; i<len; i++){
sum += user[i];
}
sum += 0xA; //\n
sum ^= 0x5E;
sum *= 119;
sum = sum << 1;
sprintf(num, "%010d", sum);
printf("系列号: ");
for(int i=0,j=0; i<10; i++,j+=0x40){
printf("%X", num[i] ^ j ^ i);
}
getchar();getchar();
return 0;
}
运行结果示例:
用户名: abc
系列号: 3071B2F313417D1B11F6238271
命令行输入验证, 成功看到Code richtig!
1~160每个破解过程,在吾爱破解论坛都有高手破解过了,也有整理好现成的, 我这边主要就是自己动手操作的过程,与他们的不太一样
附上高手们的连接: 点击前往查看
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载
新人入门教程"玩玩破解,写给新人看" 点击前往查看
我就是从这里开始的,对我这样的小白感觉超级友好~
下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~


浙公网安备 33010602011771号