ios(越狱) 应用脱壳反编译hook教程 (系统ios11.3.1)

为什么会有这边博文?

因为公司原因,领导又让我捡起荒废了一年多的ios,了解对ios应用脱壳以及反编译hook相关知识.相比于安卓的hook来说(想了解安卓hook的可以参考我的另外一篇文章),ios的hook要麻烦的多,前人栽树后人乘凉,希望我的这边文章能给大家对ios的hook有个清晰的认识和思路.

一. 项目需求

本文以很久以前上架的一个练手app为例(app有点烂,将就一下吧,点击传送门). app大概是这个样子

在这里插入图片描述

点击生成二维码,会进入到一个生成二维码的界面.我们本次的任务就是篡改点击事件,实现点击生成二维码,弹出一个弹窗.

二. 项目流程

逻辑比较清晰,参考下图:

在这里插入图片描述

三. 工具准备

1. 一台越狱设备(不知道怎么越狱的自己先行百度,本人试验机是ipad 11.3.1系统)
2. 安装要脱壳的应用

四. 脱壳

以下是主流的目前三种脱壳方式,前两种貌似在高版本中都会出现问题,如果你的系统在9.0以下,可以考虑使用,如果是9.0以上,建议使用第三种.

1. Clutch工具静态砸壳

这个方式主要是利用Clutch工具进行砸壳,可以参考友军的文章,我就不重复造轮子了.(注意高版本ios系统可能会出现kill9错误,无法脱壳)

2.dumpdecrypted.dylib动态库 砸壳

从github上下载代码(传送门),编译动态库dumpdecrypted.dylib.利用该动态库进行脱壳,可以参考友军文章,缺点是低版本有效,高版本会出现各种问题.

3.frida-ios-dump 砸壳

由于该项目是个python项目,所以需要python环境.

++第一步++,

手机端

打开cydia 添加源: https://build.frida.re
打开刚刚添加的源 安装 frida
安装完成!检查是否工作可以可在手机终端运行 frida-ps -U 查看

++第二步:++

电脑端下载源码,千万注意这个源码是分3.x和2.x python版本的,一定要根据自己的ptthon环境版本下载相应版本的源码!!!

++第三步++

编译源码(可能会遇到各种安装第三方库错误,耐心解决近,或者下方私信我).修改dump.py文件,把ip改成手机端ip

在这里插入图片描述

++第四步++:

执行脱壳命令
./dump.py 应用名称

成功后就会在项目目录中产生相应的脱壳后的ipa文件,如下图

在这里插入图片描述

五. 使用Class-dump导出头文件

第一步:
下载
Class-dump
,得到Class-dump 运行库

在这里插入图片描述

第二步,解压我们刚才得到的ipa文件(修改成.zip解压即可),得到QrCode.app文件

第三步:

导出.h文件

执行命令

class-dump -H QrCode.app文件路径 -o 导出的文件夹路径

完成后就能看到导出的.h文件了

在这里插入图片描述

六. 分析源码

第一步.

安装MonkeyDev,如何安装请参考神器开源项目[传送门],里面有详细文档

第二步.

安装成功后您的xcode新建项目时就会出现如下图工程:

在这里插入图片描述

第三步:

选择MonkeyApp新建工程,将我们脱壳后的ipa文件放入项目对应文件夹,其他都不用修改,选择真机直接运行

在这里插入图片描述

第四步:

调试应用,得到扫描界面的控制器类MainController,我试图获取uiveiw的action,但发现他的action是动态写在代码中的

在这里插入图片描述

我们搜索我们上面得到的头文件,找到MainController.h文件,代码如下:

在这里插入图片描述

可以看到有个setListener方法和两个uiveiw,基本我们可以确定我们需要的点击事件就在setListener方法中.下面我们验证下.

第四步:

对刚才我们得到的QRCode.app文件显示包内容,可以得到moth-o类型的源码文件QRCode

在这里插入图片描述

下载Hopper工具,将QRCode文件拖进去,就可以查看响应的oc伪码,以及汇编代码.如下图

在这里插入图片描述

搜索MainController,找到setListener方法,查看oc伪码

在这里插入图片描述

发现他跳转了menuAction方法,我们双击点进去

在这里插入图片描述

可以看到,就是通过在这里处理跳转事件,控制程序跳转到下个控制,也验证了我们的猜想是正确的,我们只需要拦截 setListener方法,当他点击生成二维码这个图片view的时候,让他弹个窗即可.

七.编写hook拦截代码

回到我们新建的MonkeyApp工程,新建HookAlert.m文件,编写hook逻辑,拦截代码

在这里插入图片描述

运行后点击生成二维码查看效果:

在这里插入图片描述

出现弹窗,拦截成功!

补充说明:

MonkeyApp提供了多种hook的写法,这里我们使用的是CaptainHook的写法,我简单介绍下用法(官方竟然没有详细的api说明!)

一个单独的hook类,大概包含以下三部分,看一查看我写的注释

#import <Foundation/Foundation.h>
#import <CaptainHook/CaptainHook.h>
#import <UIKit/UIKit.h>
CHDeclareClass(MainController)   //声明hook的类
//声明hook的方法,数字代码参数个数,第一个参数一般是self,第二个参数代表返回值,第三个参数是类名,第四个是方法名,后面接方法参数以及类型
CHOptimizedMethod1(self, void, MainController, menuAction,id,arg1){   
    //获取类变量view的值
    UIView* item2= CHIvar(self, _item2_bgview,__strong UIView*) ;
    UIView* item=[arg1 view];
    if(item2==item){
        //拦截 点击事件
        UIAlertView *alert=[UIAlertView new];
        [alert setTitle:@"提示"];
        [alert setMessage:@"拦截成功"];
        [alert show];
        NSLog(@"测试成功...%@ : %@",arg1,item2);
    }else{
       // 其他逻辑正常执行元源代码
        CHSuper1(MainController, menuAction, arg1);
    }
}


// 构造方法, 
CHConstructor{
    CHLoadLateClass(MainController);  //再次声明hook的类
    CHClassHook1(MainController, menuAction);  //再次声明hook的方法

}

八. 总结

至此,我们的ios从脱壳到分析再到代码拦截就完成了,网上很多文章都是要么写怎么脱壳,要么怎么写hook,要么就是写怎么分析,很少有一个写全面流程的文章.希望这边文章对大家有帮助,喜欢就伸手点个关注吧.

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

推荐阅读更多精彩内容

  • 儿子心想买手机,他是铁定了心思要买,管他老爸教育的口水流干,年初一因为个手机还跟我干了一场嘴架,差点没动手。十三四...
    真巧港钧阅读 264评论 0 0
  • On my way to you again. In the comming weeks, よろしくね^_^
    张竟东阅读 204评论 0 0
  • 钦亲宝贝阅读 185评论 0 0
  • 《肖申克的救赎》,豆瓣评分9.6,常年占据着豆瓣电影排行榜第 1 名的位置,多年来鲜有对手。 一个...
    天上有神仙阅读 425评论 0 3