新CrackMe160之043 - riijj_crackme
这里window10运行有点小问题,闪了一下就没了,所以就拿到xp下去玩了
-
去NAG
OD载入程序,单步调试想找出NAG框, 很快就会发现,走没几步就报内存000..无法继续, 说明程序有做反调试的操作的
重新载入,搜索界面,没看到什么成功失败的关键字, 有一个happytime的词,定位到004013C0, 下个断点试试, F9运行,能成功停下来, F8继续,发现程序能正常调试了,
一路向下,来到004015D9~00401601进入死循环, 下面有个UpdateWindow, 所以可以猜测这个死循环是一个时间定时器, 控制NAG这个界面的, 时间到了进入下面的UpdateWindow显示新界面, 那我们就把je这行(00401603) nop掉, 强制不循环这样程序就直接更新界面了, 达到了去NAG效果,测试运行正常,不再出现文字界面了(实际是有的,只是还没出现就被更新了) -
破解
输入伪码点注册发现没有任何提示, 搜索界面看到了一堆我们输入的数据,在第一个00401044处下个断点,看着这里就是算法了, 再点注册, 成功停在这里了
一路往下,来到004010BE处才是真正的算法(再往下都没东东了), F7进入, 地址是10001010, 不再是0040000段了,说明跳到别的模块去了(pf1.dll中), 还能在方法尾部看到成功提示词,这里是算法无疑了, 注册机如下:
#include <stdio.h>
#include <string.h>
int main() {
char *str = (char *)"fytugjhkuijonlbpvqmcnxbvzdaeqrwtryetdgfkgphonuivmdbxfanqydexzwztqnkcfkvcpvlbmhotyiufdkdnjxuzyqhfstae";
char code[51] = {0};
char user[21] = {0};
printf("用户名: ");
fgets(user, sizeof(user), stdin);
int i, j, k = 0, len = strlen(user) - 1;
for(i=0; i<len; i++){
j = user[i] % 0x62;
code[k++] = str[j];
code[k++] = str[j+1];
}
printf("系列号: %s", code);
getchar();
return 0;
}
运行示例:
用户名: abcde
系列号: tafyyttuug
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载
下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~


浙公网安备 33010602011771号