对于160个CrackMe之23的分析

对于此文件夹中的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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值