2022-08-07赢咖星辉娱乐平台注册app

今天这篇文章的主题是“赢咖星辉娱乐平台注册地址程序”。我将向您展示如何破解程序 使用 IDA 7.2 和 Hiew 破解 macOS 程序。

有关该主题的更多信息:如何破解 MSI 程序

 

在开始时,我们将简要讨论我们将要打破的具体内容。

macOS 程序是如何被赢咖星辉娱乐平台注册地址入侵的

我们已经知道当前版本的 Windows 操作系统的所有可执行文件和库都称为 EXE / DLL,并具有 MZ-PE 结构。MacOS 使用 Mach-O 格式(Mach object 的缩写),它是 macOS 从 Unix 继承的 a.out 格式的后代。

大家都知道,苹果有时喜欢从一个系列的处理器切换到另一个系列,正因为如此,程序的架构也发生了变化。从 PowerPC 开始,Apple 在 2000 年代中期转向英特尔,此后不久,该公司决定转向 ARM 平台。

为了让用户减少这样的抛出,采用了Fat二进制多处理器格式,它可以同时包含多个处理器的代码。这样的模块可以在 Intel 和 ARM 下工作。

什么是 Mach-O?通常,该模块由三个区域组成:

  1. 第一个区域(标题)提供有关二进制文件的信息:处理器类型、字节顺序、加载指令数等。
  2. 第二个区域是加载命令——这可以说是目录,它描述了段的位置、动态符号表等。所有下载命令都包含元数据,例如命令类型、命令名称、二进制文件中的位置。
  3. 第三个区域是数据,通常是目标文件的最大部分。这部分包含代码和其他信息。

一个多处理器模块可以由几个为不同处理器(通常是 i386 和 x86_64、ARM 或 ARM64)量身定制的普通 Mach-O 模块组成。模块的结构非常简单——在描述模块中包含的 Mach-O 块的 Fat 头之后,有这些块的代码,位于一行中。

作为本文的一部分,我不会深入介绍这种格式的所有部分和字段。如果你有兴趣,你可以自己google一下。

使用 IDA 和 Hiew 破解 macOS 程序

所以,既然你已经对理论有了足够的了解,让我们看一个实际的例子。我安装了一些插图插件,需要在试用结束后放弃自杀。

我们还假设我们无法访问安装此插件的 macOS 计算机,就像手头的另一台 macOS 计算机一样 - 只有覆盖文件的能力。

我们在所选插件的文件夹中找到子文件夹 Contents \ MacOS,并在其中找到可执行模块。在我们的例子中,这是 Fat Mach-O 文件动态库,可以通过签名 CA FE BA BE 来理解。

英特尔

我们将文件加载到 IDA Pro 中:我们将提供两种(或更确切地说是三种)加载此文件的方式:Fat Mach-O 文件,1.X86_64 和 Fat Mach-O 文件,2.ARM64。第三个选项,二进制文件,我们不感兴趣。

让我们从所有 Windows 用户最简单、最熟悉的选项开始:选择 Intel X86_64。浏览完函数名称列表后,我们找到了名称 checkPersonalize2_tryout

由于我们有一个试验,这个功能很可能是对其有效性的测试。让我们看看它是从哪里调用的 - 是的,从一个名称更可疑的函数 _checkUser

由于我们无法将程序加载到调试器中并到达这一点,因此我们尝试猜测哪个版本的 eax 返回值更适合我们。方括号中的表达式 byte ptr [rax+63Dh] 和 qword ptr [rax+648h] 就像设置对象的某些结构或属性的字段一样。

再看高一点的代码,我们将看到以下构造:

通过程序的行为,我们记得加载程序时突然弹出的 About 对话框,表示试用期已过期,而地址 [rbx + 63Dh] 处的字节的非零值启动绕过这个分支的。

 

事实证明,这个分支是正确的,其中这个字节从偏移量 __text:0000000000006A76 开始被赋值为 1(最初这个字节被初始化为 0)。事不宜迟,我们只需在调用 checkPersonalize2_tryout 过程之前设置一个无条件跳转到 loc_6A76 的整个代码段:

 

手臂

因此,对于负责 x86 的代码部分,我们有点想通了,让我们尝试对 Arm 部分做同样的事情。再次将此模块加载到 IDA 中,这次选择 Fat Mach-O 文件,加载时选择 2.ARM64 选项。

我们看到_checkUser和checkPersonalize2_tryout函数也出现在这部分代码中,上面描述的翻译成Armov汇编器的调用站点是这样的:

仔细检查这段代码后,我们看到在 Armov 代码中,地址 [X8,#0x3A0] 处的字节类似于 [rax+63Dh] 字段,因为在 checkPersonalize2_tryout 时为该字节分配了一个被成功调用。因此,为了不重新发明轮子,我们以与之前相同的方式进行 - 我们通过在其前面插入无条件跳转到 loc_7194 来缩短一段代码:

 

插件补丁

现在我们已经弄清楚了要更改的内容和位置,我们需要进行同样的更改。我们手头最简单的就是小型 DOS 十六进制编辑器 Hiew,它除了简单的字节编辑外,还可以为 Intel 甚至 ARM 反汇编和汇编代码。

不幸的是,他对我们需要的 ARM64 和 Fat Mach-O 一无所知,因此您将不得不在实践中使用上述理论进行一些手工工作。

打开模块标题,我们看到其中有两个 Mach-O 部分,绝对偏移量为 8000h 和 17С000h。因此,CF FA ED FE 部分的签名位于第一个偏移量处,处理器代码 07 00 00 01 是 Intel 部分。在第二个偏移处,签名相同,但处理器代码不同 0C 00 00 01 - 这是 ARM。

模块头

我们将 IDA 的偏移量添加到 8000h - 6A5Dh,我们得到 EA5Dh - 英特尔部分中第一个补丁的偏移量。我们通过 Ctrl-F1 切换到 64 位模式并编辑所需的 jmp。现在让我们对 armovskaya 部分进行更改。这里有一个轻微的复杂性。我们找到了补丁17С000h+716Ch=18316Ch的偏移量,但是通过Shift-F1切换到ARM反汇编模式时,代码完全不同,Hiew不理解当前的ARM64。

让我们尝试手动计算和更正所需的操作码。我们打开规范(如果你很懒惰搜索,你可以在 IDA 中查找相邻命令)——无条件跳转命令的操作码 14h(命令的最后一个字节)。第一个字节是 32 位指令中跳转地址的偏移量。我们考虑: 7194h-716Ch=28h 我们除以 4 个字节,我们得到 0Ah - 转换所需的偏移量。结果,更正后的命令代码如下所示:

所以,我们已经修补了模块的两个部分,但现在高兴还为时过早。当用修改后的模块重写旧模块时,程序会产生错误。这是可以理解的:macOS 是由偏执狂制造的,每个模块都必须签名,当任何字节发生变化时,签名当然会飞起来。幸运的是,偏执狂让我们可以选择从终端重新签署 mac 上的模块。为此,更换模块后,转到终端并键入以下命令:

理论上,您通常可以通过 stripcodesig 甚至在复制到赢咖星辉娱乐平台注册app之前删除签名,但这并不总是有效。例如,从 macOS Catalina 开始,您可能需要通过在终端中键入以下命令来从隔离区中删除应用程序:

不幸的是,赢咖星辉娱乐平台注册app根本无法访问主体——至少你将不得不重写并签署修补模块。当然,也可以重新打包插件安装镜像,或者尝试在 Windows 下从 macOS 安装虚拟机,但这些方法要复杂得多。我们成功地完成了这项任务,最重要的是——用最少的努力。