吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1658|回复: 2
收起左侧

[原创] 破解练习-CRACKME007

  [复制链接]
逸聆君 发表于 2023-2-4 19:14

007-注册算法分析

一、工具和调试环境

  • PE信息查看工具:Die
  • 动态调试工具:x64dbg
  • 反编译工具:IDR(Interactive Delphi Reconstructor 01.04.2017)IDA 7.6
  • 系统环境:win10 1909

二、分析用户名/注册码的算法

2.1运行程序

作者意图是让我们将Ringzer0背景上的按钮隐藏。与006相比,貌似少了一个Cancella按钮(不在Ringzer0背景图上)。但是其实也是要隐藏两个按钮。

2.2查壳

Die查壳,没有加壳,是Delphi程序,貌似是Delphi 4,和006一样,这里就不贴图了。

2.3详细分析

具体找到关键位置的方法和006是一致的,这里也不多讲了,有不清楚的,可以先去看看006。不过其中有个小地方,可能有朋友会不知道。这里补充以下

007-01.png

如上图红线画的省略号,表示后面还有引用没有展示出来。选择Options->General,在弹出的Options弹窗中选择Cross-references,然后修改下图红框中的位置,数字表示要显示的行数

007-02.png

007-03.png

直接修改为20,如果不够可以继续加。可以看到没有省略号了,全部引用都显示出来了。

007-04.png

按照006的方法找到隐藏Registerz按钮的关键位置位于Registerz点击处理函数中,分析如下

007-05.png

006几乎一样的结构,通过算法1(sub_4429A8)函数的返回值来控制是否隐藏。不为0就隐藏Registerz按钮并会显示一个新的Again按钮。

算法1函数的参数有三个

  • 第一个参数是dword_445830保存的值(后文称key)
  • 第二个参数是Codice字符串转换为的int数值
  • 第三个参数是Nome字符串缓冲区的首地址

通过x64dbg调试,其中key的值默认是0。如果Codice的内容含有非数字,则key的值会被sub_442A8C的返回值覆盖。暂时先不管key的问题

我们看看算法1

007-06.png

007-07.png

算法还原如下,根据该算法,如果key的值为0,则Codice无论输入啥也无法满足。所以key的值需要改变,就需要分析sub_442A8C函数

int GetSerial7_1(int nKey, int nCodice, char* szNome)
{
    int nNomeLen = strlen(szNome);
    if (nNomeLen <= 4)
    {
        return 0;
    }

    int sum = 0;
    for (int i = 1; i <= nNomeLen; i++)
    {
        for (int j = nNomeLen; j > 0; j--)
        {
            sum += szNome[i - 1] * szNome[j - 1] * nKey;
        }
    }

    sum = abs(sum) % 666666;

    if ((nCodice / 89) + (nCodice % 80) + 1 != sum)
    {
        return false;
    }

    return true;
}

sub_442A8C函数的分析如下

007-08.png

算法还原如下:

int GetKey7_1(char* szCodice)
{
    int nCodiceLen = strlen(szCodice);
    if (nCodiceLen <= 5)
    {
        return 0;
    }

    int sum = 891;
    for (int i = 1; i < nCodiceLen; i++)
    {
        sum += (szCodice[i] % 17 + 1) * (szCodice[i - 1]);
    }

    return abs(sum % 29000);
}

算法就分析完了,后面新的Again按钮的算法也是这两个算法,这里就不多说了。

总结下操作流程就是

  1. Codice编辑框输入一个非纯数字的字符串(需大于5位),如"abcdef",然后点击Registerz按钮
  2. 通过GetKey7_1的算法获取key
  3. Nome编辑框输入一串字符串(需大于4位),Codice的值通过GetSerial7_1获得(需要穷举)。然后点击Registerz按钮
  4. Registerz即隐藏了,Again隐藏的步骤就是把1-3的步骤重复一遍。

免费评分

参与人数 2威望 +1 吾爱币 +21 热心值 +2 收起 理由
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
yzyuan007 + 1 + 1 鼓励转贴优秀软件安全工具和文档!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

360sec 发表于 2023-2-5 22:19
谢谢分享,学习借鉴!
codeWhere 发表于 2023-2-14 08:52
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 16:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表