新手破解练习Crackme160之019 - Brad Soblesky.2
-
暴力破解, 运行程序直接点check, 提示用户名需要5个以上, 那就OD直接搜索关键字, 定位到00401582, 向上看到00401579关键跳, 直接改jmp继续向下跟踪到00401642便跳转到失败, nop掉, 让它进入到成功分支, 测试成功~ 保存
-
正常破解, 直接提示用户名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个是最常用的界面,其它的我基本上没用到~


浙公网安备 33010602011771号