Theos制作越狱插件

目的:给微信的设置页面添加一个按钮,点击弹出alert

效果图

hook前先分析一下

进行hook之前需要先对目标app进行分析,找到注入点。我们要对设置页面进行hook,就需要先知道这个页面的代码是在哪里实现的,可以使用cycript进行动态的分析。

  1. 打开微信,进入到设置页面
  2. 通过ssh 连接到设备
  3. 用命令ps -e ,显示当前运行的所有进程
  4. 找到微信进程 ../WeChat.app/WeChat,在该行的最前面会有进程序列号
    微信进程
  5. 用命令cycript -p 进程序列号,进入cy#状态
  6. UIApp.keyWindow.recursiveDescription().toString() 显示设置页面的视图层级关系。找到MMTableView这个应该就是页面的TableView视图,复制一下对象的地址0x148108000
    视图层级关系
  7. 输入[#0x148108000 nextResponder],会得到一个View的信息,记录下view的地址,在执行[#0x148ac6060 nextResponder],得到了#"<NewSettingViewController: 0x148c8d390>",看来NewSettingViewController就是实现设置页面的类了。

找到了目标文件,需要做的就是在NewSettingViewController执行viewDidLoad的时候,把右上角添加一个按钮就可以了,接下来就开始制作插件了。如果需要hook其他的方法可以先把app砸壳之后,用class-dump导出所有的的头文件,再选择需要hook的方法。


1、 Theos创建 tweak项目

Theos 一般都是在/opt/目录下,所以执行下面的命令创建一个Template

/opt/theos/bin/nic.pl

出现Template选择页面,输入5,选择iphone/tweak

NIC 2.0 - New Instance Creator
------------------------------
  [1.] iphone/application
  [2.] iphone/library
  [3.] iphone/preference_bundle
  [4.] iphone/tool
  [5.] iphone/tweak
Choose a Template (required): 5
Project Name (required): Hook
Package Name [com.yourcompany.hook]: com.Hook.hook
Author/Maintainer Name []: name
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: com.tencent.xin /*app的bundle id*/
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]: WeChat  /*程序进程中的名字,当tweak安装成功之后,需要kill掉WeChat*/
Instantiating iphone/tweak in hook/...
Done.

完整信息的填写之后,会生成以下的几个文件,可以大致看一没个文件的内容,里面的信息就是生成tweak项目时要填写的内容,接下里需要关注的就是Tweak.xmMakefile,会对其内容进行编辑

2、修改Makefile

修改完之后像这样,就是一些配置信息

# 设备IP
THEOS_DEVICE_IP=10.1.15.238  
ARCHS = arm64
SDKVERSION=9.3
TARGET = iphone:latest:10.0

include $(THEOS)/makefiles/common.mk

TWEAK_NAME = hook
hook_FILES = Tweak.xm

# 需要用到的框架
hook_FRAMEWORKS = UIKit Foundation 

# 指定生成动态库的版本
hook_LDFLAGS += -current_version 1.0 
hook_LDFLAGS += -compatibility_version 1.0

include $(THEOS_MAKE_PATH)/tweak.mk

after-install::
    install.exec "killall -9 WeChat"

3、制作Tweak.xm


%hook NewSettingViewController /* 对NewSettingViewController进行hook*/
- (void)viewDidLoad {
 %orig; /*执行原来的代码*/
 [[self navigationItem] setRightBarButtonItem:[[UIBarButtonItem alloc] initWithTitle:@"已关闭" style:UIBarButtonItemStylePlain target:self action:@selector(switchAuto:)]];
}

%new  /*添加新方法*/
- (void)switchAuto:(UIBarButtonItem *)barItem {
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"自动抢红包设置" message:@"请设置延迟时间" preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *openAutoAction = [UIAlertAction actionWithTitle:@"开启自动抢红包" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    }];
    UIAlertAction *closeAutoAction = [UIAlertAction actionWithTitle:@"关闭自动抢红包" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    }];
    UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
    }];
    [alert addAction:openAutoAction];
    [alert addAction:closeAutoAction];
    [alert addAction:cancleAction];
    [self presentViewController:alert animated:YES completion:^{
    }];
}
%end /*结束标示*/

4、制作安装插件

配置一下环境变量

export PATH=/opt/local/bin:$PATH
export PATH=/opt/local/sbin:$PATH
export THEOS=/opt/theos

打包安装插件

make package install

中间会让输入两次密码,就是你ssh 的密码。如果没有改的话默认是:apline。
成功之后在Cydia就会出现安装的插件。打开微信在设置页面的右上角就会出现一个按钮了。


最后

但是现在只有一个插件,只能在越狱的设备上进行安装,如果需要安装在非越狱设备上,就需要进行注入动态库了。注入需要用到yololib,这个是源码需要自己编译。

./yololib [binary] [dylib file]
./yololib [被插入dylib的二进制文件] [要插入的dylib]

注入成功之后进行打包签名就可以了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容