iOS逆向编程

iOS逆向编程

我不敢说我这篇文章是最全的逆向工程解说,但是我可以肯定的告诉你,你围绕我这篇文章,无论是逆向的方法、工具的选择,你可以少走很多弯路,逆向道路千千条,我为你开辟一道阳关大道。

前言:

还记得搞iOS逆向编程已经是去年的事情了,趁现在还有点印象,赶紧打开了写下自己的学习过程。

先给大家看看我的工具:


这里用到的工具 和 使用方法 更具体的可以去百度,你可以围绕我这篇文章去百度 寻找需要的工具

iOS逆向编程_第1张图片


1、Jason-2(面具) 用于json格式化显示,正常iOS 开发网络请求 header 头返回application/json都会用到。(下次有时间再补图)

2、Charles (青花瓷)  设置代理后可进行抓URI 便于我们分析项目里的数据。(下次有时间再补图)

3、Reveal 这是分析项目节目图层的工具,当然前提是你得有个越狱手机才可以使用。(后面推荐个更好的FLEXLoader)

越狱手机 cydia下载Reveal 后


iOS逆向编程_第2张图片



iOS逆向编程_第3张图片

选中需要查看图层的app,这里我选择了最后一个


iOS逆向编程_第4张图片

再打开app ,进去手机页面

iOS逆向编程_第5张图片

这时候Mac端的Reveal 就能同步看到图层关系了,便于我们分析程序使用了哪些控件。

效果如下:

iOS逆向编程_第6张图片

其实还有一种更好的方法:截图你可能也看到了!没错,那就是FLEXLoader

和手机端打开Reveal一样,我们选择项目 后,再进去 FLEXLoader 效果是这样的:


iOS逆向编程_第7张图片

多了一个工具条一样的东西,我们点select 试试


iOS逆向编程_第8张图片


一样可以查看到图层之间的关系,当然只是没有Reveal 看到的更令人愉悦而已。

4、iFUNBox 是连接手机 后 方便我们查看 手机文件的工具。(下次有时间再补图)

5、iResign 是用来重新签名app的工具(之前签名绕了好多个弯子,使用了很多命令,虽然也成功了,但是用了这个工具,我真的是爱不释手)(下面有用到)

6、go2shell 是在当前文件位置打开终端的一个小工具(避免了使用cd到当前文件位置,就相当于window里面的shift+右键 打开终端一个意思)(可选)

7、machOview  这是用来查看可执行文件的结构的(查看MachO文件格式信息,IOS系统中可执行程序属于Mach-O文件格式) 其实你不用也能逆向 (下次有时间再补图)

8、IDA ,我下载了两种:hopper Disassembiler v4 和  IDA、  IDA 64 (将二进制翻译成为代码的工具,前提是 你的二进制已经砸壳成功)。(下次有时间再补图)

9、最后就是Xcode了 ,我们需要给他安装一个插件:monkeyDev

你可能会百度看到网上教程说到iOSOpenDev,iOSOpenDev也能做到,但是那玩意太久远了,monkeyDev让我更亲近点。你可以选择这个插件。

iOS逆向编程_第9张图片

这玩意是干嘛的呢,告诉你,你逆向写的代码,就是在这里创建新的项目里面写的!(和我们正常创建iOS项目一样)

网上有很多种写法,但是对于iOS开发者是不是更喜欢使用Xcode的呢???答案是肯定的!!!



准备逆向前说明一下:装逼神器

cycript是什么?

网上很多讲到了cycript,其实这个没啥大用,说白了就是调试用的。也能看看效果

因为动态调试嘛!!!

你可以选择不用他,反正可以爽爽。用法笔记:https://www.jianshu.com/p/aeaf9c956d1c

=============================================================

️️️️️️️️️️️️️️️️️️️️️️️️️

我要强调的是:这个改了只是调试,真正的逆向是:

Xcode用monkeyDev 创建的项目运行得到一个可执行的dylib文件(再使用yololib注入到咂过壳的app里面去,重新签名,生成新的ipa)

️️️️️️️️️️️️️️️️️️️️️️️️️️

