iOS逆向:Theos与Tweak基础篇
2020-06-30 本文已影响0人
码小菜
目录
一,环境配置
二,实战练习:SpringBoard(桌面)
三,实战练习:喜马拉雅
四,实战练习:微信
一,环境配置
1,安装签名工具ldid
- 成功
- 报错
- 解决
1>
sudo chown -R `whoami`:admin /usr/local/bin
2>sudo chown -R `whoami`:admin /usr/local/share
2,修改环境变量
- 编辑配置文件:
vim ~/.bash_profile
- 在文件中加入两行:
export THEOS=~/theos
,export PATH=$THEOS/bin:$PATH
- 让修改立即生效:
source ~/.bash_profile
- 查看是否生效:
echo $THEOS
,echo $PATH
3,配置theos
- 下载:
git clone --recursive https://github.com/theos/theos.git $THEOS
- 修改
~/theos/makefiles/package/deb.mk
文件
1>将
_THEOS_PLATFORM_DPKG_DEB_COMPRESSION
的值修改为gzip
2>将1替换为2
1,$(ECHO_NOTHING)COPYFILE_DISABLE=1 $(FAKEROOT) -r $(_THEOS_PLATFORM_DPKG_DEB) -Z$(_THEOS_PLATFORM_DPKG_DEB_COMPRESSION) -z$(THEOS_PLATFORM_DEB_COMPRESSION_LEVEL) -b "$(THEOS_STAGING_DIR)" "$(_THEOS_DEB_PACKAGE_FILENAME)"$(ECHO_END) 2,$(ECHO_NOTHING)COPYFILE_DISABLE=1 $(FAKEROOT) -r dpkg-deb -Zgzip -b "$(THEOS_STAGING_DIR)" "$(_THEOS_DEB_PACKAGE_FILENAME)" $(STDERR_NULL_REDIRECT)$(ECHO_END)
二,实战练习:SpringBoard(桌面)
1,目标:移除红色标记
2,查询所需信息
- 查询
AppId
- 查询控件所属类
- 查询需要
hook
的方法
1>用
ps -A
找到可执行文件2>用
class-dump
导出所有.h
文件3>在
SBIconParallaxBadgeView.h
文件中找到有效的方法
3,新建tweak项目
-
sbTweak
:项目名称 -
com.yj.sb
:项目bundleId
-
com.apple.springboard
:桌面APP的bundleId
4,在Makefile文件中添加环境变量
-
THEOS_DEVICE_IP
:本机IP -
THEOS_DEVICE_PORT
:本机与iPhone通信的端口
5,在Tweak.x文件中编写hook代码
6,编译,打包和安装
- 编译
- 打包
- 安装(会自动重启
SpringBoard
)
7,安装成功
- 爱思助手
Cydia
8,最终效果
三,实战练习:喜马拉雅
1,目标:移除暂停时出现的广告
2,查询所需信息
- 查询
AppId
- 查询控件所属类
- 查询需要
hook
的方法
3,新建tweak项目
4,在.bash_profile文件中添加环境变量(避免每个项目都添加一次)
5,在Tweak.x文件中编写hook代码
6,编译,打包和安装
7,最终效果
四,实战练习:微信
1,目标:在发现页添加两个功能
2,hook代码
#define YJSwitchKey @"yj_switch_key"
#define YJUserDefaults NSUserDefaults.standardUserDefaults
// 该路径需要与iPhone上的一致,这样图片就能存储到iPhone上对应路径下
#define YJImagePath(name) [NSString stringWithFormat:@"/Library/Caches/YJWechat/%@", name]
@interface FindFriendEntryViewController
// 必须提前声明,否则调用此方法会报错
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
@end
%hook FindFriendEntryViewController
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// %orig表示调用原始的方法
return %orig + 1;
}
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section {
NSInteger totalSection = [self numberOfSectionsInTableView:tableView];
// 如果section不是新增的,就直接使用原始方法的实现
if (section != totalSection - 1) {
return %orig;
}
return 2;
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSInteger totalSection = [self numberOfSectionsInTableView:tableView];
if (indexPath.section != totalSection - 1) {
return %orig;
}
NSString *identifier = @"YJCustomCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:identifier];
cell.backgroundColor = UIColor.whiteColor;
// 加载本地图片
cell.imageView.image = [UIImage imageWithContentsOfFile:YJImagePath(@"skull")];
}
if (indexPath.row == 0) {
cell.textLabel.text = @"自动抢红包";
UISwitch *sw = [[UISwitch alloc] init];
// 获取switch的状态
sw.on = [YJUserDefaults boolForKey:YJSwitchKey];
cell.accessoryView = sw;
[sw addTarget:self
action:@selector(yj_switchChanged:)
forControlEvents:UIControlEventValueChanged];
} else {
cell.textLabel.text = @"退出微信";
cell.accessoryView = nil;
}
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSInteger totalSection = [self numberOfSectionsInTableView:tableView];
if (indexPath.section != totalSection - 1) {
return %orig;
}
return 56;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSInteger totalSection = [self numberOfSectionsInTableView:tableView];
if (indexPath.section != totalSection - 1) {
%orig;
return;
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if (indexPath.row == 1) {
// 终止进程
abort();
}
}
%new // 表示此方法是新增的方法
- (void)yj_switchChanged:(UISwitch *)sw {
// 保存switch的状态
[YJUserDefaults setBool:sw.isOn forKey:YJSwitchKey];
[YJUserDefaults synchronize];
}
%end
3,图片位置
- 项目中
- iPhone中