我的逆向工程之路 - 0SX工具篇

主要学习资料:《iOS应用逆向工程(第二版)》

  1. class-dump

    下载地址:http://stevenygard.com/projects/class-dump

    下载class-dump-3.5.dmg后,将dmg文件里面的class- dump复制到“/usr/bin” ,然后再Terminal 中执行“sudo chmod 777/usr/bin/class-dump”赋予其执行权限。然后问题来了。

    复制的时候 提示我没有权限,于是想chmod一下,悲剧的是还是不行。网上查了一下发现原来是Rootless 搞得鬼。

    OS X 10.11 加入了Rootless,默认创建的用户还是属于admin用户组    
    也能切换到root用户,但是加以了限制.使得某些操作只有苹果的应用可以      
    被许可(通过代码签名来判断).所以第三方应用即使是运行在root权限中,      
    有一些操作也无法完成。
    

    关闭Rootless 的方法就是 重启电脑,听到嘟一声后(赶紧哦)按住cmd+r进入安全模式(这里还有一个坑,用的是mac mini 美式键盘,试了好几次没成功。之后进键盘设置 -> 更改键盘类型,重新识别了一次键盘,搞定。)

    找到实用工具,也就是命令窗口 ternimal,输入
    csrutil disable 关闭
    csrutil enable 打开
    csrutil status 查看状态
    最后重启即可

    class-dump的对象是 framework的库文件 或者 app的可执行文件。这里我:

    MAC:~ LJ$ cd /Users/renjinkui/Desktop/classDump-Test/LJTrack.app   
    MAC:LJTrack.app LJ$ class-dump -S -s -H LJTrack -o /Users/renjinkui/Desktop/classDump-Test/
    
    

    -S 是将方法排序,-s 是将类名,分类名排序,
    -H 则是生成头文件,-o 后面接生成头文件的位置,没有则头文件放到当前目录。
    好了class-dump 基本就搞定了。

class-dump --arch armv7s Victim.decrypted
指定哪个架构 需要被解析
  1. Theos

    https://github.com/theos/theos 下载地址
    直接下载theos,放到/opt/theos 文件夹下


    我的逆向工程之路 - 0SX工具篇_第1张图片
    theosLocation.png

    终端安装法:

     MAC:~ LJ$ export THEOS=/opt/theos
     MAC:~ LJ$ sudo git clone git://github.com/DHowett/theos.git $THEOS
     
    

    改变theos 文件夹的所属关系:

     sudo chown $(id -u):$(id -g) /opt/theos
    

    设置环境变量:

     设置              ~/.bash_profile 文件  
     在文件最后面加上:  export PATH=/opt/theos/bin/:$PATH  
    


    配置ldid (下载地址:http://joedj.net/ldid)
    github 源码地址:https://github.com/rpetrich/ldid
    原理文章: http://www.saurik.com/id/8
    把它放到 /opt/theos/bin/下
    sudo chmod 777 /opt/theos/bin/ldid 赋予权限


    配置CydiaSubstrate,
    运行自动化脚本: sudo /opt/theos/bin/bootstrap.sh substrate

    (最新版的 theos 里面已经没有这个脚本了,可以跳过执行脚本这一步)

    巨坑啊!!!

    接下来要做的就是从 iOS 上已经安装的 Cydia Substrate 上复制 cydiaSubstrate 文件到 theos 上

    (首先在Cydia中搜索安装:CydiaSubstrate)

    文件位于 iOS 上的
    “/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate”,
    将其拷贝到 OSX 上,然后重命名为 libsubstrate.dylib 后
    放到 “/opt/theos/libsubstrate.dylib” 中


    配置dpkg-deb:
    deb 是越狱开发安装包的标准格式,而 dpkg-deb 是操作 deb 文件的工具,
    有了这个工具,Theos 才能将工程正确地打包成 deb 包

    从 https://raw.githubusercontent.com/DHowett/dm.pl/master/dm.pl下载dm.pl,将其重命名为 dpkg-deb 后,
    放到 “/opt/theos/bin/“ 目录下,然后设置它的可执行权限

     sudo chmod 777 /opt/theos/bin/dpkg-deb
    
    (发现 最新的theos 里面已经有dm.pl 文件了...)为了保持一致,也copy一个出来,改个名字,再放进去。

    另外一种 安装dpkg:
    https://www.macports.org/install.php 下载OSX 对应版本的pkg安装包
    安装完成后, 运行: sudo port selfupdate
    确保MacPorts 升级到最新版 再运行: sudo port install dpkg(有点慢哦)


    配置Theos NIC templates:(Theos 工程模板)
    下载地址:
    发现 最近的Theos 里面已经包含了其中的四种了,只有一个sbsettingstoggle.nic.tar 没有,直接copy 进去。

    使用Theos 创建工程
MAC:Code-Test LJ$ nic.pl   =========>启动NIC
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/sbsettingstoggle
[11.] iphone/tool
[12.] iphone/tweak
[13.] iphone/xpc_service
Choose a Template (required): 12  =========>选择一个模板来创建,tweak模板
Project Name (required): iOSRE    =========>工程名字
Package Name [com.yourcompany.iosre]: com.iosre.iosreproject ===>deb包名
Author/Maintainer Name [LiJie]: lijie =========> tweak作者名字
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: com.apple.springboard  =========>tweak作用对象的bundle identifier
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]: SpringBoard =========>tweak 安装后需要重启的应用,进程名
Instantiating iphone/tweak in iosre/...
Done.   
 

