zwo 发表于 2019-2-3 11:38

运行时注入方式破解最新Mac版010 Editor v9.0.1

因为app是用QT写的,没办法通过原生控件NSControl下断点的方法找到关键函数,所以先从字符串入手。首先根据购买的关键词buy,对交叉引用到的所有函数下断点,一路追溯,定位到了核心逻辑函数 sub_10036c9b0,如图1


图1

对这个函数的地址下个断点:
(lldb)b *0x10036c9b0


配合对照hopper生成的控制流程图,可以看出这是个相当复杂的逻辑,有接近100个逻辑块,幸好每个关键节点都会通过lea指令加载字符串,且字符串未经加密,简直就是送分题!


我们可以通过lldb一直跟下来。
不难通过图2发现两处核心函数,并且如果这两函数返回特定的值,程序就会一直通往认证成功。
第一个函数sub_1000e9760为在线认证,返回0xe7后,变为本地认证。
第二个函数sub_1000e9680为认证状态,返回0xdb后,为已认证。这个返回值也跟前面的v8版本认证一致。

图2

在写补丁前,完全可以通过调试器通过更改寄存器来走一遍认证成功的流程以验证验证。
以sub_1000e9760为例,在进入函数后,立即返回正确值:
(lldb)thread return 0xe7

在逻辑验证通过后,最后编写代码hook掉原函数。

void override(void) __attribute__ ((constructor));

int sub_1000e9680_tweak(int arg0, int arg1){
        return 0xdb;
}

int sub_1000e9760_tweak(int arg0, int arg1, int arg2){
        return 0xe7;
}

void override()
{
        unsigned longsub_1000e9680 = image_vmaddr_slide(0) + 0x1000e9680; //auth status
        unsigned longsub_1000e9760 = image_vmaddr_slide(0) + 0x1000e9760; // network
        int (*orig_fun)(int arg0, int arg1, int arg2);
   
    mach_hook_ptr((void*)sub_1000e9680, (void*)&sub_1000e9680_tweak, (void**)&orig_fun);
    mach_hook_ptr((void*)sub_1000e9760, (void*)&sub_1000e9760_tweak, (void**)&orig_fun);
}

其中 image_vmaddr_slide 为计算基地址便宜的函数,0为第1个镜像,也就是app主程序。具体实现就不赘述了,搜下就有。
mach_hook_ptr为函数指针hook的操作,原函数保存在orig_fun指针中,由于我们不需要再调原函数了,所以两个都可以用这个来保存。如果大家对mac的函数hook感兴趣的,可以参考下
https://gist.github.com/ytlvy/db42fdd7b2a6b5f24862

通过clang编译成dylib,得到EditorHack.dylib。
$clang -arch x86_64 -dynamiclib EditorHack.c -o ./EditorHack.dylib

使用方法有两个,第一种:环境变量注入
命令行中直接运行以下指令
$DYLD_INSERT_LIBRARIES=./EditorHack.dylib /Applications/010\ Editor.app/Contents/MacOS/010\ Editor

第二种,通过注入原app内部的其它动态库实现。个人喜欢注入其它动态库,因为往往这些动态库往往得不到很好的保护。当然你也可以通过insert_dylib注入主程序自身。我选择的是QT动态库的其中一个libquazip.1.dylib。
如下图,在/Applications/010\ Editor.app/Contents/Frameworks目录下,把EditorHack.dylib放入,并替换libquazip.1.dylib即可。

通过以下命令可以看出,对libquazip.1.dylib做的改变是去掉了签名,改为通过load command加载我们的补丁库。
$ diff -u <(otool -hl libquazip.1.dylib.bak ) <(otool -hl libquazip.1.dylib)

--- /dev/fd/63        2019-02-03 11:30:46.000000000 +0800

+++ /dev/fd/62        2019-02-03 11:30:46.000000000 +0800

@@ -1,7 +1,7 @@

-libquazip.1.dylib.bak:

+libquazip.1.dylib:

Load command 18

-      cmd LC_CODE_SIGNATURE

-cmdsize 16

-dataoff 219136

- datasize 12304

+          cmd LC_LOAD_DYLIB

+      cmdsize 56

+         name @loader_path/EditorHack.dylib (offset 24)

+   time stamp 0 Thu Jan1 08:00:00 1970

+      current version 0.0.0

+compatibility version 0.0.0


自此,010 Editor成功破解。因为函数偏移计算的关系,附件中的破解补丁只适用于9.0.1。
附上补丁文件和相关分析的逻辑图。

chenjingyes 发表于 2019-2-3 23:58

希望楼主把最新版hopper破解了并出教程:lol

bachelor66 发表于 2019-2-3 13:48

MAC版的不错啊                                                                        

hackerxingxing 发表于 2019-2-3 17:23

春节技术贴,赞一波!

銀鈅 发表于 2019-2-3 21:16

谢谢楼主分享

泰囧熊 发表于 2019-2-3 21:58

楼主大神,摩拜中。。。。

hedy16 发表于 2019-2-3 23:35

这个是直接破解的,感谢分享了

axainglaoban 发表于 2019-2-4 11:03

谢谢楼主分享

wangxd 发表于 2019-2-4 14:03

谢谢楼主分享

如果我徘徊 发表于 2019-2-6 15:06


谢谢楼主分享
页: [1] 2
查看完整版本: 运行时注入方式破解最新Mac版010 Editor v9.0.1