yololib:这个就是个可执行文件,具体的百度,后面我会再详细说明。

番外:非本文内容:

下载得到线上ipa

你可以使用windows 系统安装的爱思助手下载得到安装包



好了,工具也介绍了,现在开始我们的逆向之旅


️ 越狱手机手机客户端下载爱思助手,安装一款你需要砸壳的app

️ 基本都是加过密的,需要砸壳,怎么砸壳呢? 下面我给大家列一下我记得笔记:

//Clutch砸壳

    //    拷贝到手机里面

    //    scp Clutch [email protected]:/usr/bin/

    //连接手机

    //    ssh [email protected]

    //Clutch -i 查看安装的bundleID

    //Clutch -d bundleID

你需要准备:

第一:Clutch :GitHub下载最新版Clutch,https://github.com/KJCracks/Clutch/releases

下载得到的Clutch 拷贝到手机/usr/bin/里面(记住要cd到Clutch 的位置,为了方便你可以使用我推荐的go2shell工具)

第二:ssh  Mac 终端自带ssh,手机需要cydia里面安装插件ssh (不会的去百度)

root@后面的是Mac 电脑的IP地址

砸壳步骤:(下次有时间再补图)

Clutch拷进手机

ssh连接手机,

手机就有了Clutch 功能,

Clutch -i 命令可以查看所以安装的app的bundleID(省的你去用machoview 查看了)

Clutch -d bundleID  砸对应bundleID 的app

这时候终端会有砸壳的进度,最后会告诉你砸完壳后的存储路径

第三: 怎么拿到咂过的可执行文件呢? 用命令行???  no no no!!!  真的用命令行,那得多枯燥,这时候就用到我给你推荐的工具了:iFunbox (自己百度)

第四:使用我推荐的两种IDA ,打开IDA  导入刚才的可执行文件,这时候就可以分析整个项目了!!!记住这个是分析!

这时候你的准备工作已经做了一大半了,oc项目都有.h 和 .m文件,.h 是暴露出来的,当然也就能获取到。使用Class-dump获取(下次有时间再补图)

第五:Class-dump (自行百度下载安装)

class-dump的下载地址:http://stevenygard.com/download/class-dump-3.5.tar.gz

使用方法:(方法很简单,你也别去百度了,下面的笔记足够了)

//    Class-dump 的使用

//  1、 cd 到app位置

//  2、 class-dump -H xxx.app -o test(备注:xxx.app 是app名称  test是放头文件的文件夹 这个名字你随便起 )

这时候你的test文件夹就有了所有头文件了,下面开始我们的逆向之旅:monkeyDev 创建项目

Xcode 的monkeyDev 插件自行百度安装

你可能要疑惑,我新建的hook项目 和我砸壳的怎么关联呢?我们带着疑惑慢慢看。

1、新建

iOS逆向编程_第10张图片

2、将刚才 Class-dump 的头文件headers 也拖进项目,Xcode 开发着 当然用Xcode看更让人愉悦啦!

3、修改配置文件plist,位置在如图所示地方️

iOS逆向编程_第11张图片

修改:

iOS逆向编程_第12张图片

改成你砸壳的Bundles id :(为了你们方便 我复制一下代码)

iOS逆向编程_第13张图片
打开方式,然后替换下面的代码

Filter


Bundles


xingfu.XFExpressCameraDemo

4、.mm文件编写我们的hook 代码,咋一看还挺像oc的呢!!!

先截个图看看:


iOS逆向编程_第14张图片


iOS逆向编程_第15张图片

我们来分析一下:

CHDeclareClass(UIViewControllerWrapperView);

括号里面是你要hook的对象 UIViewControllerWrapperView 这个类是我砸壳的app里面的一个类

CHOptimizedMethod(1, self, void, UIViewControllerWrapperView, btnClick,id,arg1)

括号里面是你要在UIViewControllerWrapperView 这个类 hook的方法 (btnClick 是方法名),参数是id  !!! 

我是怎么找到的呢????

