iOS逆向iOS个人修养iOSre

[iOS Reverse入门]微信注入

2016-10-20  本文已影响2266人  CGPointZero

前言

最近在钻研iOS hook技术,刚刚摸到一点门道,现做如下总结,本文中将以微信作为实验对象注入。
Theos是Mac上的iOS插件开发环境,集成了创建,打包,安装到手机的所有功能,本文稍后会讲到如何搭建theos开发环境。

工欲善其事必先利其器,需要的工具:

具体步骤

1.现在已经越狱的手机上,打开Cydia搜索OpenSSH,并安装。
2.在Mac上下载Impactor,安装并打开,将越狱后的手机连接至电脑;下载手机终端NewTerm;将下载的.deb文件拖入到Impactor界面,按照提示输入开发者账号密码,deb文件会直接按照道手机上。
这一步可以参考我的博客:解决Cydia数据库错误:could not open file /var/lib/dpkg/status
3.手机连接WIFI,打开手机设置,无线局域网设置,点击已连接的wifif后面的那个倒感叹号按钮,查看手机的IP地址,如:192.168.0.1记录下这个IP地址。
4.打开手机终端NewTerm,输入命令:

ssh root@xx.xx.xx.xx

其中,xx.xx.xx.xx是你的手机IP地址,
输入密码:alpine,注意要一个一个字母的输入。
5.在Mac上打开终端,配置环境变量:

export THEOS=/opt/theos

6.从Github下载theos开发环境:
sudo git clone git://github.com/DHowett/theos.git $THEOS
7.安装Homebrew,若已安装,跳过此步:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

8.安装dpkg及llid

brew install dpkg ldid

9.下载libsubstrate.dylib,并移动到 /opt/theos/lib/
10.在Mac终端中cd到桌面,新建一个substrate.h文件:

touch substrate.h

用文本编辑器打开substrate.h文件,打开substrate.h,拷贝里面的所有代码,粘贴到substrate.h中,保存关闭,将编辑好的substrate.h文件移动到:

/opt/theos/header/

若没有header这个文件夹,则手动创建:

cd  /opt/theos
mkdir header

11.运行脚本nic.pl,在Mac终端输入命令:

/opt/theos/bin/nic.pl

若成功,会出现如下界面:


选则[11.]iphone/tweak,我们要做的是一个简单的iOS插件,输入:

11

并回车。
接着输入项目名:

Project Name (required): 

我输入了test,回车,接着输入包名

Package Name

我输入了

com.xgf.test

接着输入作者名:

Author/Maintainer Name [风过的夏]: 

我在这里输入了我在简书的网名CGPointZero
下面的输入是最重要的,输入要hook的app的bundle identifier

[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]:

12.在hook一个app之前,你要先下载该app,下载你要hook的app;
13.获取你的手机上安装的所有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:
在这里,拿微信开刀,hook微信,在进入聊天界面时,注入一段代码。
搜索wechat,找到微信的bundle identifier,记录这个值:


14.接着第11步,输入要hook的app的bundle identifier:
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]:

输入微信的bundle identifier:

com.tencent.xin

14.指定你开发的插件被安装完成之后,应该重启哪些部分,必比如重启SpringBoard,若不需要重启任何东西,输入:

-

回车
15.在终端中cd到用户根目录,比如:

cd /Users/xia/

可以看到刚刚创建的tweak项目:test文件夹
16.打开Tweak.xm文件,在这里,编写要注入的代码:

%hook ClassName

表示要hook的类名,这个需要通过:

dumpdecrypted
cycript
logify
hopper
lldb
debugserver

过程比较复杂,由于这里只讲入门,因此,直接hook别人已经dump出的微信的一个类:

BaseMsgContentViewController

这个类在第一次进入某个聊天界面时会被初始化。
16.编写注入代码:

%hook BaseMsgContentViewController

%end

%hook%end之间注入我们的代码:
如,我们在视图加载完成之后,做一个简单的弹框:

-(void)viewDidLoad{
    %orig;
    UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"CGPointZero" message:@"这是注入的代码" delegate:nil cancelButtonTitle:@"确定 !" otherButtonTitles:nil];
    [alert show];
}

其中的:

%orig;

表示执行原来的代码,若不写这一句,原来的代码将不会被执行!
17.应为我们的hook代码使用了UIKit框架,所以需要在插件项目目录/Users/xia/test/Makefile中加入framework依赖:

WelcomeWagon_FRAMEWORKS = UIKit

保存,关闭。
18.打包
进入插件项目目录:

cd /Users/xia/test

设置环境变量:

export THEOS=/opt/theos

输入指令:

make

成功后,通过ssh连接手机,并安装到手机上
执行命令:

export THEOS_DEVICE_IP=xx.xx.xx.xx

这里的xx.xx.xx.xx是第4步的手机IP地址,会要求输入密码,默认密码:

alpine

最后执行:

make package install

将插件直接安装到手机上
19.测试
重启微信,随便进入一个聊天界面,预期结果弹框显示之前代码中编写的内容:


打开cydia,查看刚刚安装都插件test



至此,已经完成了微信的注入!虽然只是加了个弹框,但是处理起来还是不容易啊!
下面是我个人的一些信息,欢迎交流:

关于我


@CGPoitZero

上一篇下一篇

猜你喜欢

热点阅读