吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 23327|回复: 404
收起左侧

[原创] Navicat 17 破解教程

    [复制链接]
iwolf 发表于 2025-8-13 10:29
本帖最后由 iwolf 于 2025-8-19 20:45 编辑

Navicat作为查看、管理数据库的工具,使用广泛,本教程针对版本17.1.3进行破解。此版本的下载地址请自行搜索,官网已有新版本,可能直接找不到旧版地址,网上的一些历史版本官方下载地址可能没有17的。
8.19更新:我电脑中的这个软件被莫名其妙卸载了??当初安装的时候不知道怎么就安装到了 ‘%temp%’目录下,一直没管它,最近也没清理系统,而且几个月都好好的在那里,现在突然路径下的程序目录消失了,回收站没有,注册表的键值都在。不知道什么原因。有清楚的大佬、小伙伴知道的在评论里告诉一下。不确定是否软件有检测机制给自动卸载的。不放心的小伙伴还是给它禁止联网吧。

相关工具

x64dbg、IDA、ProcessHacker、ToolsFx、CheatEngine

关于装载基址说明

注册激活逻辑涉及的代码都在libcc.dll和libcf.dll中,经常是两个文件之间相互通过虚函数调用,需动态调试分析进入到函数中。
libcc.dll的Imagebase:0x180000000.  libcf.dll的Imagebase:0x180000000.
因x64dbg加载程序时的基址不同,所以本文中的地址基于IDA的装载基址,若与文中不同,需自行计算调整。本文中出现的函数、提取的字符、密钥等,是通过大量的断点、CE内存搜索、堆栈回溯,动态分析出的,对于函数的功能解析,少不了AI的辅助加成。尤其是各种加解密算法,对密码学不了解的话,动态分析容易跟进到底层实现,却又不知道函数是在干什么。如果AI能识别出密码算法,再通过输入输出验证,能解决很大问题。

时间相关的逻辑

在程序与时间日期、过期日期等有关的逻辑中,相应的时间戳写在注册表中,路径位于HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium\Registration17XCS和HKEY_USERS\S-1-…-1000\Software\PremiumSoft\NavicatPremium\Registration17XCS,项名称的最后5个字符不确定是随机字符还是带版本号的字符,这两项的键值数据是一样的。
在libcc.dll中,函数sub_181C15DB0生成AES加密中使用到的IV偏移量,在函数返回值+8字节偏移的内存地址处,长度是16字节。从代码中可以看到,该IV值为:66E088B70FC0431F8751A0954ED211AA。
Snipaste_2025-08-05_20-25-45.png Snipaste_2025-05-13_17-09-04.png

在libcc.dll中,函数sub_181C17AC0生成AES的KEY,第三个参数是与本机MAC地址相关的字符串指针。比如, MAC地址是“12-AB-34-56-22-9A”,那么该处的字符串就是“42413231-3433-3635-3232-3941FFFFFFFF”。该函数对包括‘-’的整个字符串进行MD5加密,函数返回值是KEY的指针的指针。有了初始的KEY和IV就可以解密过期日期的生成逻辑。在上面Registration17XCS的注册表项中,键值都是加密的,无法直接获取。找到数据中最长的那一处键值,该处的键值可能与IV偏移量有关。取前64个字符(即第1个逗号前的内容),将其前后分开作为2个16字节的HEX数据对待。
Snipaste_2025-08-06_15-24-14.png

下面进行时间戳的解密,本文用到的加解密工具为“密码学工具箱ToolsFx”,论坛爱盘中的工具,也可使用在线加解密网站。在“对称加密”标签页中,选择AES算法、CBC模式、NoPadding填充,KEY和IV是前面函数获取的内容(注意,连同密文一样都是HEX格式),密文为注册表键值的前32个字符(即16字节),解密得到一串HEX数据,可以看到前半部分是“NAVICAT”的HEX内容。解密出的数据取后8字节备用。
Snipaste_2025-08-06_15-36-08.png

