参考文章:
[iOS Reverse入门]微信注入
iOS逆向入门实践 — 逆向微信,伪装定位(一)
一. 先在已经越狱的手机上,打开Cydia搜索OpenSSH,并安装。
- WIFI连接(暂未使用过):手机和Mac电脑在同一网络下。
例如我的iPhone的ip是: 192.168.00.00
macdeMacBook-Pro:~ mac$ ssh root@192.168.00.00
- USB连接:比WIFI响应速度快,网络环境无限制
1.安装usbmuxd库,usbmuxd库中就顺带安装了一个小工具iproxy,该工具会将设备上的端口号映射到电脑上的某一个端口,例如:
iproxy 2222 22
2.以上命令就是把当前连接设备的22端口(SSH端口)映射到电脑的2222端口,那么想和设备22端口通信,直接和本地的2222端口通信就可以了。 因此,SSH连接设备就可以这样连接了:
macdeMacBook-Pro:~ mac$ iproxy 2222 22
waiting for connection
- 终端提示 waiting for connection ,表示这两个端口之间已经可以通信了,保留当前终端(如果关闭就停止端口之间的通信了),新建另一个终端输入,默认密码:alpine
Last login: Fri Dec 15 16:14:13 on ttys010
macdeMacBook-Pro:~ mac$ ssh -p 4567 root@127.0.0.1
root@127.0.0.1's password:
credoode-iPad:~ root#
二. 在Mac上打开终端,配置环境变量:
export THEOS=/opt/theos
- 从Github下载theos开发环境:
sudo git clone git://github.com/DHowett/theos.git $THEOS
- 安装Homebrew,若已安装,跳过此步
- 安装dpkg及llid
brew install dpkg ldid
- 下载libsubstrate.dylib,并移动到 /opt/theos/lib/
- 在Mac终端中cd到桌面,新建一个substrate.h文件:
touch substrate.h
- 用文本编辑器打开
substrate.h
文件,打开substrate.h,拷贝里面的所有代码,粘贴到substrate.h
中,保存关闭,将编辑好的substrate.h
文件移动到:
/opt/theos/header/
- 若没有header这个文件夹,则手动创建:
cd /opt/theos
mkdir header
- 运行脚本nic.pl,在Mac终端输入命令:
/opt/theos/bin/nic.pl
如运行成功:
macdeMacBook-Pro:~ mac$ /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
Choose a Template (required):
- 选择[11.]iphone/tweak,我们要做的是一个简单的iOS插件,输入:
11
接着依次输入项目名称(只能包含字母和数字),输入包名,输入作者名:
Project Name (required): test
Package Name [com.yourcompany.test]: com.tom.test
Author/Maintainer Name [mac]: developer
- 获取你的手机上安装的所有app的bundle identifier:
随便新建一个Xcode项目,在ViewController.m文件中:
#import "ViewController.h"
#import <objc/runtime.h>
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");
NSObject* workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];
NSLog(@"apps: %@", [workspace performSelector:@selector(allApplications)]);
}
连接真机调试,点击屏幕,复制打印的信息到文件编辑器,找到你要hook的app对应的bundle identifier,如微信的,搜索weChat(注:也可以在ipa解压后的plist里面找)
- 输入要hook的app的bundle identifier:
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]:
输入微信的bundle identifier:
com.tencent.xin
- 指定你开发的插件被安装完成之后,应该重启哪些部分,必比如重启SpringBoard,若不需要重启任何东西,输入:
-
- 在终端中cd到用户根目录,比如:
cd /Users/Mac/
可以看到刚刚创建的tweak项目:test文件夹
- 打开Tweak.xm文件,在这里,编写要注入的代码:
%hook ClassName
类名的获取靠多个途径获取,此处暂不赘述.直接hook别人已经dump出的微信的一个类:
BaseMsgContentViewController
这个类在第一次进入某个聊天界面时会被初始化。
- 在%hook和%end之间注入我们的代码:
%hook BaseMsgContentViewController
-(void)viewDidLoad{
%orig;
UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"CGPointZero" message:@"这是注入的代码" delegate:nil cancelButtonTitle:@"确定 !" otherButtonTitles:nil];
[alert show];
}
%end
%orig表示执行原来的代码,若不写这一句,原来的代码将不会被执行!
- 应为我们的hook代码使用了UIKit框架,所以需要在插件项目目录/Users/xia/test/的Makefile中加入framework依赖:
WelcomeWagon_FRAMEWORKS = UIKit
- 进入插件项目目录:
cd /Users/Mac/test
设置环境变量:
export THEOS=/opt/theos
Theos 采用与 debian 相同的 make 命令来编译。执行 make 命令:
make
此处若出现如下错误
==> Error: The vendor/include and/or vendor/lib directories are missing. Please run
`git submodule update --init --recursive`
in your Theos directory. More information:
[https://github.com/theos/theos/wiki/Installation
2](https://github.com/theos/theos/wiki/Installation)
运行语句,重新make
sudo git submodule update --init --recursive
- 如出现错误
Haykams-MacBook:stringtheory haykam$ make package
> Making all for tweak ExampleName…
make[2]: Nothing to be done for `internal-library-compile'.
> Making stage for tweak ExampleName…
Can't locate IO/Compress/Lzma.pm in @INC (you may need to install the IO::Compress::Lzma module) (@INC contains: /Library/Perl/5.18/darwin-thread-multi-2level /Library/Perl/5.18 /Network/Library/Perl/5.18/darwin-thread-multi-2level /Network/Library/Perl/5.18 /Library/Perl/Updates/5.18.2 /System/Library/Perl/5.18/darwin-thread-multi-2level /System/Library/Perl/5.18 /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level /System/Library/Perl/Extras/5.18 .) at /opt/theos/bin/dm.pl line 12.
BEGIN failed--compilation aborted at /opt/theos/bin/dm.pl line 12.
make: *** [internal-package] Error 2
可以用终端
sudo cpan IO::Compress::Lzma
cpan Compress::Raw::Lzma
- 可以用图形工具拷贝到移动设备,也可以用终端
export THEOS_DEVICE_IP=xx.xx.xx.xx
这里要注意,如果显示连接SSH失败,
ssh: connect to host 127.0.0.1 port 22: Connection refused
可能还要
export THEOS_DEVICE_PORT=2222
接着调用 make package install 命令完成编译打包安装
make package install
如报错如下,完整文本忘了赋值留存
Can't locate IO/Compress/Lzma.pm in @INC......
则需要运行(如果失败,则重试一下),答案地址:
should both install
sudo cpan IO::Compress::Lzma
and
cpan Compress::Raw::Lzma
运行成功,再次打包
网友评论