-
-
[原创]相见恨晚,新来菜鸟第一帖:VC编写注册机 FOR “riijj Crackme (1) 的详解”
-
发表于:
2008-4-20 00:43
5984
-
[原创]相见恨晚,新来菜鸟第一帖:VC编写注册机 FOR “riijj Crackme (1) 的详解”
【标 题】相见恨晚,新来菜鸟第一帖:VC编写注册机 FOR “riijj Crackme (1) 的详解”
【对 象】刚来菜鸟
【下载地址】http://bbs.pediy.com/upload/files/1084801702.zip
【破解工具】OD,VC
【保护方式】序列号
【任 务】学习编写注册机
【破文作者】qery
【组 织】没有
【备 注】高手飘过,免得费你的时间,本人新来菜鸟,为了鼓励和我差不多的菜鸟一起学习一起进步!!
【电 邮】qery#yahoo.cn ;前面的#用@代替
觉得有点悲哀,孤陋寡闻的我这个时候才看到看雪。既然来了,就认真学习一下,我看了下Crack Tutorial,有些资料还是很容易上手,当然那些都已经是老古董了,老古董才是基础!我是看CCDebuger兄的OllyDBG 入门系列文章开始,不多,也才看了三两篇,给入门菜鸟的我帮助简直无话说。呵呵,在此谢谢各位大侠的杰作的帮助,也希望我能继续菜下去!!
首先说明这不是破文,只是给出注册机,代码中相应给出了同反汇编的程序对应关系。想给菜鸟如我菜鸟一点信心:破文具体解释和Crackme下载地址,请看riijj 兄写的“【原创】riijj Crackme (1) 的详解”:http://bbs.pediy.com/showthread.php?t=7505
#include <iostream>
#include <string>
using namespace std;
short catlat(int& var);//**********对应:call 0040134A 的声明
int main()
{
char ch,ser[16],name[16];
short k=0,var2=0,i,j;
int cnum,var1; //var1保存循环计算需要的数据,对应004050AC中的数据
char* yourname=name;
char* series=ser;
//**********对应:00401250及其上那些语句**********//
cout<<"enter your name:"; //获取用户名
while((ch=cin.get())!=10) //有换行表示输入完毕
{ //10为换行符,13为回车符
name[k]=ch;
k++;
}
name[k]='\0';
cout<<endl;
//**********对应:00401252 cmp eax, 3 *********//
if(strlen(yourname)<3) //判断用户名字节是否大于等于3,否则结束
{
cout<<sizeof(short)<<"need more byte"<<endl;
return -1;
}
//**********对应:00401276 到00401296 *********//
cnum=(name[0]%name[1])*name[2]+1;
var1=4294967295/cnum; //十进制数字4294967295 对应 0x FFFFFFFFH
//**********对应:004012A0到004012B8 的循环转移*********//
for(i=0;i<15;i++)
{
var2=catlat(var1); //call 0040134A
ser[i]=(var2%26)+65;
}
ser[i]='\0';
//cout<<series<<endl;
//**********真正序列号开始计算*********//
//**********对应:004012A0到004012B8 的循环转移*********//
for(i=0;i<strlen(yourname);i++)
{
cnum=int(name[i]); //这两行对应004012CD 到004012E0
cnum=123*(cnum/32);
if(cnum>0)
{
for(j=0;j<=cnum;j++)
{
var2=catlat(var1); //call 0040134A
}
}
else
{
var2=catlat(var1); //call 0040134A
}
ser[i]=(var2%26)+65;
}
ser[i]='\0';
//显示结果
cout<<"name:"<<yourname<<endl<<"series:"<<series<<endl;
cin.get();
return 0;
}
//**********对应:call 0040134A *********//
short catlat(int& var)
{
int varin;short tt;
var*=214013; //十进制数字214013 对应 0x 343FDH
var+=2531011; //十进制数字2531011 对应 0x 269EC3
varin=var;
if(varin<0)
{
varin = abs(varin/65536)+1;
tt = short(32768-varin);
}
else
{
tt = short(varin/65536);
}
return tt;
}
//签名:新菜鸟
[培训]科锐逆向工程师培训第53期2025年7月8日开班!