[旧帖]
[原创]OllyDBG 入门系列(五)-消息断点及 RUN 跟踪 注册机算法
0.00雪花
发表于:
2012-11-23 15:48
2663
[旧帖] [原创]OllyDBG 入门系列(五)-消息断点及 RUN 跟踪 注册机算法
0.00雪花
这篇文章是继【原创】OllyDBG 入门系列(五)-消息断点及 RUN 跟踪之后,这篇文章得出了验证用户名跟密码的的函数的位置,但是没有给出注册机,最近学习OD,顺便写了下程序中的注册机,感觉就是:数学敏感性太差,对于加密算法真是不熟悉,注册机中对于关键的算法均采用暴力破解的方法进行试探。下面是对该注册算法的分析。
根据CCDebuger的文章,我们可以猜到在如下图所示的代码之后将会是注册码验证部分的代码:
将程序在IDA中打开,我们对其进行分析,发现做了如下的事情:
1. 将用户名填充成16自己的字符,填充方式是对字符进行循环拷贝填充,例如CCDebuger填充完后是CCDebugerCCDebug。代码片段如下图所示:
2. 对regcode进行初次判断,要求是regcode必须长度为16字节,且每个字符需要处于[0x30,0x7E]。代码片度如下图:
3. 上面的都简单,关键的运算部分在encrypt8和其下的代码。
encrypt_8函数将用户名的前8位和注册码的前8位运算出2个数,放入eax和ebx返回。在使用eax,ebx,ecx(放入栈上传入)调用函数sub_401190,该函数在内部修改全局变量g_data,用于后续操作,同时该函数必须要返回1才能使注册流程继续运行。
sub_401190返回1后,记下来软件根据用户名和注册码的后8位计算出eax的值,如果eax为0则注册成功。
那么,写注册机的难度就在于首先regcode的范围跟大小满足要求,其次注册码和用户名的前8位使得函数sub_401190返回1,最后,两者的后8位使eax为0.
代码什么的都放在下面,主要是写循环不停的判断sub_401190是否返回1,然后是eax是否为0,代码如下:
IDA分析和注册机代码
消息断点和RUN跟踪.rar
(还没有注册码,不知可否发一个给我了,谢谢了)
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
上传的附件: