mac 软件破解

2026-07-30

提前声明

本文的操作流程中的内容,部分参考 https://cloud.tencent.com/developer/article/1856253open in new window 文章的内容。使用了 MacOS 的 64位 ARM 程序,16.0.4 版本。

安装软件查看试用过期时间

安装完成后打开about查看试用过期时间

  • win: 菜单栏 Help -> about
  • mac: 菜单栏 010 Editor -> About 010 Editor

试用剩余天数在About页面左上角,安装完成后为30天

尝试注册查看返回内容

点击about页面中的register要求输入正确的用户名与密码。输入错误会弹出Messagebox,内容为Invail name or license. Please enter your name and license exactly as given when you purchased 010 Editor (make sure no quotes as included)

逆向环境

使用 IDA Pro 7.2 或更高的版本,本文使用的是 9.1 版本。并安装keypatch插件。

安装Keypatch插件

需要保证 IDA 的 python 的环境里 keypatch 插件可以顺利运行。

  • 确认 IDA 的 python 版本和解释器路径。在 IDA 的控制台使用以下命令确定解释器信息

    import sys
    print(sys.version)
    print(sys.prefix)  # 获得解释器路径
    
  • 在 IDA 的 python 环境中安装 keypatch 插件的依赖

    # 上一步获取到的 python 路径
    /path/to/ida/python -m pip install keystone-engine six
    
  • 将 keypatch.py 放入 IDA 的插件文件夹 plugins 内。注意 keypatch 版本

    • 官方版本open in new window 为 python2 的代码,仅支持如 IDA 7.2 等较早版本
    • IDA 9.0 等新版本使用 python3 解释器,需要网上搜索 py3 版本的修改版 keypatch.py
  • 此时重启 IDA ,可在菜单栏 Edit 内看到 keypatch 选项

破解流程

1. 定位注册逻辑位置

  • 通过 IDA 打开 010 Editor 的可执行文件。Win 版本的可执行文件为 010 Editor.exe,Mac 的可执行文件为 /Applications/010\ Editor.app/Contents/MacOS/010\ Editor

  • 定位字符串声明位置:定位注册逻辑的所在。通过菜单栏 search -> text 搜索Invail name,或者打开字符串窗口,手动定位字符串 搜索注册失败的字符串

  • 定位字符串引用位置(即注册逻辑的位置):得到声明位置后,被程序调用的位置所出的函数即为注册的主要逻辑。win可直接定位到汇编引用该字符串位置。mac会定位到定义处,右键 xref-to 或快捷键 X 打开交叉引用窗口,即可找到引用该字符串的函数,在sub函数的文本视图里查找引用位置 定位调用处

2. 寻找注册成功的判断逻辑

  • 通过 Tab 或 F5 进行反编译,阅读反编译代码了解注册的逻辑。由于注册失败字符串处于 else 分支,可得知通过 if 进行是否成功注册的判断

  • 通过查看 if 的其他分支发现注册成功的字符串为License activated. This license entitles to you:。有以下反编译伪代码可知 sub_xxxxxxx 即为注册是否成功的判断函数。只需让该函数返回值 v21 的值是 219,十六进制即为 db

3. 修改注册判断函数的返回值

  • 查看注册成功判断函数的流程,发现内部有多个分支。最终都从同一段代码 loc_1000F2E8,返回到上一层函数,即注册逻辑

  • 该函数开头地方跳转到 loc_1000F2F8,内部调用了 sub_1000F282C

  • 该函数的多个分支就是根据 sub_1000F282C 的返回值确定,每个分支最终都会进入 loc_1000F2E8。由于 loc_1000F2E8 内未设置 W0 的值,即每个分支内会设置 W0 的值作为注册判断函数的返回值

  • 根据上图中的汇编代码,如果 sub_1000F282C 的返回值为 0x2D,则进入 loc_1000F2724,此时注册判断函数返回 0xDB (即 219,注册成功的条件)。因此只需要保证顺利进入 loc_1000F2724 即可

  • 修改方案共两种

    • 直接将 BL sub_1000F282C 调用函数的语句修改成无条件跳转 B loc_1000F2724,使其一定进入 loc_1000F2724 分支
    • 不调用 sub_1000F282C,而是直接将 #0x2D 写入 W0 作为调用后的返回值,从而让后续 CMP W0, #0x2D 一定为相等,从而实现 B.EQ loc_1000F2724 必定进入该分支
  • 此处使用的是方案二。选中BL sub_1000F282C处,通过菜单栏 Edit -> Keypatch -> Patcher 将汇编代码改为 CMP W0, #0x2D

  • 菜单栏 Edit -> Patch program -> Apply Patches to input file ,勾选创建备份文件。即可导出修改后的文件,并备份修改前的文件

查看结果

  • 将修改完成后的可执行文件放入原始目录中。MacOS 有额外注意事项
    • 文件的可执行权限:执行chmod +x
    • 直接运行会崩溃,查看崩溃报告发现是签名不一致 Termination Reason: Namespace CODESIGNING, Code 2, Invalid Page。是 Apple Silicon(ARM64)架构的内核会逐页校验其 SHA-256 校验和,系统实施了非常严格的代码签名策略。必须清除原有签名并重新进行临时自签名(Ad-Hoc Signing),才能在本地正常执行
      sudo codesign --force --deep --sign - "/Applications/010 Editor.app"
      
    • 清除隔离属性(Quarantine)。如果重新签名后打开提示“文件已损坏”或被 Gatekeeper 拦截,执行以下命令移除安全属性
      sudo xattr -rd com.apple.quarantine "/Applications/010 Editor.app"
      
  • 打开About,此时剩余天数为0天
  • 点击注册,随意输入用户名与密钥,将提示注册成功