新CrackMe160之091 - DOSKEY - CRACKME2
-
脱壳
OD载入程序,使用ESP定律可轻松脱壳成功 -
破解
搜索界面很容易看到失败成功关键词,一下就可以定位到按钮事件入口004015E0, 及三个固定串
"biq2jrxc-ape3dsynhz8gt5o7f0uml4v19w6+/k",
"-apeoiq2jrml4xcsw6ynh7f0uv19+3/kdbz8gt5",
"h7f0uv19+3/kjrml4xcsw6yn*dbz8gt5-apeoiq2"
算法分析:
1). 循环用户 code[i] = str1[user[i] * 41 % 0x28]
2). 循环用户 code[len+i] = str2[((user[i] << 5) - user[i]) % 0x28]
3). 循环code code[i] = str3[(code[i] * 11 % 0x28]
注册机:
#include <stdio.h>
#include <string.h>
int main() {
char user[21] = {0};
char code[21] = {0};
char *str1 = "biq2jrxc-ape3*dsynhz8gt5o7f0uml4v19w6+/k";
char *str2 = "-apeoiq2jrml4xcsw6ynh7f0uv19+3/k*dbz8gt5";
char *str3 = "h7f0uv19+3/kjrml4xcsw6yn*dbz8gt5-apeoiq2";
printf("用户名: ");
fgets(user, sizeof(user), stdin);
int i, len = strlen(user) - 1, sum = 0;
if(len < 4) { printf("用户名4位以上"); return 0; }
user[len] = 0;
for(i=0; i<len; i++){ code[i] = str1[user[i] * 41 % 0x28]; }
for(i=0; i<len; i++){ code[len+i] = str2[((user[i] << 5) - user[i]) % 0x28]; }
for(i=0; i<2*len; i++){ code[i] = str3[code[i] * 11 % 0x28]; }
printf("注册码: %s", code);
getchar();
return 0;
}
运行示例:
用户名: abcd
注册码: /y4to7
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载
下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~


浙公网安备 33010602011771号