然后,KEY不变,将键值的前32个字符(即刚才的密文)作为IV,将紧邻的后32个字符作为密文,解密,得到一串HEX数据,取前8字节。各取这两次解密后的8字节进行拼接得到16字节(顺序是:第一次的后8字节+第二次的前8字节),将其作为新的KEY,IV仍是初始的由sub_181C15DB0生成的那个。接着是密文的获取。AES加密的时间戳在Registration17XCS的注册表项中,因都是密文,可以将较短的数据依次放在密文输入框中,解密成‘raw’格式,最终能找到解密出的时间戳。AES正确解密后得出时间戳,一个是程序首次使用的日期,一个是进行注册激活的日期(如果有的话,当许可证可用时会有1个月的注册期限,超过期限不注册将显示激活期限过期)。注册表记录的是开始使用的时间戳,程序将该时间戳增加30天,以过期日期的形式最终显示出来。
Snipaste_2025-08-06_16-09-30.png

同时,时间的验证会有一次2次校验。如果只修改一处,那么2次校验出错,程序仍能显示最初的过期时间,也就是需同时修改多处注册表,使之相对应,才能达到修改注册表延长试用日期的目的。2次校验的相关数据在注册表的位置类似于:HKEY_USERS\S-1-…-1000_Classes\CLSID{7E45101F-…-93C34F589041}\Info和临近表项位置。(CLSID下子键不多,看到加密的键值对应该就是)。2次校验分两个步骤,1个是Info内数据的AES解密,1个是CLSID子项名称中包含的时间戳16进制核对。Info内数据的时间戳计算使用到AES加解密,密钥key‘libcckeylibcckey’,IV‘libcciv libcciv ’(包含空格符),CBC模式,PKCS5填充。CLSID另一个子项的名称中末尾8个字符是时间戳的16进制形式,换算成10进制是首次试用的时间戳。2次校验用于程序首次试用30天的情况,对应Info中第一个键值。不确定激活期限是否有2次校验(未进行修改注册表的验证)。
Snipaste_2025-08-05_16-24-56.png

许可证密钥生成

参考论坛里的《XX XX v12.0.23.0 破解教程x86,x64通用,手动破解,不要补丁,无病毒》一文(如果早看到这篇文章能少走很多弯路),文章里是版本12,当前17版本有部分逻辑相同,但也有部分变化。
在libcc.dll中,函数sub_181B7F490是Base32解码,对该函数的调用在0x181B7D5F7地址处。参数2是输入的16个字符许可证密钥的指针,参数1存放Base32解码后的数据,数据应为10个字节,且前两个字节必须为字符“h*”。sub_181B7F490的上层函数是sub_181B7D4C0,其得到解码数据后进行'h*'的比较,若不是则出错,若是则取剩余的8字节。
0x181B7D678地址处进行DES解密函数的调用,密文是刚截取的8字节,ECB模式,无填充,密钥为 “E9 7F B0 60 77 45 90 AE”,此密钥来自于libcc.dll中的固定数据.data: unk_185A6D660,函数返回值是DES解密后的8字节。libcf.dll中的sub_1800F3970函数由AI分析出DES密钥调度算法,ECB模式,无填充。
Snipaste_2025-08-07_15-10-39.png

对DES解密出的8字节进行判断,只有判断通过才说明是正确的许可证密钥格式。倒数第二位的字节取其高4位,加0x10后要大于等于0x11,否则出错。接着判断第4、5位,要为CE32或CE33,否则出错。判断第6位,0x65即可满足。关于各字节代表的含义,参考一文中有具体说明。
Snipaste_2025-08-07_10-15-08.png Snipaste_2025-08-07_10-54-07.png

当许可证密钥验证通过后就可以点击“激活”按钮,但此处的激活方式是联网校验激活,必然不通过。针对此处的破解方法可以是拦截修改响应数据包,前提是逆向出正确的响应数据包格式。软件有“手动激活”离线注册的功能,使用场景是内网环境下的软件激活,由其他机器向注册激活服务器发送本机生成的请求码,填入获取的激活码进行激活。也就是说软件本身具有非联网状态下的激活功能。逆向出手动激活方式的请求码和激活码,就可完成对软件的破解。

程序RSA公钥