生成的工程iosre,里面包含四个文件:

 1. Makefile: 指定工程用到的文件,框架,库等    
    (Application,Tweak, Tool 三种类型的程序 分别对应的.mk文件:  
     application.mk, tweak.mk, tool.mk)

    如果提示找不到文件common.mk,则include改成:include /opt/theos/makefiles/common.mk

 2. Tweak.xm: 默认生成的原文件  
    (%hook, %log, %orig   三个基本的预处理命令)
    %hook: 指定需要hook的class, 以%end结尾  
    %orig: 执行被hook的函数
    %orig(x,x): 执行被hook的函数的,同时修改函数的参数 
    %log : 在%hook里面使用,将函数类名,参数,等信息写入syslog  
    %group  将%hook分组,以%end结尾, 一个group可以包含多个hook  
    %init   group必须配合init使用,用于初始化group,再hook 或者 ctor内调用  
    %ctor: (构造函数,后没有显式调用)系统会自动生成ctor,并在其中调用init  
    %new : hook内部使用,给class添加函数(类似class_addMethod),%end结尾    
    %c   :  动态获取一个类的定义(objc_getClass, NSClassFromString)  
    详细资料:  
 3. control: 记录了deb包管理系统所需要的基本信息,会被打包到deb包里  
 4. iOSRE.plist: 记录了一些配置信息  
    (Filter有不同的array时,需要添加 Mode:(String)Any 键值对)  

生成好工程之后,就是编译 -> 打包 -> 安装了。

1.  编译命令: make
   (这个时候,项目就会多出一个obj文件夹,里面有一个.dylib文件,就是tweak的核心部分)

2.  编译 + 打包命令: mark package (也就是想make 再 dpkg-deb)
    这个时候就会生成一个 .deb的文件,就是最终的发布安装包。

3.  编译 + 打包 + 安装:  make package install
    图像安装:  通过iFunBox 吧deb拖到iOS ,然后用iFile安装。最后再重启。
    或者: SSH命令,iOS 必须安装OpenSSH。首先,在MakeFile文件最后 加上"THEOS_DEVICE_IP = 本机IP",告诉Theos 测试设备的IP地址。然后命令行输入:"make package install" 命令来完成编译,打包,安装。

不需要多次输入密码的方法:

我的逆向工程之路 - 0SX工具篇_第2张图片
ssh_Location.png
我的逆向工程之路 - 0SX工具篇_第3张图片
autorized_keys.png
1. 找到上面路径 里面的known_hosts文件里面的 iOS的 IP那一行。(完整删掉哦)
2. 生成 authorized_keys 
    先: ssh-keygen -t rsa  
    再: cp /Users/****/.ssh/id_rsa.pub ~/authorized_keys
