iOS逆向工程
目的:拦截一个自己写的方法,然后进行重写。
Bundle identifier:com.pajk.test
APP Name : test
拦截一个按钮的点击方法:
- (void)buttonClick:(id)sender {
UIAlertController *alerView = [UIAlertController alertControllerWithTitle:@"提示"
message:@"未被HOOK"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction =[UIAlertAction actionWithTitle:@"取消"
style:UIAlertActionStyleCancel
handler:nil];
[alerView addAction:cancelAction];
[self presentViewController:alerView animated:YES completion:nil];
}
大家可自己手动下载官方theos然后放入ldid、CydiaSubstrate、dpkg-deb等等到目录中,或者使用脚本下载这边已经放入好的theos。 脚本下载地址:https://github.com/DaSens/Theos-Script
1,首先我们配置和准备好theos后,我们进入终端,然后cd进入你要放工程的文件夹目录比如桌面上我新建好的一个文件夹iosDev,然后执行启动 NIC(New Instance Creator),如下:。
# Create a new directory, and `cd` into it:
mkdir iOSDev && cd iOSDev
# Run NIC
/opt/theos/bin/nic.pl
# NIC 2.0 - New Instance Creator
# ------------------------------
# [1.] iphone/activator_event
# [2.] iphone/application_modern
# [3.] iphone/cydget
# [4.] iphone/flipswitch_switch
# [5.] iphone/framework
# [6.] iphone/ios7_notification_center_widget
# [7.] iphone/library
# [8.] iphone/notification_center_widget
# [9.] iphone/preference_bundle_modern
# [10.] iphone/tool
# [11.] iphone/tweak
# [12.] iphone/xpc_service
# 我们可以看到iphone/tweak,所以我们输入 11 选择一个tweak工程,然后回车确定
Choose a Template (required): 11
Project Name (required): HOOKSPP
Package Name [com.yourcompany.test]: com.pajk.hookapp
Author/Maintainer Name: zhoujie
[iphone/tweak] MobileSubstrate Budle filter [com.apple.springboard]: com.pajk.test
# [iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]:
# Instantiating iphone/tweak in hookapp/...
# Done.
然后我们进入工程目录会发现生成四个文件:
1, MakefileTHEOS_DEVICE_IP = root@localhost -p 2222
ARCHS = armv7 arm64
TARGET = iphone:latest:8.0
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = HOOKAPP
HOOKAPP_FILES = Tweak.xm
HOOKAPP_FRAMEWORKS = UIKit
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard"
2, Tweak.xm
%hook FirstViewController
- (void)buttonClick:(id)sender
{
UIAlertController *alerView = [UIAlertController alertControllerWithTitle:@"提示"
message:@"已经被HOOK了"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction =[UIAlertAction actionWithTitle:@"取消"
style:UIAlertActionStyleCancel
handler:nil];
[alerView addAction:cancelAction];
[self presentViewController:alerView animated:YES completion:nil];
}
%end
其它这两个文件 control 和 iosproject.plist 可以保持原样。
走到这一步需要注意几点
iOS设备一定要已经安装了Open ssh (默认密码alpine,如果忘记密码可自行查找如何修改密码)
保证你的theos配置文件没有问题。
首先,同样手机要越狱,越狱胡要安装openssh工具。
第一,通过USB访问,有没有WiFi无所谓了,但是你得在pc安装usbmuxd服务,没有的大家可以去http://cgit.sukimashita.com/usbmuxd.git/ 下载1.0.8版本。解压进入python-client目录后,执行命令:python tcprelay.py –t 22:2222,这样就开通了一个从本机2222端口通往目标主机22号端口的通道,执行完后会出现Forwarding local port 2222 to remote port 22
第二, 另起终端,执行命令ssh root@localhost –p 2222,然后提示输入密码,这是手机的密码,默认为alpine。
3,接下来我们利用终端cd进入你创建的tweak项目目录,然后执行make package install,然后输入两次ssh的连接密码(ssh 默认密码alpine),然后设备就会重启SpringBoard,然后我们再次打开HOOK的APP发现按钮的点击方法已经被替换了。
cd hookapp
make package install
# > Making all for tweak HOOKAPP…
# make[2]: Nothing to be done for `internal-library-compile'.
# > Making stage for tweak HOOKAPP…
# dm.pl: building package `com.pajk.hookapp:iphoneos-arm' in `./debs/com.pajk.hookapp_0.0.1-16+debug_iphoneos-arm.deb'
# ==> Installing…
root@localhost's password: alpine
# (Reading database ... 3020 files and directories currently installed.)
# Preparing to unpack /tmp/_theos_install.deb ...
# Unpacking com.pajk.hookapp (0.0.1-16+debug) over (0.0.1-15+debug) ...
# Setting up com.pajk.hookapp (0.0.1-16+debug) ...
# install.exec "killall -9 SpringBoard"
root@localhost's password: alpine