新手破解练习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!

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

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

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

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

posted @ 2024-08-02 10:09  hankerstudio  阅读(21)  评论(0)    收藏  举报