吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2152|回复: 16
收起左侧

[原创] 破解练习-CRACKME006

  [复制链接]
逸聆君 发表于 2023-2-4 00:07
本帖最后由 逸聆君 于 2023-2-4 00:13 编辑

006-注册算法分析

一、工具和调试环境

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

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

2.1运行程序

作者意图是让我们将OKCancella两个按钮隐藏。其中OK按钮是不可点击的。需要填写NomeCodice

2.2查壳

Die查壳,没有加壳,是Delphi程序,貌似是Delphi 4,记住版本后面会用到

006-01.png

2.3详细分析

通过005的分析,我们了解到了Delphi的改变控件有效状态的api为:SetVisible,更具体点为:TControl.SetVisible。那么下面就借助IDR,找到该API的地址

006-02.png

如上图,选择ClassViewer视图,然后在该视图空白处右键Search,然后如下图,在弹出的查找框中寻找SetVisible

006-03.png

找到如下地址

006-04.png

双击,会跳转到CodeViewer视图,显示该函数代码,可以看到TControl.SetVisible

006-05.png

双击进去,就可以得到TControl.SetVisible的地址了,如下图为:0x004231B0

006-06.png

但是如果x64dbg在该地址下断点,并不能找到关键地方。只有使用正确的方法使Cancella隐藏才是我们想要的触发,问题的关键是我们就是在寻找正确的方法。

那么怎么办呢?接下来就要请出我们的新伙伴IDA了。

使用IDA打开程序,然后打开签名视图,如下图或者直接使用快捷键Shift + F5

006-07.png

在签名视图空白处右键选择添加一个新的签名,或者使用快捷键Ins,然后选择Delphi 4(之前Die查到的版本)

006-08.png

在汇编视图中查找之前的函数(TControl.SetVisible)地址:0x004231B0

006-09.png

由于OK按钮目前是不可点击的,那么我们先看Cancella按钮的点击事件,双击过去。然后和IDR对照看,如有不懂,可以先看上一篇005

006-10.png

可以看出关键的地方在于0x442EE7处的call algorithm1(名字是我改的,算法1)函数调用,当该函数返回非0时(其实返回值不是0就是1),Cancella按钮会被隐藏且ok按钮变为可点击。如果返回为0时,Codice编辑框内容重新设置为0。

接下来就进入算法1函数中,看如何使其返回1。关键算法如下

006-11.png

Nome必须大于五位,且CodiceNome满足以下关系就返回1,否则返回0。

CodiceNome的关系:Nome的第5个字符的ASCII码值模7,再加上2。其结果的阶乘与Nome的每一个字符的ASCII码值相乘,所有乘积累加。新的结果减去0x7A69,就是Codice的内容。算法代码如下

char* GetSerial6_1(char* szNome)
{
        static char szCodice[60] = {};

        int nNomeLen = strlen(szNome);
        if (nNomeLen <= 5)
        {
                printf("Nome 需要大于五位\r\n");
                return nullptr;
        }

        int nTmp = szNome[4] % 7 + 2;
        int nFactorial = 1;
        for (int i = 1; i <= nTmp; ++i)
        {
                nFactorial *= i;
        }

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

        sum = sum - 0x7A69;

        sprintf(szCodice, "%d", sum);
        return szCodice;
}

现在成功的隐藏了Cancella按钮,且ok按钮可点击了。接下来就是隐藏ok按钮了。还记得前面查找的OK按钮的点击处理函数中也调用了控件隐藏的函数。那么就看看ok按钮的点击处理函数

006-12.png

可以看出关键的地方在于0x442DC1处的call algorithm2(名字是我改的,算法2)函数调用,当该函数返回非0时(其实返回值不是0就是1),OK按钮会被隐藏。如果返回为0时,不做处理。和前面Cancella按钮点击处理函数差不多。不过该处理函数,会首先检测Cancella按钮是否被隐藏,如果没隐藏就会将Codice编辑框内容设置为0,然后返回。只有Cancella被隐藏了。才会执行前面关键代码。

接下来就进入算法2函数中,看如何使其返回1。关键算法如下

006-13.png

Codice必须大于五位,且CodiceNome满足以下关系就返回1,否则返回0。

CodiceNome的关系:Codice的数字转换为字符串,然后将该字符串的每个字符的ascii码值进行平方计算,计算结果再乘以该字符的字符串中的位数(从1开始)得到新的结果,再用新的结果模0x19,最后再加上0x41。得到的新的字符串和Nome字符串相同就返回1,否则返回0。

算法代码如下:

char* GetSerial6_2(char* szCodice)
{
        static char szNome[60] = {};

        int nCodiceLen = strlen(szCodice);
        if (nCodiceLen <= 5)
        {
                printf("Codice 需要大于五位\r\n");
                return nullptr;
        }

        char chTmp = '0';
        for (int i = nCodiceLen; i != 0; i--)
        {
                szNome[i - 1] = (szCodice[i - 1] * szCodice[i - 1] * i) % 0x19 + 0x41;
        }

        return szNome;
}

免费评分

参与人数 10威望 +1 吾爱币 +29 热心值 +9 收起 理由
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
baopushouzhuo + 1 + 1 谢谢@Thanks!
laoxiao + 1 + 1 谢谢@Thanks!
lgc81034 + 1 谢谢@Thanks!
Chenda1 + 1 + 1 我很赞同!
yyb414 + 1 + 1 热心回复!
woyucheng + 1 + 1 谢谢@Thanks!
唐小样儿 + 1 + 1 我很赞同!
Helsing9527 + 1 + 1 热心回复!
为之奈何? + 1 + 1 我很赞同!

查看全部评分

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

dsfive 发表于 2023-2-26 13:26
大佬,在汇编视图中查找之前的函数(TControl.SetVisible)地址:0x004231B0,没显示 全 调用该函数的地方,是不是哪里需要设置下?
捕获.PNG
zjn1999 发表于 2023-2-4 07:53
constwm 发表于 2023-2-4 09:15
勤快的小农民 发表于 2023-2-4 09:20
感谢大佬分享
YABIN 发表于 2023-2-4 11:24
学习感谢分享
se34218 发表于 2023-2-4 11:38
你的教程在哪里找的啊?
ppplp 发表于 2023-2-4 12:12
专业 看看就行了
weishi9527 发表于 2023-2-4 12:44
看不懂啊看不懂
头像被屏蔽
yuanjufeng1 发表于 2023-2-4 14:55
提示: 作者被禁止或删除 内容自动屏蔽
a2604273891 发表于 2023-2-4 17:16
进来学习了,虽然看不懂
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 15:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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