IOS Theos Tweak 之 HelloWorld

一、目标

Theos是什么?

是一套跨平台的开发工具套件,不仅可以开发Ios,Mac、Windows和Linux也可以的哦,开源免费。

Tweak是什么?

可以理解成动态链接库,有搞过Windows下dll注入的同学应该可以秒懂了。Android的同学可以把它理解成IOS下的Xposed。

HelloWorld是什么?

是萌新程序员的信仰,在一个平台写下HelloWorld,证明我来了。

二、步骤

Mac下安装Theos

1、检测是否有 /opt目录,没有就新建一个

1# 先切换到root权限 2sudo su 3cd / 4mkdir opt 5cd /opt

2、 在新建的/opt目录下clone项目源码

git clone --recursive https://github.com/theos/theos.git

3、打开 ~/.bash_profile文件,添加以下四行

1# theos 2export THEOS=/opt/theos 3export PATH=$THEOS/bin:$PATH 4# iPhone手机的ssh地址 5export THEOS_DEVICE_IP=localhost 6export THEOS_DEVICE_PORT=2222

4、按照 之前的文章 Ios逆向环境搭建 (一) 配置好 SSH。

是的就这样就够了。 (可能还需要 ldid 和 dpkg-deb,用brew装下)

HelloWorld

开始创建一个 Tweak模板

1# 创建模板命令 nic.pl 类似新建一个空工程 2nic.pl 3------------------------------ 4 [1.] iphone/activator_event 5 [2.] iphone/application_modern 6 [3.] iphone/cydget 7 [4.] iphone/flipswitch_switch 8 [5.] iphone/framework 9 [6.] iphone/ios7_notification_center_widget 10 [7.] iphone/library 11 [8.] iphone/notification_center_widget 12 [9.] iphone/preference_bundle_modern 13 [10.] iphone/tool 14 [11.] iphone/tweak 15 [12.] iphone/xpc_service 16# 选择 11 iphone/tweak ,我之前装的是 11, 最新的是 15 17Choose a Template (required): 11 18# 输入工程名称 19Project Name (required): helloworld 20# 输入工程包名 21Package Name [com.yourcompany.helloworld]: com.fefei.helloworld 22# 作者必须是我了 23Author/Maintainer Name [fenfei]: fenfei 24# 要hook的程序包名,我们这里正好要hook springboard 25[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: 26# 开发完成之后,安装好了我们的tweak,要重启的app名称,一般都是我们要hook的app的主程序名称,这里是 SpringBoard 27[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]: 28Instantiating iphone/tweak in helloworld/... 29Done.

这就搞定了

一共生成了4个文件

  • Makefile 编译的脚本
  • Tweak.xm 源代码
  • control 工程描述
  • helloworld.plist 要hook的App列表

迫不及待了,我们先写代码吧

1#import <SpringBoard/SpringBoard.h> 2 3// hook 了 SpringBoard类的 applicationDidFinishLaunching 方法, 4// 具体现象就是 进入ios系统桌面之前弹出提示框 5%hook SpringBoard 6 7-(void)applicationDidFinishLaunching:(id)application { 8 %orig; 9 10 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Welcome" 11 message:@"456 Hello world,你好世界" 12 delegate:nil 13 cancelButtonTitle:@"确定" 14 otherButtonTitles:nil]; 15 [alert show]; 16 [alert release]; 17} 18 19%end 20 21// 初始化执行 22%ctor{ 23 NSLog(@"fenfei: 666 ctor!!!"); 24 %init(_ungrouped); 25}

编译和安装

make package install

安装后会自动重启SpringBoard,然后就会弹出我们的HelloWorld

run.png

我们再说说这个 NSLog ,这个很有用的,类似Android的 __android_log_print。 但是它从哪看呢?

Mac系统有个叫 控制台 的程序,可以看到每个设备输出的Log。

log.png

木问题,收工。

三、总结

玩Ios难点在哪? 不在于Arm汇编,而在于没有设备。你起码得需要一个Mac电脑和Iphone。

不建议装黑苹果,升级和鼓捣太麻烦了。 某鱼搞个二手Mac Pro最低有2k的, Iphone搞个6或者6s, 有3-400的。 Mac电脑系统起码要能装 macOS Mojave 10.14.x 。 Iphone要无锁的,最好国行,系统就所谓了,最好低点 13以下。这样 Xcode 11.3也能玩。

ffshow.jpeg

醉后不知天在水,满船清梦压星河

TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。

关注微信公众号: 奋飞安全,最新技术干货实时推送

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

JS 苹果手机日期显示NaN问题

问题描述newDate("2019122910:30:00")在IOS下显示为NaN原因分析带的日期IOS下存在兼容问题解决方法字符串替换letdateStr"2019122910:30:00";datedateStr.repl