“手动激活”的功能要在断网状态下点击“激活”按钮后出现,不过程序在注册界面有个“连接设置”,勾选“验证针对CA的服务器证书”,可以达到程序连接不上服务器的目的,等同于断网状态。
老版本程序中使用的RSA公钥是嵌入在资源中的,很容易找到并进行替换,17版本中仍然有这个资源,但是已经弃用,这也导致即使进行了公钥替换也无法解密出RSA的明文。动态调试查找RSA公钥信息,发现其字符在libcc.dll中是以碎片的形式存在于.rdata区段中,最后组装在一起。程序在启动后不久应该是只运行一次RSA公钥加载函数,将PEM格式(去掉头尾标记,即只有Base64编码)的公钥加载入内存,然后从公钥中提取出加密所需要的大数N,供后续RSA加密使用。该函数为sub_181C190A0,对函数的调用指令位于0x181B81A57,函数返回值是Base64编码格式公钥的指针的指针。后面对RSA加解密的破解只能是替换成我们自己的公私钥对,因此这里需要用到hook的方式替换公钥。(当然也可以手动修改内存,或者制髂诖娌苟≈嗟模ook方法见乱唤凇�
Snipaste_2025-08-07_16-54-30.png

在libcf.dll中的函数sub_1800F2350进行RSA加密,参数[arg1+50h]处的字节流是公钥中大数N的16进制小端序,arg3、arg4分别是明文及长度, arg5将存放加密后的数据。最终将会调用sub_1801027F0执行底层的RSA操作。因使用PKCS1填充方式,明文会被随机数填充,所以每次加密的结果都是不一样的,只能通过私钥解密的方式来查看验证明文数据。这里也基本理解了RSA的核心加密公式:明文M转换为数字后,加密公式为:C≡M^e  mod n. 其蠧为密文,e和n为公钥。以RSA-2048位PKCS1填充模式的加密举例,明文被随机数填充扩充为0x100字节,将其作为2048位的大整数对待。n、e是从公钥中提取的数据,e一般就是0x10001,n也同样作为2048位的大整数对待。加密公式的模幂运算在底层会被其他方式简化实现,生成2048位的大整数即为密文。这些明文、密文、公钥模数n对应于内存中的表现形式就是0x100字节(2048位的运算)。
Snipaste_2025-08-08_10-14-02.png

联网激活的流程是,将16个字符的许可证密钥进行RSA-2048位加密,得到0x100字节(�2048位),向注册激活服务器发送数据,内容为“input:0x100字节密文”,服务器返回响应。libcc.dll中的函数sub_181B7FA80向服务器发送激活数据,参数2是注册激活服务器字符串的指针,参数3是发送HEX字节流数据的指针。
有了自己的RSA公私钥,我们可以对一些密文尝试破解,如果能解出可读明文那说明使用的是RSA加密。其实定位到RSA加密函数后,通过调试也能发现,点击“手动激活”后会进入RSA加密的流程,查看其参数可获取明文,此处密文对应于手动激活窗口中的请求码。对于加密而言,用户方提供的是“{"K":"NAVMIKCHCWNIHS3Q",… "P":"WIN"}”的明文,使用RSA公钥加密得到密文就是请求码。请求码是程序自动生成的。将请求码发送给激活服务器,服务端使用私钥解密得出明文,添加一些字段后再加密生成激活码返回给用户。
Snipaste_2025-08-08_11-27-00.png

在libcf.dll中的sub 18002FBD0是BASE64解码函数,激活码是BASE64格式,需先调用该函数解码得到0x100字节,参数3是激活码数据的指针,返回值是解码数据的指针的指针。解码后,libcc.dll中的sub 181B7C980函数会进行RSA解密,得到实际提供的明文JSON激活字符串,然后获取各字段值。该函数必须返回0才能注册成功。在未看到参考文章之前的调试过程中,一开始不理解为什么激活码的验证还要经过RSA加密?包括之前的联网激活过程中,也是对服务器返回的响应数据进行同样的处理流程。流程分析的结果是对数据进行RSA加密,然后判断密文是否是有效JSON字符串,若无效则出错。后来发现ToolsFx工具中有“私钥加密”一项,一般情况下是公钥加密、私钥解密以及私钥签名、公钥验签,但是私钥也可以用来加密,对应于用公钥解密。经过验证正是如此,在底层汇编中,我的理解是公钥解密和大部分情况的公钥加密是同一套代码逻辑,只是对应于用私钥加密的密文,解密要使用公钥。在程序中,用RSA公钥解密激活码得出明文,而在调试环境下,以为是在公钥“加密”。(这部分可能有些拗口)
用公钥解密出JSON字符串后,会提取字段值进行比较,如果字段缺失或与之前的不一致则出错。调试中可以看出包含K,N,M,O,T,DI,FA字段,其中M、FA字段可以不填。T表示时间戳,为整数,是必填项,下面截图中的字段缺少T,是注册不成功的。依据参考教程中的激活码字段信息说明构造字符串,选择2048位,PKCS1填充,注意勾选“私钥加密”,这样加密生成的BASE64格式数据就是需提供的激活码。将加密内容复制到激活码中,成功激活。
Snipaste_2025-08-08_15-10-16.png Snipaste_2025-08-08_19-16-43.png Snipaste_2025-08-08_19-18-09.png Snipaste_2025-08-08_19-48-01.png

在我的测试环境下,最后出了个小问题。就是当破解后,再次重新打开程序,会提示“激活期限已过期”,因为在破出许可证密钥到最后逆出激活码用了很长的时间,早过了激活期限,但是更换许可证密钥好像又没有生效。刚才提示激活成功的时候,程序有操作注册表的过程,应该是写入了激活信息,现在又读取出激活期限,猜测是读取超期的逻辑先于读激活信息执行。不确定如果在期限内完成破解的话,是否无此问题。当使用hook公钥的方式启动后,发现程序为破解状态,那么问题就好解决了。如果遇到同样的问题,往下看,如无此问题则可忽略。
制作一个程序启动器即可,以后不直接双击运行原始程序,而是通过启动器来运行。启动器的逻辑也很简单,运行原始程序,在加载后立即挂起,注入hook dll,然后继续运行程序。这么简单的代码交给AI去写就好,比如提示词:

用C语言写一个加载指定程序启动的launch程序,要求加载运行同目录下的指定程序,启动程序后立即挂起,将同目录的指定DLL注入到程序中,然后继续运行

该提示词生成的程序还需要输入参数,有些麻烦,因为是自用,你可以直接将参数写入代码里,最后双击运行该启动器程序即可。

HOOK替换RSA公钥

本文使用MinHook进行hook dll的制作,未作详细使用的研究,只是依照简单例子进行修改。生成公私钥对的时候选择392长度的公钥,与程序中使用的长度保持一致,否则会崩溃。代码如下:

#include "pch.h"
#include <iostream>
#include <format>
#include <string>
#include "MinHook.h"
#pragma comment(lib, "libMinHook-x64-v120-mdd.lib")

// 函数指针定义
typedef int(__stdcall* TargetFunction_t)(int, int);
TargetFunction_t originalFunction = nullptr;

uintptr_t __fastcall HookedFunction(int param1, int param2) {
    uintptr_t result = originalFunction(param1, param2);
    LONG64* ptr = reinterpret_cast<LONG64*>(result);
    char message[64];
    sprintf_s(message, " Address: 0x%p", (LONG64*)*ptr);
    MessageBoxA(NULL, message, "Hook Info", MB_OK | MB_ICONINFORMATION);
    // 替换为自己的公钥,注意长度392要与程序原公钥保持一致,
    memcpy_s((LONG64*)*ptr, 392, "XXXXXXXXX", 392);
    return result; // 修改返回值
}

void Execute()
{
    MH_Initialize();

    HMODULE hModule = GetModuleHandle(L"libcc.dll");
    if (!hModule) {
        printf("Failed to get module handle\n");
        return;
    }
    uintptr_t targetAddress = (uintptr_t)hModule + 0x1C190A0; // 替换为实际 RVA

    MH_CreateHook((LPVOID)targetAddress, &HookedFunction,
        reinterpret_cast<LPVOID*>(&originalFunction));
    MH_EnableHook((LPVOID)targetAddress);
}

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        Execute();
        break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

使用的公钥跟激活状态类似于有一种绑定关系,也就是说,你用一个公钥激活之后,又使用另外的公钥制作了新的dll,注入新dll启动程序将仍是未激活状态。替换什么样的公钥激活,以后就用这个注入启动。有条件的就自己编译代码,使用自己的RSA2048位密钥对。文末附件是生成好的对应V17.1.3版本,注释掉了弹窗信息,对应的密钥对是:
-----BEGINPUBLICKEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAijqbHNPRBmVNQb9KNZu0bPbRW/M/pFOQWoGh4uaPpIsW/LwjTegEBNklw9tuXXeUN4RNheeWaImcHnBxe6gvoYjMBPh2nMCWKhId3ba9JbIjbcRi/O7y6+F6votbqLT05FI25QV4coLeOQyb0NehOdQbah773Q88cJePgLnsoqthGOXmPWv1I/3JyrEf9OqF7JSNvik/2kmoTHHW63uWR/ExQLhOsHx7lIMUh3EwXraxWX/6aXQgS7On2mq2siWyxfKWS6GO93sEVDqFhB7/P358Lpiu/S+2QZNPm0ayu/m02fWI3kxLh+y9b9icoKKN2tLRWZdrbYIpyX3TbJcZOwIDAQAB
-----ENDPUBLICKEY-----

-----BEGINRSAPRIVATEKEY-----
MIIEogIBAAKCAQEAijqbHNPRBmVNQb9KNZu0bPbRW/M/pFOQWoGh4uaPpIsW/LwjTegEBNklw9tuXXeUN4RNheeWaImcHnBxe6gvoYjMBPh2nMCWKhId3ba9JbIjbcRi/O7y6+F6votbqLT05FI25QV4coLeOQyb0NehOdQbah773Q88cJePgLnsoqthGOXmPWv1I/3JyrEf9OqF7JSNvik/2kmoTHHW63uWR/ExQLhOsHx7lIMUh3EwXraxWX/6aXQgS7On2mq2siWyxfKWS6GO93sEVDqFhB7/P358Lpiu/S+2QZNPm0ayu/m02fWI3kxLh+y9b9icoKKN2tLRWZdrbYIpyX3TbJcZOwIDAQABAoIBACm2j9J+NSjJ7yt1D27oAuWTAhDOchkjwn8deX3gd95+vrwcBkdfSb8wzE2zbTW1fTvXqBFNlr0LMdqZshVP5rfHcVHarOiW0Xn2p56do6y5eimIxxpu/U2jaIgRw+JAYVp5WOl54iQkS+1JWcgHGjc6Q9+dZAIMs/+CLSL6eGeJ/vTUzVzcM85InXsjquEh5jTDTo1ADPfWZWnebrWjGWZc2XUeDw0FAaQM8gYWdtMQnNln11YJ+kMcWsfK5j2qnJHvMvUR8gHPH3bPaInUp0Wux/lqwtdWGyMh/Pgcfq1nY8NT3FsmP5TEUEnIWM6Kgq/dPHKXahjkVYkIqoT/93ECgYEA33pnsraA3EbhvWxNnLb3mjkdMH7H3tD6zQxytRnFr7fbGPenaUHX6iLSRoETUuvJO6uYpP/sNAJcMwY/mmNYmD1Z8n3Ct0+WplOshtVnZbsB9CrU33HMnMD4cFmVmQhHBh2UWFPjx08dEND9a3ILOdHOWi1Y1qCJcrlrT2iSrNMCgYEAnlhF6rTjqJC7idddT+T48sk0wvhIRvR51A/88zFb0hDkYMYqkAmV8gixDL1eBYE5s/D447X2kTWEEF2uHqS28JzevBwyp+uaJ2DCMd/MspYaXa8mtwojf3zWJ+LNyasgwkxj4tlB3kMxpjLrDeJe7Uc96I3v5Y5ukVNG1Fo/APkCgYBCoWhRrIB3LNsZczUgyJzCasz9LI/DK2Pbxx5cSLbcUWEN7KkJhQwvTvqK8ukkDBEPrXXxnCx8xUdgHzjPe1dq7L/owP5RUXWFWeVSvkX52uwWNL8LcA6lnhN0zAECg6lJdYBJZZnATyJHZUhpxLL8JkX0NRkLxQm2HvqTzoYM6QKBgGTQkwNSVDg4ng6u/gwmHpKFpIAWD/6NHRv1afl0jZ97fcxXnzXBxKQrAH65+qjKk/CLFgv1CJ1/UywQWRHNkWQ0nGNsGJxtFuLHahzS/sMdaoAHSkDzxZIf60HN13P07pCGjnoaFSPr6CqG9L0MSaAM4c+0vu6K9r60JL6DDuYRAoGAB2YqHtWf1QKetjmn5pQGv8K0GEnLl/KDC+Ko7yWRM3rjxeVGPBv9ioocO+5DE9XlEIUsQct6D6TVzi1SHAk3tNLw0g/HI6f6pbMn7fw+jFSSsVREhSwkpiD59JeNoXKILFQlDaWuL/Jj78tOqnKlbo5PKIanevzOTZykm6ZrrcE=
-----ENDRSAPRIVATEKEY-----

在程序启动后加载制作的dll进行hook,可以使用x64dbg调试的方法,将程序挂起在入口点,打开ProcessHacker,找到进程,点击右键,Miscellaneous->Inject DLL,选择生成的dll即可。注入后继续运行程序,此时应有显示公钥地址的弹窗,说明已找到原公钥,点击“确定”即可成功hook替换为自己的RSA公钥。
Snipaste_2025-08-07_17-20-16.png Snipaste_2025-08-07_17-26-21.png

总结

1.生成一对2048位的RSA公私钥,制作替换公钥的hook dll,需要hook的函数是libcc.dll中sub_181C190A0。
2.程序启动后中断挂起,注入dll后继续运行。或进行第6步操作。
3.根据文中“许可证密钥生成”一节(或参考教程)选择8字节,进行ECB模式、无填充的DES加密,密钥为 “E9 7F B0 60 77 45 90 AE”,生成8字节。将8字节追加到以0x682A开头的2字节,组成新的10字节。对10字节进行BASE32编码,得到16个字符即为许可证密钥。
4.断网状态下进行手动激活流程。选择RSA-2048位PKCS1填充模式,使用生成的私钥对请求码解密,得到K、DI、P字段的JSON格式字符串。
5.保持原数据内容不变,增加N、O、T字段。提供私钥,选择私钥加密的方式对新字符串加密,得到的密文即为激活码。
6.若激活成功,但仍提示过期则继续本步骤,否则可忽略。制作程序启动器launch,运行程序时以启动器代替原程序。本步骤目的是程序启动时注入替换RSA公钥的hook代码,能实现此目的的方式皆可。
本篇教程的难点是对各种加密算法的分析识别,熟悉密码学的话,破起来会简单点。教程主要针对版本17.1.3,理论上,如果激活逻辑流程不变的话,本文所讲方法是适用的,只不过关键函数地址、密钥值等可能会有变化。

最后关于更新

本文不推荐你一直更新,本来这个教程已经结束,但是出于好奇心我点击了“检查更新”,重启后进入软件你会看到如下界面:
Snipaste_2025-08-12_17-09-34.png

没办法只能尝试launch启动,发现并没有hook到公钥的弹窗。仔细看软件目录,libcc.dll的修改日期发生变化,是连同软件一起更新了,加载公钥的函数地址变化导致不能hook。那么这个时候屏幕前的老铁不要慌,结合之前的分析,对比前后文件,可以找一个公钥碎片字符,在.rdata中搜索,找到后下硬件断点,重新加载程序运行,断点命中后,回溯调用堆栈,可以找出新的函数地址。然后修改hook代码中的函数RVA(V17.1.3对应0x1C190A0,V17.3.2对应0x215B240),制作对应版本的dll。本来以为再次launch启动后还要重新激活,但是不用,现在最新版本已经可用了。还好成功,万一这方法不可行,那么连我都要慌了... 不过这次也证明了教程方法的可用性。如果以后想继续更新软件,那么就要冒此方法失效的风险。若不想更新,也可直接修改本机的hosts文件。
Snipaste_2025-08-12_17-34-39.png

教程仅作技术交流,最后支持使用正版软件。

参考

https://www.52pojie.cn/thread-688820-1-1.html
https://github.com/TsudaKageyu/minhook
https://blog.csdn.net/qq_42468226/article/details/128407995 (MinHook介绍|文档|例子)

Hook.zip

143.9 KB, 下载次数: 965, 下载积分: 吾爱币 -1 CB

V17.1.3

免费评分

参与人数 161吾爱币 +154 热心值 +145 收起 理由
RIKKIA + 1 + 1 热心回复!
ltyfdf + 1 + 1 我很赞同!
seponewwl + 1 我很赞同!
wanshu007 + 1 + 1 跪了大佬,跪了
sblpp + 1 谢谢@Thanks!
leixiaoliang + 1 + 1 我很赞同!
935039168 + 1 用心讨论,共获提升!
super9988 + 1 + 1 我很赞同!
Linxiaoya + 1 + 1
wk52pj + 1 + 1 我很赞同!
licho + 1 + 1 我很赞同!
amber0x05F + 1 + 1 我很赞同!
nimenhao + 1 + 1 热心回复!
Herculee + 1 + 1 谢谢@Thanks!
whereismy + 1 谢谢@Thanks!
lin5789 + 1 我很赞同!
Coocle + 1 谢谢@Thanks!
ytfh1131 + 1 + 1 谢谢@Thanks!
天堂的风 + 1 + 1 谢谢@Thanks!
xiaoweng + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Courser + 1 + 1 用心讨论,共获提升!
007lover + 1 我很赞同!
allspark + 1 + 1 用心讨论,共获提升!
swz7852151 + 1 + 1 我很赞同!
ganniaosi + 1 + 1 谢谢@Thanks!
redme + 1 + 1 我很赞同!
push567 + 1 谢谢@Thanks!
phan70m + 1 + 1 用心讨论,共获提升!
ss65536 + 1 + 1 我很赞同!
qfqha + 1 + 1 谢谢@Thanks!
manlider + 1 我很赞同!
Oraer + 1 谢谢@Thanks!
NULL2019 + 1 + 1 谢谢@Thanks!
parisjee + 1 + 1 我很赞同!
q25l + 1 + 1 谢谢@Thanks!
xlt12580 + 1 + 1 用心讨论,共获提升!
a22488 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
CC520CC + 1 + 1 不明觉厉
zykang + 1 用心讨论,共获提升!
cy51168 + 1 + 1 用心讨论,共获提升!
冷柠 + 1 + 1 谢谢@Thanks!
Wanior + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
简丶 + 1 + 1 谢谢@Thanks!
Forgetten + 1 谢谢@Thanks!
iwxr + 1 + 1 谢谢@Thanks!
玖卿 + 2 + 1 我很赞同!
雨天独醉 + 1 + 1 谢谢@Thanks!
dlam1009 + 1 + 1 谢谢@Thanks!
Victor365 + 1 + 1 热心回复!
moongeer + 1 + 1 用心讨论,共获提升!
samismy + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
ryan9666 + 1 + 1 谢谢@Thanks!
zy2021 + 1 我很赞同!
JinxBoy + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
colascene + 1 + 1 我很赞同!
Msy丿平 + 1 + 1 热心回复!
jsang + 1 + 1 谢谢@Thanks!
fire-and-blood + 1 + 1 谢谢@Thanks!
江男 + 1 + 1 谢谢@Thanks!
adio + 1 + 1 用心讨论,共获提升!
xiaoshengzi + 1 + 1 谢谢@Thanks!
Squ4reR + 1 + 1 用心讨论,共获提升!
m_h + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
xiaoxing365 + 1 我很赞同!
Silence丿浅吻 + 1 + 1 谢谢@Thanks!
jackies + 1 + 1 热心回复!
098018 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
rolacn + 2 + 1 我很赞同!
sincos + 1 + 1 谢谢@Thanks!
willapple + 1 + 1 我很赞同!
maj001 + 1 + 1 用心讨论,共获提升!
York2016 + 1 热心回复!
Rv^ + 1 + 1 我很赞同!
cyz961223 + 1 谢谢@Thanks!
cdchj + 1 + 1 谢谢@Thanks!
moonrabbit + 1 + 1 谢谢@Thanks!
cloudos + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Tiniaual + 1 + 1 我很赞同!
52rap + 1 + 1 谢谢@Thanks!
Wu19832707520 + 1 + 1 热心回复!
wuaiwang345xipo + 1 + 1 我很赞同!
Renzen + 1 + 1 我很赞同!
jim_zwb + 1 + 1 我很赞同!
vLove0 + 1 + 1 谢谢@Thanks!
levinlee2013 + 1 + 1 谢谢@Thanks!
蓝月梦幻 + 1 + 1 谢谢@Thanks!
fengbolee + 2 + 1 用心讨论,共获提升!
MyDw + 1 + 1 我很赞同!
WinkLi + 1 谢谢@Thanks!
StudyPavilion + 1 + 1 我很赞同!
DregMan + 1 + 1 用心讨论,共获提升!
zp999 + 1 + 1 谢谢@Thanks!
1825903495 + 1 + 1 谢谢@Thanks!
yxpp + 1 谢谢@Thanks!
小朋友呢 + 2 + 1 用心讨论,共获提升!
窗外灯火几许 + 1 + 1 热心回复!
grrr_zhao + 1 + 1 谢谢@Thanks!
wanshuyou + 1 谢谢@Thanks!
52kail + 1 + 1 谢谢@Thanks!
theStyx + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

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

m_h 发表于 2025-8-15 22:01
本帖最后由 m_h 于 2025-8-19 14:58 编辑

文中密钥 和工具 dll       能解密 加密后 离线激活.成功
软件提供解密后

{"K":"NAVMIKCHCWNIHS3Q", "DI":"2048151B071C3FD721B4", "P":"WIN"}

楼主得出 以及 T 来自 AI解答

{
  "K": "NAVMIKCHCWNIHS3Q",
  "N": "52POJIE",
  "O": "52POJIE.CN",
  "T": 1755217200,
  "DI": "2048151B071C3FD721B4",
  "P": "WIN"
}

加密后结果

VT6IgcykKoD8J0FbUsgRlT87e9JuOd96LzEmnQ6KJpE2hNVvODpqoMzQi9tfJJxSJ+pMx1MJurw5Z8IJciqaVp9jP3F+1jG1dDGhnRxoQr9SpNDgqgoroL/cJdr+2zZ/6uQSEIBCAukSWDcPNxyYy8NDq6N6xWa1AO+Xjot7oQ4wvmkkeVbZykQ5S5sc+Mk7n8D5QBUx81oXCPqBrReMju/ROj0EC68W/ncWFDJxkY3dQDcyO0rb71lyveBbMbGHJ7qfPW5RfyatoblfFQskhJGp+5CwaephUqMgRoYcNnwLzvOTWg7b3R/ot+5XBqqP4L9dfHPFeChvsJrsHl2aYQ==

好吧我马虎了  T 是时间。





(V17.1.3对应0x1C190A0,V17.3.2对应0x215B240) 我把dll改成 215B240 启动navicat.exe 17.3.2.0 直接报错。



搞定了。
isok.PNG
fjhscpc 发表于 2025-8-14 13:39
看看,16用了五年了,虽然可以破解但比较麻烦要好几步,不想折腾,能用就行
zhluosss 发表于 2025-8-27 11:10
我提供一个思路,不使用启动器的,劫持libcrypto-1_1-x64.dll,或其他启动在libcc.dll之前的,在这个DLL里做注入
lzh107861908 发表于 2025-8-14 13:43
感谢大佬,厉害了

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
GUANylimhs + 1 + 1 用心讨论,共获提升!

查看全部评分

meet52 发表于 2025-8-14 13:05
伸手党自愧不如
ZhangYuMR 发表于 2025-8-14 13:30
感谢楼主分享
江男 发表于 2025-8-25 10:54
bian1 发表于 2025-8-25 09:39
大佬3个参数是啥意思

新版本17.3.2要hook的函数传了3个参数,楼主17.1.3的代码是2个参数,所以总是报错
xixicoco 发表于 2025-8-14 13:03
现在hook技术比较流行啊
 楼主| iwolf 发表于 2025-8-21 08:57
subfire 发表于 2025-8-20 19:08
用 Google 竟然不到 17.1.3 版本的下载..

一些下载站有这个版本,官网目前的新版也能按照教程方式激活
 楼主| iwolf 发表于 2025-8-20 11:44
payallmoney 发表于 2025-8-19 19:17
V17.3.2对应0x215B240 这个地址好像是错误的  , 而且 V17.3.2 有两个地方存储了 密钥 “E9 7F B0 60 77 45  ...

密钥可以当成常量字符串理解,编写程序的时候字符串只定义一次,但程序中可以多次引用、多次拷贝复制,这样内存中就是有多处字符串,但其实源头就只在一个地方,如果是后期malloc后复制出来的,free后字符就不存在了。我是这样理解的。hook我只用在了替换RSA公钥处,其他地方没用。IDA的截图确实是RVA地址:0x215B240
Snipaste_2025-08-20_11-38-14.png
walkingyu 发表于 2025-8-14 11:50
感谢大佬分享,正需要,navicat用起来还是很顺手的
jun269 发表于 2025-8-14 11:56
楼主您这个有17的补丁?是不是理论上所有17的都能搞定?谢谢
yanleiat 发表于 2025-8-14 12:07
navica一直都是用的12,没想到17已经更新出来破解方法了
muchblue 发表于 2025-8-14 13:20
讲解详细又专业,感谢无私分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2026-1-13 09:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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