庆祝本人第一个注册机的诞生

原本这个博客是打算全英文的,但是由于这篇博文的意义大大的超过了语言本身,又不想去live space,于是乎为了写作方便(用英语写了一段,发现极其肤浅)不得已改用第一语言来完成,就像准备写高深的程序时,总不直觉的选用自己最拿手的语言来完成一样。

言归正传,开这篇文是为了庆祝本人人生中第一次成功破解了一个程序,并且写出了对应的注册机。听起来很厉害吧,但事实并非如此,首先那个程序并不是商业软件,而是一个专门写出来供人,准确的说是最菜的菜鸟,来练习破解的,一般这种程序叫CrackMe。如此一来破解的容易程度可想而知。其次我必须非常非常诚实的在此处留下我作弊的供词,以便老来可以通过鄙视现在的自己而获得快感:在原程序分析到90%的时候,我几乎,其实是已经要放弃了,但是我知道有牛人写过这个CrackMe的破文(所谓破文,既是描写破解过程和分析思路的文章,此篇破文地址:http://bbs.pediy.com/showthread.php?s=&threadid=7505&highlight=riijj),于是非常猥琐的偷看了几眼,看过之后知道了2点,1-我已经分析到接近结束的地方了 2-破文中的反向推导验证了我分析的地方已经是算法核心结束的地方了,知道快结束了,又得到了提示,于是信心恢复一鼓作气写了个注册器。全过程大致就是这么的不曲折不离奇,所以并不能给读者带来任何新陈代谢加快,肾上腺素狂分泌,手心冒汗等雷到症状,如果您已经耐着性子读到了这里,那你一定不是一般人,你一定是一只忍者神龟,或者忍者龟神,不管怎样,我恳求您忍到此为止吧,千万不要再往下看我那十分破陋的注册机代码:

void calc(int& eax, int& pt)
{
eax = pt;
eax *= 0x343FD;
eax += 0x269EC3;
pt = eax;
eax = eax >> 0×10;
eax &= 0x7FFF;
}
int _tmain(int argc, _TCHAR* argv[])
{
while(true)
{
char name[10];
printf(“Please enter the username:\n”);
scanf(“%s”,name);
if(strlen(name)<3)
{
printf(“username should larger than 2 bytes\n”);
continue;
}
printf(“The key is: \n”);

int eax, ecx, edx, pt;
eax = (int)name[0];
ecx = (int)name[1];
edx = eax % ecx;
ecx = edx;
eax = 0xFFFFFFFF;
edx = (int)name[2];
ecx = ecx * edx;
ecx++;
edx = 0;
eax = (int)((unsigned int)eax/ecx);
pt = eax;
for(int i=0;i<0x0F;i++)
{
calc(eax,pt);
eax = (int)(eax/0x1A);
}
int rs = pt;

for(int i=0;i<strlen(name);i++)
{
int num = name[i];
num = num >> 5;
num *= 123;
int result=num;
for(int j=0;j<num;j++)
{
calc(result,rs);
}
calc(result,rs);
printf(“%c”,(result%0x1A)+0×41);
}
printf(“\n”);
}
return 0;
}

如果您已经看到了这里,那我没什么好说的了,你已经发现了我人生最大的秘密!!!没错,我翻译汇编到C代码的时候就是一条一条翻的,我还申明了与相关寄存器对应的变量-_-!  但我又必须很诚实的说,这些代码从测试通过开始我就没改过,虽然我可以改的很炫,改的显得我智商很高,但我还是决定留下最丑陋,也是最原始的代码,因为,这就是一个正常的菜鸟做的事情,没有经历过正常的菜鸟,何以成为一个正常的大牛?

以下记录一下过程中犯过的若干错误:

1. 碰到1A知道是16进制,但碰到了41之类的,就傻乎乎的用10进制了,写注册机过程犯过两次这种错误,共浪费2大个小时!!!记住,汇编中所有的立即数都是16进制的!!!

2. 程序分析能力还太嫩,居然一个0x0H次的循环操作,我一次带过,很后面才发现这里是个循环,orz

以下记录一下此次事情的整体经过:

1. 2008年8月1凌晨0:xx分的时候,通过读《疯狂的程序员》网络小说知道了看雪论坛,怀着好奇的心理打开看了几个帖子,从此一发不可收拾,到现在,2008年8月8日凌晨0:yy分完成第一个注册机并记录过程,刚好一个星期。

2. 别高兴的太早,注册的时候发现论坛刚好在8月1日-8月31日停止注册,靠!!老子实在是背!于是在论坛游客了几天,到8月4号,实在忍不住了,没帐号附件下载不了,于是向管理员,也就是坛主老大,也是我的校友,kanxue同志发邮件厚颜无耻的要了个帐号。

3. 有了帐号,一切都好办,学了用OllyDbg,复习了一下汇编,这才发现原来大一那会学的汇编有很多已经过时(其实在大一那是已经是过时的了),以前背的很牢的段+偏移寻址早就是历史中的黄花菜了,幸好找到dREAMtHEATER收集的问win32汇编教程大集合,又下了4G的《加密与解密工具新年大礼包2008》。

4. 胡乱找了一些CrackMe练手,结果发现根本跟不进去,今天,准确说是昨天终于无意间找到一个菜鸟入门级的CM,难度绝对适合低级菜鸟,如果你是中级菜鸟绝对就可以轻轻飘过,不浪费口水

5. 就到了开头写的那里了

6. To be continue!!! I will be back!!!!!!!

另:感谢看雪论坛,混了那么多坛子,MSDN论坛版主也当过了,但还是觉得看雪论坛是最好的,有一种奇特的气质,坛内混的人对规则很重视,所以很多东西看上去都组织很好,发的帖子很有可读性,坛子深度更是深不可测,大有可挖之料。

2008年8月8日

(发现正好是北京奥运会开幕的日子,但由于因为奥运,我被查过2次身份证,搜过一次身,更有许多难以启齿的不便,于是毅然绝对跟奥运会打酱油,做俯卧撑,一个~两个~三个~~~~ 走人!)

Advertisement

1 Comment(s)

  1. 69b9160844


Comments RSS TrackBack Identifier URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.