美文网首页iOS逆向iOS个人修养iOSre
[iOS Reverse入门]微信注入

[iOS Reverse入门]微信注入

作者: CGPointZero | 来源:发表于2016-10-20 03:22 被阅读2266次

    前言

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

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

    • Xcode Command Line Tools
    • Xcode
    • Homebrew
    • dkpg
    • llid
    • thoes
    • 一台已越狱的手机
    • OpenSSH(手机端插件)
    • 手机终端NewTerm
    • 苹果开发者账号
    • Impactor
    • 一台Mac 电脑,或者一台装有Mac OSX的windows电脑

    具体步骤

    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

    相关文章

      网友评论

      本文标题:[iOS Reverse入门]微信注入

      本文链接:https://www.haomeiwen.com/subject/jmhfuttx.html