美文网首页2020iOS 开发学习
iOS逆向分析工具使用汇总

iOS逆向分析工具使用汇总

作者: QiShare | 来源:发表于2022-01-11 12:50 被阅读0次

    逆向App总体思路

    UI分析

    Cycript 、Reveal;

    代码分析

    代码在Mach-O 文件,所以要对Mach-O 文件进行静态分析;

    MachOView、class-dump、Hopper Disassember、ida;

    动态调试

    对运行中App 进行代码调试

    debugserver、LLDB;

    代码编写

    注入代码到app中

    必要时还可能需要重新签名、打包ipa;

    MonkeyDev安装与使用

    非越狱插件开发集成神器

    安装

    MonkeyDev下载地址:https://github.com/AloneMonkey/MonkeyDev

    安装步骤:

    官方说明文档地址:https://github.com/AloneMonkey/MonkeyDev/wiki

    使用

    1、点击File - New - Project...创建iOS项目,选择MonkeyApp

    image

    创建完成后,是这样的一个工程;

    MonkeyTestAppDylib这个是将被注入目标App的动态库,你自己要hook的代码可以在MonkeyTestAppDylib.m文件里面写,支持OC runtime的HOOK,C函数的fishhook。AntiAntiDebug这个里面是反反调试的代码。

    fishhook这个是自动集成的fishhook模块。MonkeyDev的Framewroks已经自动集成了RevealServer.frameworklibcycript.dylib。如果选择Release编译的话是不会集成的。

    image

    2、准备脱壳后的ipa文件,然后右键项目里面的TargetApp文件夹Show in Finder,把ipa文件拖入下面的位置。TargetApp文件夹下的put ipa or app here这个文件不要删除。

    3、注意事项:

    在Xcode 12上运行会有2个错误:

    1、动态库证书错误 image

    解决方法:在TARGETSBuild Settings 下添加 CODE_SIGNING_ALLOWED 为NO

    image

    2、ld: file not found: /usr/lib/libstdc++.dylib 错误

    image

    解决方法:

    MonkeyTestAppDylibBuild SettingsOther Linker Flags 中移除掉 /usr/lib/libstdc++.dylib-weak_library

    image

    Reveal 安装与使用

    Reveal是一个很强大的UI分析工具,UI分析非常直观,用来查看app的UI布局相当方便。

    安装

    关联MonkeyDev,打开Reveal 页面,Help-Show Reveal Library in Finder -iOS Library 拷贝RevealServer.framework,然后前往 /opt/MonkeyDev/Frameworks 替换掉RevealServer.framework。

    image image

    使用

    在真机上运行monkeyDev 工程,程序启动后,打开Reveal ,选择USB方式,点击app的icon,进入UI分析页。

    class-dump的安装和使用

    class-dump主要用于提取Mach-O文件中的头文件信息并生成.h文件,通过对生成的.h文件可分析对应App实现的基本思路和一些重要的类对应的功能,以便进一步进行逆向工作。

    安装

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

    下载class-dump的dmg格式:class-dump-3.5.dmg

    image

    安装操作:

    1、 打开终端输入:open /usr/local/bin

    2、把dmg文件中的class-dump文件复制到 /usr/local/bin

    3、改权限,终端输入: sudo chmod 777 /usr/local/bin/class-dump

    使用

    在终端通过命令可以导出文本格式头文件,我们可以导出text文件格式:

    class-dump -H iQiYiPhoneVideo -o IQIY

    如需帮助则在终端输入 :class-dump --help

    Hopper Disassembler 介绍

    Hopper Disassembler Mac版是一个强大的Mac反编译神器,可以反汇编,反编译和调试应用程序。而且支持iOS逆向,可以把Mach-O文件的机器语言代码反编译成汇编代码、OC或Swift的伪代码。Hopper Disassembler 支持分解Mach-O、ARM和Windows二进制文件,是程序员进行拆开代码进行调试或学习的神器。

    Hopper Disassembler 官方下载地址:https://www.hopperapp.com/

    image

    Cycript 安装和环境配置

    Cycript是Objective-C++、ES6(JavaScript)、Java等语法的混合物,使用Cycript 可以动态调试App。

    安装

    Cycript 官方下载地址:http://www.cycript.org/

    Cycript 官方学习文档:http://www.cycript.org/manual/

    Cycript下载SDK,下载完成后解压文件夹放到/opt目录下。

    image

    配置环境变量

    打开终端输入: open -e .bash_profile

    在打开的.bash_profile 文件内添加Cycript环境变量地址:export PATH=/opt/cycript_0.9.594/:$PATH

    安装遇到的问题

    1、Cycript 需要依赖低版本的ruby2.0。

    dyld: Library not loaded: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib
    
     Referenced from: /opt/cycript_0.9.594/./Cycript.lib/cycript-apl
    
     Reason: image not found
    
    zsh: abort   ./cycript -r 10.19.80.176:6666
    

    解决方法

    查找到ruby 安装所在目录:拷贝出libruby.2.4.10.dylib ,并将动态库改成libruby.2.0.0.dylib,粘贴到/opt/cycript_0.9.594/Cycript.lib/目录下。

    image

    使用

    1、打开终端进入cycript_0.9.594 目录: cd /opt/cycript_0.9.594 ;

    2、在终端输入电脑与真机必须同一局域网内的IP地址:./cycript -r 10.19.80.176:6666

    按enter 键出现 cy#表示成功连接。

    日志内也可以查到可运行的IP地址:

    Download cycript(https://cydia.saurik.com/api/latest/3) then run: ./cycript -r 10.19.80.176:6666

    3、control +D退出查看。

    在cy#后面输入:[[UIApp keyWindow]recursiveDescription].toString()

    可以查看UI整体布局结构。

    查找根视图

    cy# UIApp.keyWindow.rootViewController

    #"<RootViewController: 0x141150400>"

    获取对象的所有成员变量,使用(*对象)

    cy# *UIApp.keyWindow.rootViewController

    筛选出某种类型对象

    choose(UIViewController)
    choose(UITableViewCell)

    使用遇到的问题

    *** _syscall(connect(socket_, info->ai_addr, info->ai_addrlen)):../Console.cpp(306):CYSocketRemote [errno=61]
    

    MDCycriptManager.h 中的端口值换一下,#define PORT 6666换成端口为6688

    代码注入举例

    @interface MyViewController
    @end
    
    %hook MyViewController
    \- (void)showLoginPopup{
      NSLog(@"hook viewDidLoad method");
       UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"温馨提示" message:@"我的第一个tweak工程创建成功了" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消",nil];
       [alertView show];
        UITableView* p = MSHookIvar<UITableView*>(self,"_tableView");
      p.backgroundColor=[UIColor purpleColor];
    }
    \- (void)toLogin{
        %orig;
       UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"温馨提示" message:@"你过来呀😏😄😂👍🐟🐶🏃" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消",nil];
       [alertView show];
    }
    %end
    

    总结

    iOS逆向之路有坑有惊喜,需要了解并使用逆向中的各种工具,要求对汇编语言了解,熟悉各种脚本语言,对系统的底层知识的了解要求更高,越狱环境下的逆向自由度更高,非越狱环境下逆向依然充满挑战。在逆向别人app时候,也在提醒我们,开发项目中涉及的核心代码安全性很重要,避免被泄漏出去。

    相关文章

      网友评论

        本文标题:iOS逆向分析工具使用汇总

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