今天在pediy看到一贴子,自已用IDA F5试了一下,真的好强大。
IDA载入目标程序后,按F5键,得到伪代码,置于VC6编译器中,添加相关头文件,稍作修改,编译得到注册机。
下面是IDA 的F5键得到的:
int __cdecl main(int argc, const char **argv, const char *envp)
{ signed int v4;
// [sp+1Ch] [bp-3Ch]@1
char v5;
// [sp+30h] [bp-28h]@1
unsigned int v6;
// [sp+2Ch] [bp-2Ch]@1
unsigned int v7;
// [sp+28h] [bp-30h]@1
v4 = 16;
__main();
printf("Enter your login:");
gets(&v5);
printf("Enter password:");
scanf("%ld", &v6);
v7 = 32 * strlen(&v5) + 2226449;
if ( v6 == v7 )
printf("Good job!, now make a keygen\n");
else
printf("Keep trying you'l get it");
sub_401980(10);
return 0;
}
然后我们制作注册机:
//------------------------------------
//IDA不会加上头文件的,呵呵,我们加上。
//然后把没有用的两句注释掉。就可编译通过,与原crackme一样的。
#include<stdio.h>
#include<string.h>
//------------------------------------
int __cdecl main(int argc, const char **argv, const char *envp)
{
signed int v4; // [sp+1Ch] [bp-3Ch]@1
char v5; // [sp+30h] [bp-28h]@1
unsigned int v6; // [sp+2Ch] [bp-2Ch]@1
unsigned int v7; // [sp+28h] [bp-30h]@1
v4 = 16;
// __main();
printf("Enter your login:");
gets(&v5);
printf("Enter password:");
scanf("%ld", &v6);
v7 = 32 * strlen(&v5) + 2226449;
//-------------------------------------
//加上这一句,让我们看看正确的注册码:
printf("the sn is: %d\n",v7);
//-------------------------------------
if ( v6 == v7 )
printf("Good job!, now make a keygen\n");
else
printf("Keep trying you'l get it");
// sub_401980(10);
return 0;
}
//输入用户名:diype
//我们会输出序列号:2226609
//注册码只与注册名的位数有关,晕,这也叫crackme ??
//IDA的F5功能真的好强大!!