吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11972|回复: 17
收起左侧

[MacOS逆向] 运行时注入方式破解最新Mac版010 Editor v9.0.1

  [复制链接]
zwo 发表于 2019-2-3 11:38
因为app是用QT写的,没办法通过原生控件NSControl下断点的方法找到关键函数,所以先从字符串入手。首先根据购买的关键词buy,对交叉引用到的所有函数下断点,一路追溯,定位到了核心逻辑函数 sub_10036c9b0,如图1
20.png
1.png
图1

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


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

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

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

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

[C] 纯文本查看 复制代码
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 long  sub_1000e9680 = image_vmaddr_slide(0) + 0x1000e9680; //auth status
	unsigned long  sub_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即可。
3.png
通过以下命令可以看出,对libquazip.1.dylib做的改变是去掉了签名,改为通过load command加载我们的补丁库。
[Bash shell] 纯文本查看 复制代码
$ 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 Jan  1 08:00:00 1970

+      current version 0.0.0

+compatibility version 0.0.0


4.png
自此,010 Editor成功破解。因为函数偏移计算的关系,附件中的破解补丁只适用于9.0.1。
附上补丁文件和相关分析的逻辑图。
010.zip (921.33 KB, 下载次数: 121)

免费评分

参与人数 2威望 +1 吾爱币 +8 热心值 +1 收起 理由
Liang856 + 1 热心回复!
Hmily + 1 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

chenjingyes 发表于 2019-2-3 23:58
希望楼主把最新版hopper破解了并出教程
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

谢谢楼主分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 14:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表