-
-
[原创]通过逆向的方法隐藏Sublime Text标题栏的UNREGISTERED
-
发表于:
2020-6-14 11:16
4865
-
[原创]通过逆向的方法隐藏Sublime Text标题栏的UNREGISTERED
0. 预备
相关操作仅供学习,请勿用于非法操作,否则后果自负!
a. 硬件:MacBook或者安装macOS的虚拟机;
b. 最少软件:insert_dylib (直接跳转第5步下载编译好的静态库,然后通过第6步的注入进行操作);
c. 全文涉及软件:ida、insert_dylib、Sublime Text、otool、class-dump、svn
d. 版本号Sublime Text 3.2.1 Build 3207
1. 介绍
没有购买license的Sublime Text编辑器,在右上角会显示一个字符串“UNREGISTERED”,刚好最近在macOS复习一些逆向知识,准备练练手隐藏字符串“UNREGISTERED”。
2. 导出头文件
先用class-dump导出头文件:
拖文件夹入Sublime Text,不多的几个文件:
3. 静态分析
没有找到isRegister/isBuy类似的简单方法,说明有比较复杂的防破解算法,应该要花好些功夫才能搞定。因为相应的字符显示在标题栏,先静态分析看看有没有处理标题栏相关的操作。
通过关键字符串“UNREGISTERED”找到处理的逻辑,前置算法确认v19的值,然后新建NSTextField控件v22,一并传入set_title_accessory_style方法,然后通过ns_title_bar_view获取到标题栏控件,再通过-(void)addSubview方法把新建v22做为子控件添加到标题栏上。
如此分析到这里就比较简单了,只需要编写一个tweak,通过类似ns_title_bar_view的算法找到标题栏控件,然后把其中字符值为“UNREGISTERED”的子控件移除即可。
分析ns_title_bar_view可知,标题栏是一个NSTitlebarView控件,它是NSTitlebarContainerView的子控件。
4. 编写tweak
xcode新建masOS平台的framework,为了hook Objective-C方法,我们还需要引入一个框架JRSwizzle,我们项目结构如下:
找到标题栏的算法如上,由于Sublime Text可以创建多窗口,所以我们不仅仅要实现启动的时候移除相关控件,新建了窗口我们也要对应移除一次,所以需要找一个经常被调用的OC方法,经过试验发现-[PXWindow update]被频繁调用,所以我们在此处进行移除相关控件的操作。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)