新CrackMe160之153 - Cobra's - Crackme
-
去弹框
OD载入程序,搜索界面找到弹框提示词00401840处,向上看到由0040180E跳转而来~, 同处上下有几处跳转, 猜测下一个跳为主界面, 所以把当前跳改为下一个跳
即,将0040180E这行改为je 00401874, 保存修改,运行测试正常~ -
去灰
重新载入去NAG程序, 运行后发现菜单中的注册按钮是灰的, 接下来就开始去灰, 搜索界面打开后,可以看到很多关键词, 每个都双击定位到左侧代码区域对应看是什么功能
很快可以发现前面几个一样的"Software\Cobra"对应的代码区域中有RegOpenKeyA, RegCreateKeyA, RegDeleteKeyA的系统关键字样,是操作注册表的,分别对这三个方法头下断点
重新运行程序,发现程序断点在00401290(RegOpenKeyA)这个方法中了, 返回结果eax=2,此时注册表中没有这个选项, 00401540处判断这个值如果为0, local17=0x6C, 否则就=0x67
所以这个6C跟67是有问题的,判断结果为不跳, 我们强制让它跳(修改寄存器Z值为1,双击即可修改), 运行后,发现Register按钮不灰了, 所以把判断跳转这行改为强制跳转
即将00401540这行改为 jmp 0040154B就实现去灰了 -
破解
重新载入保存后的程序, 搜索界面直接定位到成功关键词00401773,向上可看到关键算法就一个方法00401725,下好断点,F7进入方法再F8单步跟踪分析算法
直接对着注册机看吧:
#include <stdio.h>
#include <string.h>
int main() {
int i, len, eax, ebx = 0;
char user[30] = {0};
printf("用户名: "); scanf("%s", user); getchar();
len = strlen(user);
if(len < 2){
eax = user[0] + 5;
} else {
eax = user[len-1] + user[len-2];
}
eax = eax ^ 0x12C;
eax = ((eax << 2) + eax) << 2;
if(eax == 0) eax = 3;
eax = eax >> 2;
eax = eax & 0xF0F0F0F0;
if(len < 2){
ebx = 5;
}else{
ebx = user[1] + user[2];
}
ebx ^= 0x12C;
ebx = ((ebx << 2) + ebx) << 2;
if(ebx == 0) ebx = 3;
ebx = ebx >> 2;
ebx = ebx & 0xF0F0F0F0;
printf("系列号: REG-%lX-%lX-KEY\n", eax, eax + ebx);
getchar();
return 0;
}
运行示例:
用户名: Test
系列号: REG-F0-1B0-KEY
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载
下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~


浙公网安备 33010602011771号