美文网首页
iOS逆向开发之小试牛刀

iOS逆向开发之小试牛刀

作者: 晓_我想去环游世界 | 来源:发表于2019-01-18 16:38 被阅读68次

    写作背景

    最近自己利用业余时间研究了一点点逆向的皮毛,在此做个记录,坑还是有的,也是个以后再次学习做个铺垫吧。

    前期准备工作

    需要的硬件:

    一部iOS的设备(有没有越狱都可以),区别在于:

    ·如果是越狱设备,那么我们可以自己在App Store下载正版软件自己去砸壳再做逆向。

    ·如果是非越狱设备,那么我们只能从一些助手下载越狱过的,也就是砸过壳的App去做逆向。

    ·本人是非越狱设备,所以本文重点讲第二种方法。

    需要的软件:

    MonkeyDev 主要工具

    pp助手 管理手机工具,下载越狱ipa

    reveal 查看app的图层和类名

    具体步骤

    1、安装MonkeyDev

    具体操作请查看官方帮助文档,这里只记录一下我遇到的问题,可能大家也会遇到。

    ·当执行brew install ldid时提示-bash: brew: command not found 。这是因为brew未安装,运行/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"即可

    2、创建MonkeyApp项目

    安装好环境后,重启Xcode,新建工程,往下拉,选择MonkeyApp。

    然后填写Product Name,不需要管Target App。创建完成,就会得到这样一个工程。 

    3、拖入编译

    将砸壳后的ipa拖入

    然后就可以设置Team,编译,运行了。注意这里只能真机运行。还有需要注意的是MonkeyApp目前只支持普通app,不支持扩展(appex),如果您的app有扩展,使用MonkeyApp时,会将所有的扩展删除。

    现在可以看到运行效果了,与原本的App没有两样。现在先不要去玩app,看一看其他的东西。

    4、class-dump

    顾名思义,就是用来dump目标对象的class信息的工具。它利用Objective-c语言的runtime特性,将存储在Mach-O文件中的头文件信息提取出来,并生成对应的.h文件。

    MonekeyDev很贴心的集成了class-dump功能,可以再build settings最下面开启该功能。

    默认值为NO,设置为YES后开启,再次build一下工程,就可以在工程目录下,看到该app的所有头文件信息了,然后我们就可以从这些头文件中进行探索了。 

    5、用Reveal进行查看

    随便点一个view,可以看到它所属的控制器的名字

    6、代码注入

    在工程中找到这个文件

    这时我们就可以在  项目名Dylib.xm中 对某个view做一些我们想做的事情。

    注入格式:

    %hook       view的名字

    %end

    ·如果方法有返回值,那么一定要返回,你可以直接返回nil,但不能不返回。

    例:你要对下面函数的方法进行注入

    %hook ShelfViewController

    - (int)numberOfSectionsInCollectionView:(id)arg1

    {//注入代码。。。。。。

        return %orig();// %orig这个是调用原代码的方法,比如源代码返回1,那么%orig也是等于1

    }

    %end

    ·如果没有返回值,那么直接什么都不写,这样原先方法就会被hook掉,不会被执行原代码。

    例:你要hook掉下面函数方法

    %hook AppDelegate

    - (void)applicationWillTerminate:(id)arg1{}

    - (void)applicationDidBecomeActive:(id)arg1{}

    - (void)applicationWillEnterForeground:(id)arg1{}

    - (void)applicationDidEnterBackground:(id)arg1{}

    - (void)applicationWillResignActive:(id)arg1{}

    %end

    ·这样一个简单的hook app就这样完成了,这是最简单的hook程序,还有一些困难的,比如修改源码,修改判断if,这些就需要更多的软件去辅助。

    学逆向不是为了去破解别人的app,对我来说,最重要的是为了防止别人破解自己的app,我们从逆向的过程中学习,想象自己的app如果被别人拿去,如何才能不被反编译,不被hook。

    正向和逆向不会冲突,只要一起学习,才能更好的加深自己对于开发的理解,做出更好的程序。

    参考链接:

    逆向经验实战

    iOS非越狱逆向分析实战

    Theos安装及配置

    相关文章

      网友评论

          本文标题:iOS逆向开发之小试牛刀

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