iOS逆向分析工具使用汇总

逆向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时候,也在提醒我们,开发项目中涉及的核心代码安全性很重要,避免被泄漏出去。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容