美文网首页
iOS逆向工程的环境搭建

iOS逆向工程的环境搭建

作者: 禾口王No_1 | 来源:发表于2017-12-15 13:40 被阅读41次

    参考文章:
    [iOS Reverse入门]微信注入
    iOS逆向入门实践 — 逆向微信,伪装定位(一)

    一. 先在已经越狱的手机上,打开Cydia搜索OpenSSH,并安装。
    1. WIFI连接(暂未使用过):手机和Mac电脑在同一网络下。
      例如我的iPhone的ip是: 192.168.00.00
    macdeMacBook-Pro:~ mac$ ssh root@192.168.00.00
    
    1. 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
    
    1. 终端提示 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
    

    运行成功,再次打包

    相关文章

      网友评论

          本文标题:iOS逆向工程的环境搭建

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