iOS逆向编程

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代码保护,数据加密,反调试,反注入,代码混淆

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