简单的凯撒加密并手动去除花指令

这个程序是加了花指令的,首先去除花指令

定位到花指令位置

在这里插入图片描述

给他nop掉
在这里插入图片描述

接下来保存下来就行了

我们将去除花指令的程序拖到ida中

在这里插入图片描述

这是我们的main函数

我们对main函数和算法进行一些重命名修改

在这里插入图片描述

在这里插入图片描述

这个算法就是将我们输入的字符串转换为一个新的字符串,在与 ((++**–,//…QQPP 这个字符串对比


char key[] = "bcdaren";
int __cdecl Algorithm(char* inputkey, char* outputkey, int a3)
{
    signed int v4; // [esp+0h] [ebp-Ch]
    size_t j; // [esp+4h] [ebp-8h]
    signed int i; // [esp+8h] [ebp-4h]

    
    if (!inputkey)
    {
        return -1;
    }
    if (!outputkey || !a3)
    {
        return -1;
    }
    if (strlen(inputkey) <= a3)
    {
        v4 = strlen(inputkey);
    }
    else
    {
        v4 = a3;
    }
    for (i = 0; i < v4; ++i)
    {
        for (j = 0; j < strlen("bcdaren"); ++j)
        {
            outputkey[i] = key[j] ^ (inputkey[i] + 13);
        }
    }
    return 0;
}

这就是关键算法了

 for (j = 0; j < strlen("bcdaren"); ++j)
        {
            outputkey[i] = key[j] ^ (inputkey[i] + 13);
        }

先分析一下这一个for循环

每次跳出循环都是key最后一个字符n参与了运算

所以可以将for循环删掉,

只留下这一句

outputkey[i] ='n' ^ (inputkey[i] + 13);

我们的注册码是先将输入的字符+13后在和n异或运算

那么反过来就可以得到我们应该输入的注册码

先将比较的字符串((++**–,//…QQPP
先异或在减去13,就能得到正确的注册码

可以这样写代码

在这里插入图片描述

char comkey[] = "((++**--,,//..QQPP";
    char corkey[128] = { 0 };
    for (int i = 0; i < strlen("((++**--,,//..QQPP"); i++)
    {
        corkey[i] = ('n' ^ comkey[i]) - 13;
    }
    puts(corkey);

注册成功

在这里插入图片描述

**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值