您的位置:首页 > 其它

对于160个CrackMe之23的分析

2016-05-06 08:36 267 查看
对于此文件夹中的CrackMe的分析,程序使用masm所写,无壳,使用f(用户名,注册码)=0的方式检验

因为其中主要用的的操作是加法和异或操作,故可以由用户名逆推注册码

注册算法如下:

第一步:程序对于输入的用户名进行检验,如果大于等于20位,不操作,小于20位,用0填充到20位

第二步:程序将注册码转换为十进制数temp,

第三步:这是一个执行16次的大循环,初始值temp为上一步的结果,对于每一次循环有用户名的四个字符参与操作(如用户名的为“goodjob”的话,则第一次参与的操作数就为0x646F6F67(doog),第二次参与的操作数为0x6A646F6F(jdoo))与temp进行加1后的结果进行异或操作后赋值给temp,一直执行16次,得到最后的temp。

第四步:temp加上0x9112478等于0时,则注册成功,不相等失败

逆向算法如下:

见下面代码*/

#include<stdio.h>
#include<string.h>
int main()
{
char name[128] = {0};
unsigned long temp = 0x9112478;
temp = 0 - temp;
printf("输入用户名:");
scanf("%s", name);
for(int i=15; i>=0; i--)
{
unsigned long a=0;
for(int j=3+i; j>=i; j--)
{
a = a << 8;
a += name[j];
}
temp = temp ^ a;
temp = temp - 1;
}
printf("注册码为:%lu", temp);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  CrackMe