上一篇文章地址: iOS逆向工具之Theos(MacOS)使用介绍
本篇文章已经是介绍iOS逆向的第15篇文章了,小伙伴有什么疑问,可以联系我.
上一篇文章中介绍了tweak项目如何配置.
我们首先对theos进行配置,然后到简单创建tweak工程.本篇文章,我们会详细介绍tweak工程,包含Logos语法.
1.Tweak工程
通过上一篇文章,我们为了熟练掌握,创建过程.
我再次创建一个新项目,我们这里就命名为tututest,结合我前几篇文章提到的demo,通过hook,我们来完成一个简单的tweak工程.
-
1.
我们通过终端输入nic.pl
2.
Choose a Template (required):10
3.
Project Name (required):tututest
4.
Package Name [com.yourcompany.tututest]:包名:com.first.tututest
5.
Author/Maintainer Name [lk]:作者 tutu
6.
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]:回车默认,稍后再plist文件中修改即可
7.
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]:回车默认
8.
我创建好了,你创建好了没?
我们打开看一下我们新创建的项目
- 我们看下目录结构
1.
Makefile
2.
Tweak.x
3.
control
4.
tututest.plisit
Makefile
MakeFile 文件
: 指定工程用到的文件,框架,库等信息,将整个过程自动化.
INSTALL_TARGET_PROCESSES = SpringBoard
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = tututest
tututest_FILES = Tweak.x
include $(THEOS_MAKE_PATH)/tweak.mk
这是tweak创建完成后,Makefile自动生成的框架,库等信息格式
1.INSTALL_TARGET_PROCESSES = SpringBoard
目标安装的项目
2.include $(THEOS)/makefiles/common.mk
固定写法,不要更改
3.TWEAK_NAME = tututest
tweak的名称
4.tututest_FILES = Tweak.x
tweak源文件,多个文件以空格分隔
5.include $(THEOS_MAKE_PATH)/tweak.mk
通过include命令指定不同的.mk文件
除了上面的信息格式,我们还可以添加一下信息
我们如何通过进行指定SDK?
TARGET = iPhone:latest:8.0
添加到Makefile我们如何导入framework?
tutu_FRAMWORKS = UIKit
添加到Makefile我们如何指定处理器架构
ARCHS = armv7 arm64
添加到Makefile我么如何链接Mach-O对象
tutu_LDFLAGS = -lx
注意
-lx 代表链接libx.a或libx.dylib,即给x加上lib的前缀,以及.a或.dylib的后缀,可以根据自己的项目进行调整
Tweak.x
我们生成Tweak.x项目,之前记得是xm项目,一般默认的是Tweak.xm
xm
中的x代表这个文件支持Logos语法,
x
如果后缀名是单独的x,说明源文件支持Logos和C语法;
xm
如果后缀名是xm,说明源文件支持Logos和C/C++语法.
tututest.plist
iOS正向开发者,对于plist文件是很熟悉了.
这里的plist文件,用于指定需要注入的目标文件的Bundle ID .
control
指定deb包的一些信息,包括名字,描述,版本号等
2.编写属于我们的工程
- 我开始做一些准备
我用前几篇文章使用的TEST demo为例,很简单的demo
ViewController
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic,strong)UIButton *revealBtn;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.view addSubview:self.revealBtn];
}
-(UIButton*)revealBtn{
if (!_revealBtn) {
_revealBtn = [UIButton buttonWithType:UIButtonTypeCustom];
_revealBtn.frame = CGRectMake(100,100, 100,40);
_revealBtn.backgroundColor = [UIColor redColor];
[_revealBtn setTitle:@"测试" forState:UIControlStateNormal];
[_revealBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[_revealBtn addTarget:self action:@selector(revealClick) forControlEvents:UIControlEventTouchUpInside];
}
return _revealBtn;
}
-(void)revealClick{
NSLog(@"hello");
}
@end
我们找到Mach-o文件,通过class-dump导出类头文件
以上操作,可以看几篇文章,在这里就不再介绍了.我们看一下ViewController的头文件
#import "UIViewController.h"
@class UIButton;
@interface ViewController : UIViewController
{
UIButton *_revealBtn;
}
- (void).cxx_destruct;
@property(retain, nonatomic) UIButton *revealBtn; // @synthesize revealBtn=_revealBtn;
- (void)viewDidLoad;
-(void)revealClick;
@end
- 以上步骤完成后,我们打开tutu.plist文件,通过指定plist文件,对应用修改
- 我们在来编写Tweak.x文件
%hook ViewController
-(void)revealClick{
%orig;
NSLog(@"tweak first one");
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"温馨提示" message:@"我的第一个tweak工程创建成功了" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消",nil];
[alertView show];
}
%end
我们通过hook ViewController中的revealBtn按钮的点击方法revealClick,
%orig
执行被勾住(hook)的函数的原始代码
我们在加一个输出 tweak first one
在点击的时候,我们再加一个提示
- 我们编辑Makefile文件
INSTALL_TARGET_PROCESSES = SpringBoard
export THEOS_DEVICE_IP = localhost
export THEOS_DEVICE_PORT = 2222
ARCHS = armv7 arm64
TARGET = iPhone:latest:8.0
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = tututest
tututest_FILES = Tweak.x
tututest_FRAMWORKS = UIKit
tututest_CFLAGS = -fobjc-arc
include $(THEOS_MAKE_PATH)/tweak.mk
我们添加几条信息
export THEOS_DEVICE_IP = localhost
export THEOS_DEVICE_PORT = 2222
tututest_FRAMWORKS = UIKit
-
这些都配置好了,我们进行编译
我们这里已经编译成功
- 我们接着安装deb 包
deb已经安装成功
- 我们看下Cydia,看下我们是否安装成功了.
我从Cydia中看到,tututest已经安装成功了.
- 我们打开原TEST项目,进行点击操作
我们通过安装libimobiledevice
进行查看应用日志输出.
我已经安装好了,这里不再详细介绍如何安装.可以自己搜索资料安装.
- 我们先看下日志打印的信息
我们点击一下测试按钮看一下
我们可以点击之后输入了 hello ,tweak first one的输出信息
我们看到了我们添加的AlertView.
到这里我们的第一个tweak项目完成了.
总结
本篇文章介绍了tweak项目结构,编写一个hook的代码,修改我们想要的内容.
下一篇会介绍Logos语法的使用.
刚才的这段代码
%hook ViewController
-(void)revealClick{
%orig;
NSLog(@"tweak first one");
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"温馨提示" message:@"我的第一个tweak工程创建成功了" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消",nil];
[alertView show];
}
%end
我们是通过Logos语法,实现的hook,勾住我们需要hook的类,找到类中的方法,我们可以自己动手修改.
感谢大家的关注.
今天有个小伙伴看到文章,问我有没有逆向群,我回复了他.
iOS逆向群: 755898688
群里会上传iOS逆向的软件.
如果你看到文章,你也可以根据链接地址自己下载.
非常欢迎大家留言.