我应该把断点放在哪里?(USB加密狗保护软件,可能是马克思)

逆向工程 调试 USB 加密狗
2021-07-08 16:22:57

我试图绕过一个名为 COSIMIR 的非常古老的程序的许可证验证过程。它使用 USB 加密狗(我们有)但是我无法访问它,因为它属于我的大学。

还有一个学生版的 COSIMIR,问题是它与我们在另一个版本中所做的任何事情都不兼容,所以我将工业版的每个文件都复制到我的膝上,并用 olly 修复了安装(因为很多事情丢失的地方)。我不得不这样做,因为安装此软件的人(因此是安装程序的人)不再在那里工作。

修好后,从头到尾都能执行,终于进入了激活失败的界面,问题是,我不知道从哪里开始。我的意思是,哪个.dll用于初始化加密狗?我的计划是避免它的初始化,看看我是否可以在不创建异常的情况下跳我的方式,这是我第一次用加密狗破解,所以我不知道这是否是正确的方法。这也是我弹出的屏幕:

在此处输入图片说明

但是,在看到它之后,我开始怀疑尝试绕过其他两种方法中的一种是否会更容易,顺便说一下,我 80% 确定它只是使用加密狗作为许可证。另外,我几乎可以肯定它使用了一个Marx Dongle,因为我们在我们获得许可的计算机后面附加的那个看起来和这个完全一样:

在此处输入图片说明

然而,COSIMIR 的安装指南所指示的,看起来完全不同。此外,即使我无法分离该加密狗(因为它被固定在 PC 上,主要是因为我们断开它时 PC 将停止工作,但我仍然可以在运行跟踪或类似内容中执行一些快速调试命令。

简而言之,我的主要问题是:如果我想避免 USB 访问,我应该将断点放在哪个库上?我的主要嫌疑人是:

  • 通信控制中心
  • COMBASE
  • UCRTBASE

我的次要嫌疑人是

  • 加密数据库
  • 密码

此外,我将按照 Nordwald 的建议尝试通过邮件联系公司,但即使我得到了积极的回应,我也会享受帮助,以用于学习目的。

3个回答

逆向工程一直是寻找合适的起点。这里有两个常用选项:

防止激活检查

出于激活目的,它很可能是搜索与激活相关的字符串的引用的最佳方式。在这种特殊情况下,我会使用像 BinaryNinja、IDA 或radare2 这样像样的反编译器来查找对

请攻击适当的许可证连接器或许可证服务器

这很可能会将您带到初始化此窗口的位置。从那里返回查看调用窗口创建之前检查的条件。

激活成功,失败时

这个有点棘手,因为很可能你必须在几个地方打补丁。尝试运行任何类型的激活,等到收到错误消息(例如“没有激活加密狗被攻击”),找到对该字符串的引用并从那里开始倒退。您很可能会发现是否连接了 USB 加密狗。修补它并从那里继续。可能会很乏味。

还:

不要破解软件。上述任何信息纯粹是教育性的。

您可以随时尝试联系公司:

地址:Am Hausbruch 7, 58239 Schwerte

电话:02304 44447

亲切的问候

用于软件保护的 USB 密钥通常不容易绕过,另一个答案中描述的技术可能不起作用。根据实施情况,USB 密钥可用于以下目的之一:

  • 执行加密计算,例如 RSA/AES。许可证密钥被发送到棒,响应由软件验证。在这种情况下,您可以只修补所有检查,但同样,不太可能仅为此使用棒;
  • 以加密形式存储一些关键数据。使用许可密钥对数据进行解密并发送给主机;
  • 存储一些关键的代码路径,与前面相同,只是程序在不解密和下载这些代码片段的情况下无法执行;
  • 在棒本身上执行部分代码该程序将其某些操作卸载到棒上。

所以,这一切都归结为实现。在某些情况下,丢失的代码/数据可以在主机软件中重新实现,这需要额外的 RE 工作。

根据他们的开发人员文档,它可能是以下 dll 文件之一:

mpiwin32.dll
CBIOSVB6.DLL
WebLM.dll
CBIOS4NET.dll
CBIOS4NET64.dll

访问加密狗的制造商网站并查看他们是否有开发人员描述其 API 的文档总是一个好主意。