iOS逆向编程

作者: 封楼 | 来源:发表于2019-03-27 17:23 被阅读336次

    iOS逆向编程

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

    前言:

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

    先给大家看看我的工具:

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

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

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

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

    越狱手机 cydia下载Reveal 后

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

    再打开app ,进去手机页面

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

    效果如下:

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

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

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



    一样可以查看到图层之间的关系,当然只是没有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项目一样)

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



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

    cycript是什么?

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

    因为动态调试嘛!!!

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

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

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

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

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

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

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

    番外:非本文内容:

    下载得到线上ipa

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



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

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

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

    //Clutch砸壳

        //    拷贝到手机里面

        //    scp Clutch root@192.168.1.94:/usr/bin/

        //连接手机

        //    ssh root@192.168.1.94

        //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、新建

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

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

    修改:

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

    打开方式,然后替换下面的代码

    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

    <dict>

    Filter

    Bundles

    <string>xingfu.XFExpressCameraDemo</string>

    </dict>

    </plist>

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

    先截个图看看:

    我们来分析一下:

    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的代码。

    最后记得释放哦

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

    我们去看看我们的成果去

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

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

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

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

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


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

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

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

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

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

    成功效果:

    7、最后我们重新签名

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

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


    1、ipa 路径

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


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

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

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

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


    关键词复制下面的介绍

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

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

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

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

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

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

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


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

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

    (完结)

    (完结)

    (完结)

    (完结)

    (完结)

    (完结)

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

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

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

                      iOS逆向之 Xcode动态分析项目

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

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

    相关文章

      网友评论

        本文标题:iOS逆向编程

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