NT199克隆NT158复制NT88加密狗破解软件工具教程

NT199/NT158复制NT88加密狗破解软件工具教程

此加密狗具有全球硬件ID,提供3DES算法,许可证管理功能可以控制软件的多个模块(8个许可证)。芯片整体集成度的提高,极大程度的解决了一般加密锁损坏率高和“丢数”的问题。

工具/原料

  • 单词表: IDE: 开发环境,比如商用的 Visual Studio,免费开源的 Sharp Develop。 /Encrypt: 加密 String: 字符串 Dog: 狗,在此处可理解为加密狗/ NET: 微软开发的变成框架,可使用 .NET Reflector 进行反编译。
  • 使用工具:de4dot (脱壳).NET Reflector(主要分析工具)、Reflexil(修改,它是.NET Reflector插件)、ILSpy(调试)、Visual Studio(辅助分析)。这些工具网上都能找到,这里就不用提供了吧。

一、拆解文件,寻找验证

  1. 1

    脱壳这个很简单 扔到 de4dot 神器自动脱掉了。
    把处理后的文件扔到 .NET Reflector 里面,右键模组 -> Go To Entry Point 进入入口点

    NT199/NT158复制NT88加密狗破解软件工具教程
  2. 2

    观察代码,程序在入口点通过建立互斥体检测程序是否已经运行,然后进入「MainForm」窗口。

    NT199/NT158复制NT88加密狗破解软件工具教程
  3. 3

    在主窗口初始化的代码内,「初始化运行环境」的下面有一行很可疑,「InitLicense 初始化授权」:

    NT199/NT158复制NT88加密狗破解软件工具教程
  4. 4

    看到代码后,可以发现我们没有找错,许可授权在这里读取:

    NT199/NT158复制NT88加密狗破解软件工具教程
  5. 5

    SN 全名 Serial Number[序列号],这个类名也很直白,就是我们研究的目标了。

    END

二、拆解验证,糊点代码

  1. 1

    点进去 SN 这个类,然后单击 Reflector 界面最底部的「Expand Methods」展开这个类所有代码,方便分析:

    NT199/NT158复制NT88加密狗破解软件工具教程
  2. 2

    把全部文件拷贝到 Visual Studio 或文字编辑器备份,定位到 Registered 这个方法:

    NT199/NT158复制NT88加密狗破解软件工具教程
  3. 3

    这段代码,表示程序会优先检查加密狗内部的授权。若是加密狗不存在,则进行序列号的校验。把狗相关的函数提取出来,分析一下调用:

    NT199/NT158复制NT88加密狗破解软件工具教程
  4. 4

    NTFind: 调用 API 「NTFindFirst」 查询第一个加密狗的存在,返回 0 表示成功。
    NTLogin: 调用 API 「NTLogin」 尝试登录,返回 0 表示成功 (加了容错处理,所以代码看起来比较怪),方法返回 true 表示成功。
    NTReadIv: 调用 API 「NTRead」 读入加密狗数据,并与内置的密文进行比对验证,方法返回 true 表示获取成功并验证通过。
    NTReadLicense: 读取狗上面的数据,根据数据返回相应的授权信息。

  5. 5

    前两个,直接在 DLL 修改为返回 0 即可:
    1 xor eax
    2 eaxretn 04h 

  6. 6

    后面一个有点麻烦,因为需要读取数据到内存进行验证,而数据又不能凭空出现。
    把「NTReadIv」这个方法的功能翻译成白话大概就是:
    1. 申请 7 个字节的数据块。
    2. 读取狗的数据:从 0 开始读取 7 个字节,读到的内容写到刚才申请的数据块里面。
    3. 如果数据块的内容与「NTIv」这个变量的内容一致则验证成功,否则失败。

    而在此之前,我们需要知道所谓的密文是什么内容;回到构建函数 (SN -> .cctor)

    NT199/NT158复制NT88加密狗破解软件工具教程
  7. 7

    到这里就比较简单了,进去 EncryptString 这个类全部拷贝到 IDE,然后简单做一个界面 [自行美化吧~]:

    NT199/NT158复制NT88加密狗破解软件工具教程
  8. 8

    解密按钮的事件代码按照程序里的写法糊进去就行:

    NT199/NT158复制NT88加密狗破解软件工具教程
  9. 9

    解密后,可以看到这样的内容:
    NTCode: 1234567890arctiler
    string_0: 3eee0d60fbb583e1bf33c6990d5f9e0d
    NTIv: azmap09
    顺便: SN.RegisterProductCode 的文字解密后是「desktop」,可理解为桌面版。

    此时,可以知道加密狗从 0 到 7 的内容是 azmap09 这一串字符了,记录下来:

    NT199/NT158复制NT88加密狗破解软件工具教程
  10. 10

    当这三个验证都通过后,程序就会调用 NTReadLicense 读取狗上面记录的内容;

    NT199/NT158复制NT88加密狗破解软件工具教程
  11. 11

    又看到了熟悉的 NTRead 函数。此时,读取的是 0x10(16) 开始的两个字节一直到 0x12 的位置。
    接着往下看,一系列的判断分支,根据分支内容判断授权版本。在此之前,调查一下程序定义的授权类型:

    NT199/NT158复制NT88加密狗破解软件工具教程
  12. 12

    目标很清晰,就是我们功能最多、最全的「企业版」。

    因此,把代码优化、精简一下:

    NT199/NT158复制NT88加密狗破解软件工具教程
  13. 13

    得出结论,加密狗授权信息是根据加密狗里面的数据以及 ApplicationConfig.Version 里面的数据判断的。而 Version 这个数据需要调查一下是 0、1 还是 2:

    NT199/NT158复制NT88加密狗破解软件工具教程
  14. 14

    而当我把数据库用工具打开时,却提示我数据库被加密或无效.. 走进去「GetSQLiteConn」看看怎么处理:

    NT199/NT158复制NT88加密狗破解软件工具教程
  15. 15

    熟悉的加密文字,扔到工具里解密看看,还真是这个「azmap09」。

    于是糊了几行代码,取得数据库储存的代码号是 0。因此如果想让版本为企业版,加密狗的内容必须是 -1 了。

    NT199/NT158复制NT88加密狗破解软件工具教程
    END

三、戏弄程序,编写加密狗

  1. 1

    首先摸清目标狗的导出函数:

    NT199/NT158复制NT88加密狗破解软件工具教程
  2. 2

    然后编写个相同的导出函数;我这里首先用的是 C++

    NT199/NT158复制NT88加密狗破解软件工具教程
    NT199/NT158复制NT88加密狗破解软件工具教程
  3. 3

    最后带上修正导出表的 def 文件:

    NT199/NT158复制NT88加密狗破解软件工具教程
  4. 4

    编译后更名 NT88.dll,扔进去

    NT199/NT158复制NT88加密狗破解软件工具教程
  5. 5

    再插狗,把数据写进去看看:

    NT199/NT158复制NT88加密狗破解软件工具教程
  6. 6

    软件正常启动,OK!就这样了

    END

注意事项

  • 使用 FASM 制作,生成的文件超级小。
  • 还有个原因就是 MSVC 编译器会加一些奇怪的导出函数不会改.. 太不美观了!
原作者:逆向开发技术网


推荐

  • QQ空间

  • 新浪微博

  • 人人网

  • 豆瓣

取消