新CrackMe160之016 - fty_crkme3
-
脱壳
使用ESP简单脱壳,过程略 -
破解
OD载入脱壳后程序,搜索界面定位到成功关键词004453D0, 从而得到算法部分为00444B7D ~ 00444DDB,
如果注册码是9位,其中第3,7位为减号,其它位必须为数字
00444BEF ~ 00444CFA 将注册码中的数据提取出来转数字, 如1-2-3 => 123
00444D07 ~ 00444DD7 将每一位数字的位数次方和
然后将上面两步的结果对比,如果一样就成功了
如果注册码是10位,其中第3,7位为减号,其它位为数字,也同9位一样,先取出数字与每个数字位数次方和对比
如果注册码是11位,有点小变化就是第4,8位为减号,其它位为数字,算法也一样转数字与每个数字位数次方和比
7,8,9位数 = 每一位数次方和, 如1234 ?= 1^4 + 2^4 + 3^4 + 4^4, 相等就成功, 是不是只有全0才能满足?
如果不是全0,这个得暴破了吧, 注册机代码如下:
#include <stdio.h>
#include <string.h>
#include <time.h>
unsigned int addn(char *num);
unsigned int muln(char *num);
int getCode(int index, int len, char *code);
int insertStr(char *code, char chr);
char crlt[12] = {0};
int main() {
char code[10] = {0};
srand((int)time(NULL));
int rnd = rand() % 3 + 7; //7,8,9
printf("%d位:\n",rnd);
int rlt = getCode(0, rnd, code);
printf("结束");
getchar();
return 0;
}
unsigned int addn(char *num){
unsigned int sum = 0, i;
for(i=0; i<strlen(num); i++){
sum = sum * 10;
sum = sum + num[i]-0x30;
}
return sum;
}
unsigned int muln(char *num){
int i, j, len = strlen(num);
unsigned int sum = 0, tmp;
for(i=0; i<len; i++){
if(num[i] == '0') continue;
tmp = 1;
for(j=0; j<len; j++){
tmp = tmp * (num[i] - 0x30);
}
sum = sum + tmp;
}
return sum;
}
int getCode(int index, int len, char *code){
int i, rlt = 0;
if(len == index){
if(addn(code) == muln(code)){
insertStr(code, '-');
printf("注册码为: %s\n", crlt);
return 0;
}
return 0;
}
char *str = (char *)"0123456789";
for(i=0; i<10; i++){
code[index] = str[i];
rlt = getCode(index+1, len, code);
if(rlt == 1) return 1;
}
return 0;
}
int insertStr(char *code, char chr){
int i, j = 0, len = strlen(code), pos1 = 2, pos2 = 5;
if(len == 9) { pos1 = 3; pos2 = 6; }
for(i=0; i<len; i++){
if((i == pos1) || (i == pos2)) crlt[j++] = chr;
crlt[j++] = code[i];
}
return 0;
}
7位运行结果:
注册码为: 00-000-00
注册码为: 00-000-01
注册码为: 17-417-25
注册码为: 42-108-18
注册码为: 98-008-17
注册码为: 99-263-15
8位运行结果:
注册码为: 00-000-000
注册码为: 00-000-001
注册码为: 24-678-050
注册码为: 24-678-051
注册码为: 88-593-477
9位运行结果:
注册码为: 000-000-000
注册码为: 000-000-001
注册码为: 146-511-208
注册码为: 472-335-975
注册码为: 534-494-836
注册码为: 912-985-153
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载
下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~