新CrackMe160之126 - llydd - crackme
OD载入程序,搜索界面定位到成功关键词004011DB, 上面就是算法, 单步分析可得:
for(i=0; i<len; i++){
user[i] = user[i] ^ code[i];
user[i] = user[i] ^ code[len/2];
user[i] = user[i] ^ ((code[len/2] - 0x41) & 0xFF);
user[i] = user[i] + len * 2;
}
可见系列号需要参与运算, 这样正向就没办法直接由用户名算出系列号了,我们可以考虑反着来,从系列号反算用户名
#include <stdio.h>
#include <string.h>
int main() {
char user[33] = {0}; //4~20位
char code[33] = {0};
printf("系列号: ");
scanf("%s", code); getchar(); //消耗掉多输入的\n
int len = strlen(code);
unsigned int i;
for(i=0; i<len; i++){
user[i] = code[i] - len * 2;
user[i] = user[i] ^ code[i];
user[i] = user[i] ^ code[len/2];
user[i] = user[i] ^ ((code[len/2] - 0x41) & 0xFF);
}
user[i] = 0;
printf("用户名: %s\n", user);
getchar(); return 0;
}
运行示例:
系列号: crackme
用户名: wWswwss
如果要正向运算,应该只能暴力破解了吧, 尽量少位,6位以上就非常慢了
#include <stdio.h>
#include <string.h>
int chkCode(char *user, char *code);
int getCode(int index, int len, char* user, char* code);
int main() {
char user[33] = {0};
char code[33] = {0};
printf("用户名: ");
scanf("%s", user); getchar(); //消耗掉多输入的\n
int len = strlen(user);
int rlt = getCode(0, len, user, code);
printf("结束");
getchar(); return 0;
}
int chkCode(char *user, char *code){
int i, len = strlen(user);
for(i=0; i<len; i++){
user[i] = user[i] ^ code[i];
user[i] = user[i] ^ code[len/2];
user[i] = user[i] ^ ((code[len/2] - 0x41) & 0xFF);
user[i] = user[i] + len * 2;
if(user[i] != code[i]) return 0;
}
return 1;
}
int getCode(int index, int len, char* user, char* code){
int i, rlt = 0;
if(index == len){ //得到code
char u[len+1];
strcpy(u, user);
rlt = chkCode(u, code);
if(rlt == 1){
printf("序列号: %s\n", code);
return 1; //返回0就查找所有情况
}
return rlt;
}
//for(i=0x20; i<0x7F; i++){ //可见字符区域
// code[index] = (char) i;
char *str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for(i=0; i<strlen(str); i++){
code[index] = str[i];
rlt = getCode(index+1, len, user, code);
if(rlt == 1) return 1;
}
return 0;
}
运行示例:
用户名: OOOO
序列号: HHLH
很多时候没办法得到符合的结果
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载
下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~


浙公网安备 33010602011771号