3. 配置iOS:
    以root身份登录iOS中,输入:"ssh-keygen", 生成"/var/root/.ssh"目录;
    然后exit 退出登录,
    再输入: "scp ~/authorized_keys [email protected].**:/var/root/.ssh"。即可
4. 清理:
     make clean, 清除工程命令(删除了,Theos编译 打包留下的文件 obj,_,)
  1. Reveal

    Reveal是可以查看我们自己的appUI布局。但是也是可以看其他App的哦。

  2. 安装Reveal Loader:
    在Cydia 中,搜索并安装Reveal Loader。下载时会自动,下载一个libReveal.dylib的文件(最新版本 只剩下一个RevealServer.framework 文件了)。

    下载完,在iOS上/Library/ 目录下有没有 RHReavealLoader文件夹,没有就手动新建一个,并把libReveal.dylib(RevealServer.framework)文件(在,"Show Reveal Library in Finder")拷贝进去。

  3. 配置Reveal Loader, 直接进设置 -> Reveal->Enabled Applications 打开需要查看的App。

  4. 在未越狱机上的使用:(真机可以通过USB 或者 局域网联调)

在文件:/Users/renjinkui/.lldbinit   里面加上: 
command alias reveal_load_sim expr (void*)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/RevealServer.framework/RevealServer", 0x2);

command alias reveal_load_dev expr (void*)dlopen([(NSString*)[(NSBundle*)[NSBundle mainBundle]               pathForResource:@"RevealServer.framework/RevealServer" ofType:@""] cStringUsingEncoding:0x4], 0x2);

command alias reveal_start expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter]           postNotificationName:@"IBARevealRequestStart" object:nil];

command alias reveal_stop expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter]            postNotificationName:@"IBARevealRequestStop" object:nil];

这四个语句分别代表了: 
在模拟器,和在真机上加载Reveal动态库。(最新版,已经可以自动加载动态库 和 开始Reveal了。)
开始Reveal 和 结束Reveal。
我的逆向工程之路 - 0SX工具篇_第4张图片
reveal_framework_location.png
command alias  第一个跟别名,后面跟命令。
dlopen 是打开动态库,在framework里面则要定位到"***.framework/***"。
dlsym  是获取函数地址
dlclose 关闭

RevealServer.framework 拷贝到工程里面的时候,会有崩溃提示说,(not found image)找不到图片的,就要在这里 加上RevealServer.framework。


我的逆向工程之路 - 0SX工具篇_第5张图片
reveal_error.png
  1. IDA

    下载安装: https://www.hex-rays.com/products/ida/support/download_demo.shtml

IDA 的界面通过 空格进行切换(Graph 或者 Text):

   满足条件的分支:  绿色线、
   不满足条件的:    红色线、
   没有分支的:      蓝色线。 
我的逆向工程之路 - 0SX工具篇_第6张图片
IDA_GraphView.png
我的逆向工程之路 - 0SX工具篇_第7张图片
IDA_TextView.png
  1. iFunBox

越狱的iPhone ,需要先安装 App File Conduit2.
iFunBox 才能浏览全系统的文件。

  1. dyld_decache

下载地址: https://cloud.github.com/downloads/kennytm/Miscellaneous/dyld_decache%5Bv0.1c%5D.bz2
iOS 3.1 后,库文件的位置:

/System/Library/Caches/com.apple.dyld/dyld_shared_
dyld_shared_cache_armv7、 
dyld_shared_cache_armv7s或 
dyld_shared_cache_arm64   

dyld_decache 用于提取库里面的二进制文件。

 赋予权限:
  chmod +x /path/to/dyld_decache\[v0.1c\]
 提取二进制文件:
  /path/to/dyld_decache\ [v0.1c\] -o /where/to/store/decached/binaries/ /path/to/dyld_shared_cache_armx
 提取的二进制文件,都放在了/where/to/store/decached/binaries/里面

你可能感兴趣的:(我的逆向工程之路 - 0SX工具篇)