iOS逆向开发之小试牛刀

2019-01-18  本文已影响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安装及配置

上一篇下一篇

猜你喜欢

热点阅读