1、还记得我给你们提到的工具Reveal和FLEXLoader 吗???UIViewControllerWrapperView 类 (你要找的类)可以在界面层级看到。

2、还记得我给你们提到的获取头文件headers吗?(Class-dump 得到),UIViewControllerWrapperView.h得到的头文件里面的方法。(我找到的是btnClick)

  UIButton*btn = arg1;

    btn.backgroundColor = [UIColor redColor];

    // write code here ...

    NSLog(@"===================");

    NSLog(@"这是我hook植入的代码");

    NSLog(@"===================");

    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"hook" message:@"这是我hook的代码"

                                                  delegate:nilcancelButtonTitle:@"好的"otherButtonTitles: nil];

    [alertshow];

上面的是我给他➕的hook的代码。

最后记得释放哦


iOS逆向编程_第16张图片

5、写完运行 得到一个dylib动态库

我们去看看我们的成果去

6、项目怎么注入动态库呢?百度一搜,网上资料都是一堆命令行脚本!麻烦?是的,非常麻烦!

这时候就用到 yololib 了,GitHub 自行下载

yololib不需要安装,网上一堆讲解,我不想说有多好,反正我看着就头疼。

我的方法很粗暴,我们直接拿它用

粗暴的方法:把dylib动态库。 yololib  都拷贝到。XFExpressCameraDemo.decrypted(砸壳得到的那个文件)位置:


iOS逆向编程_第17张图片

这样就可以粗暴的使用yololib 命令了

使用yololib简单的执行下面一句就可以成功完成注入。

注意:我们先cd到之前保存的XFExpressCameraDemo.decrypted位置,即已砸完壳的可执行文件位置。

./yololib 目标可执行文件 需注入的dylib  (空格隔开)

( 目标可执行文件:因为我已经cd到目标位置,直接使用名字即可)

成功效果:

iOS逆向编程_第18张图片

7、最后我们重新签名

你可以百度到网上一堆使用脚本重新签名的方法,这些都太繁琐太繁琐。逆向难,很多原因是因为繁琐,没有一篇合适的文章或者教程入门。可是看我的文章你是不是觉得也不是太难啊,没错,就是so easy! 不废话了,我们继续最后一个环节 重新签名ipa!

使用工具iResign (百度自行下载,或者去github找)


iOS逆向编程_第19张图片

1、ipa 路径

2、embedded.mobileprovision路径 :这就是配置文件(iOS开发打包的pp文件)


你可以用你自己账户新建一个,不会的自己百度

iOS开发都知道,这个里面有你的开发者证书信息,bundleID,团队,有效期,设备ID等等(线上的话是生产证书)

3、entitlements.plist的路径:这个需要你自己用Xcode建:

(网上一堆资料用脚本就是搞这个的,我们粗暴点,自己用plist建,还不会出错!)


iOS逆向编程_第20张图片
关键词复制下面的介绍

(1)、key:  application-identifier      value:  2Y2QCD75VJ.xingfu.XFExpressCameraDemo

value这是app ID,你可以这样看到️

iOS逆向编程_第21张图片

(2)、com.apple.developer.team-identifier:appID 前面的那部分

(3)、get-task-allow 设置NO就行了

(4)、keychain-access-groups (数组)item0: app ID

4、需要修改的appID,配置的pp证书里面是什么和它一一对应即可

5、选择对应的开发者团队(iOS程序员都会,不多说了)


iOS逆向编程_第22张图片

重新签名即可得到你hook后的app啦!!!!

运行效果(下次有时间再补图)

(完结)

(完结)

(完结)

(完结)

(完结)

(完结)

有人疑惑了,你让我安装的IDA 也没用到啊!!!是的,入门级的教程是上面的,下面番外篇才是进阶。

到这里了,还不点赞,后面的进阶我就不写了


番外篇:iOS逆向之使用ida (伪代码    静态分析项目)

                  iOS逆向之 Xcode动态分析项目

                  iOS逆向使用cycript(动态调试)

                  iOS代码保护,数据加密,反调试,反注入,代码混淆

你可能感兴趣的:(iOS逆向编程)