新手破解练习Crackme160之019 - Brad Soblesky.2

  1. 暴力破解, 运行程序直接点check, 提示用户名需要5个以上, 那就OD直接搜索关键字, 定位到00401582, 向上看到00401579关键跳, 直接改jmp继续向下跟踪到00401642便跳转到失败, nop掉, 让它进入到成功分支, 测试成功~ 保存

  2. 正常破解, 直接提示用户名5个, 那我们就先输入5个以上用户名abcde, 系列号12345, 点击check, 进入断点00401579处, 单步继续, 下面代码代码算法了, 大概意思如下代码:
    rlt = 81276345;
    for(i=0; i<len; i++){
    rlt = rlt & 0xffffffff; //取后8位
    rlt += asc(str[i]); //加上每一位的ascii值
    a = i shl 8; //将当前循环数左移(<<)8位
    rlt = rlt xor a; //与左移结果异或
    b = NOT( len * i ) * (i+1); //将长度*i取反, 再乘以i+1
    rlt *= b; //结果乘以上面的数
    }
    // str => abcde, rlt => 3534803155
    if(rlt == 系列号){成功} else

到此算法解读完成

以下是注册机代码: 保存为main.c, 便破解完成了

#include <iostream>
#include "string.h"

int main(){
	while(true){
		long long rlt = 0x81276345;
		char user[20] = {0};
		printf("请输入用户名: ");
		scanf("%s", user);
		int len = strlen(user);
		if(len < 5){
			printf("用户名长度小于5位\n");
			continue;
		}
		for(int i=0; i<len; i++){
			rlt = rlt & 0xffffffff;
			rlt += user[i];
			rlt ^= i << 8;
			rlt *= (~(len * i)) * (i+1);
		}
		printf("系列号为: %lld\n", rlt);
	}
	return 0;
}

相关软件与破解示例程序可到前十个练习处下载

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

posted @ 2024-04-18 13:38  hankerstudio  阅读(19)  评论(0)    收藏  举报