iOS应用逆向工程之初窥门径

前言:

最近刚刚接触逆向这一块,之前一直觉得是很高大上的一个方向,有点可望而不可即的样子?;登珊现?,开始了逆向之路,这两天一直在研究这一块,目前仅仅是砸了壳,得到了.h文件然后用hopper进行了简单的分析。所以这篇文章主要分享一下这几天遇到的坑以及解决方法,做一个记录同时也希望能帮助到跟我一样的人。OK,话不多说,开始。

1、开发的准备工作

  • 首先需要一部iPhone或者iPad,iPhone的话版本要在10.2.0以下。我用的是全新的6s,初始版本是10.0.2,是可以越狱的。
  • 关于越狱的话,我是直接用的PP助手,傻瓜式的越狱方式啊哈哈。因为手机版本的问题,Mac版的PP越狱助手支持的版本在iOS 10以下,所以用的Windows版的pp助手,直接一键越狱。当然也可以用其他的软件,爱思助手等等。
  • 越狱过程很顺利越狱教程链接 照着教程来没有遇到问题。如果遇到问题可以到论坛上提问也可以在文章末提出来,可以一起交流。
  • 记得在Cydia里面添加一些必要的软件源和插件,软件源的话我只添加了PP助手的,插件的话,Openssh、Cycript、Apple File Conduit"2" 这几个,很多是内置了。

2、开始逆向的第一步

有些从 APPStore 商店下载安装的APP 默认都被苹果加了一层壳,加了壳后我们就无法使用dump导出头文件等其它操作,常用的砸壳工具有dumpdecrypted、Clutch、AppCrackr。
这里我们使用dumpdecrypted砸壳。下载地址。通过make命令得到的dumpdecrypted.dylib就是我们的工具。

此处有一个乌龟壳

  • “砸壳” :概括一下大概需要这几个步骤,
    1、手机或者iPad中打开需要砸壳的APP。
    2、SSH连接到手机,找到ipa包的位置并记录下来。
    3、Cycript附加到进程,找到App的Documents文件夹位置并记录下来。
    4、拷贝dumpdecrypted.dylib 到App的Documents 的目录。
    5、执行砸壳后,并拷贝出砸壳后的文件,然后完成。
第一步:分别找到两个地址

我这里用的是WiFi连接,使用上有一定的局限性,更好的方案是使用USB连接,推荐两篇文章,之后我也会用USB进行连接。debugserver和lldb进行调试、iOS逆向工程之Hopper+LLDB调试第三方App .
用到的命令:

1, ssh root@10.10.245.208 (iP地址为设备的iP地址)
2, ps -e (查看进程)
3, cycript -p (附加进程)
4, [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory
inDomains:NSUserDomainMask][0]

演示图

** 注意: ** 如果直接用IP地址不可以的话,可以打开电脑的pp助手,在工具里面有一个“打开ssh通道”,手动打开之后,弹窗会提示将设备的IP地址端口映射到了本地,并且给出了提示如何进入root权限,比如,ssh root@localhost -p 2223,密码都是默认的alpine,输入后即可进入了。
iOS逆向-用Cycript进行运行时分析(微信应用),iOS运行时工具-Cycript 。 这两篇文章可以了解一下Cycript。

第二步:拷贝dumpdecrypted.dylib 到App的Documents的目录,需要用到的命令:

scp ~/dumpdecrypted.dylib root@10.10.242.107:/var/mobile/Containers/Data/Application/2B4C6281-C015-4FF3-A8EC-5E5C7554D447/Documents 利用Scp命令进行拷贝)
截图
第三步 :砸壳

进入到 Documents 目录下,然后进行砸壳:
需要用到的命令:
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/
Application/BFED82A3-3238-4F41-B797-C1CB584CBE05/qqlive.app/qqlive


演示3

然后就会生成.decrypted的文件,这个就是砸壳后的文件。我们接下来就可以对他做操作了,比如导出头文件。
** 注意: ** 我在这里遇到问题了,一是无法用IP进行连接拷贝动态库,二是当我手动把动态库拷贝到documents/下面然后去进行砸壳的时候提示我,dyld: could not load inserted library 'dumpdecrypted.dylib' because no suitable image found. Did find:
dumpdecrypted.dylib: required code signature missing for 'dumpdecrypted.dylib'
错误。

  • 在这里我一并解答,关于拷贝的话,可以直接手动拷贝的,用PP助手、iExplorer、IFunBox都可以。那为什么砸壳还失败呢,那是因为这里编译出的动态库还需要做一个签名。步骤如下:
  • 列出可签名证书
    security find-identity -v -p codesigning
  • 为dumpecrypted.dylib签名
    codesign --force --verify --verbose --sign "iPhone Developer: xxx xxxx (xxxxxxxxxx)" dumpdecrypted.dylib

之后重新上传砸壳既可。

第四步:拷贝出.decrypted文件并导出头文件

输入命令:

class-dump -S -s -H xxx.decrypted -o ./Headers (前面是脱壳文件的位置,后面是导出.h文件的目标文件夹)

** 如果, **没有成功,不要紧张,应该是导出头文件时指定的ARM架构不正确。所以,解决方法如下:
armv6:iPhone、 iPhone2、iPhone3G、 第一代和第二代iPod Touch
armv7: iPhone4、 iPhone4S
armv7s: iPhone5、iPhone5C
arm64: iPhone5S、iPhone6、iPhone6s

使用class-dump的--arch配置项来指定了具体的架构,例如
class-dump --arch armv7 -S -s -H WeChat.decrypted -o ./Headers

  • 操作步骤和结果如下图所示, 导出成功,你可以慢慢的分析了。


    演示4

简单说一下Hopper disassembler

下方就是使用Hopper打开“脱壳”文件的效果。当然,你也可以使用IDA Pro来查看,当然此处我们使用的是Hopper。从下方的截图来看,结果是OK的。


演示5
  • 至此,分享告一段落。

  • 等接下来继续研究反编译。

  • 再有技术问题一起交流。

  • 在学习以及研究过程中,感谢在网络上无私分享的那些人,是你们在不经意间帮助了很多人,很开心能有这样的技术氛围~

  • 书籍的话在看《iOS应用逆向工程》第二版 ,受益匪浅

  • 博客的话也学习了几篇文章,iOS逆向工程之砸壳iOS逆向之脱壳。

  • 写此篇分享是在高铁上,一边享受回家的愉悦一边汇总着知识点。如有不足敬请指出。

  • 希望能和志同道合之人多多交流,共同提高。

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

推荐阅读更多精彩内容

  • 逆向工程的目的 1)分析竞品的最新研究或者产品原型(包括所用的技术,所使用的框架)2)学术/学习目的。3)破解应用...
    90后的思维阅读 6,940评论 3 14
  • 逆向工程的目的 1)分析竞品的最新研究或者产品原型(包括所用的技术,所使用的框架) 2)学术/学习目的。 3)破解...
    零度_不结冰阅读 690评论 0 2
  • 1.砸壳前的准备 一台越狱iphone??,根据以往经验,测试用的手机永远不要紧跟潮流升级系统,在越狱手机中打开Cy...
    I_m赵昊阅读 1,261评论 4 10
  • 转发自 2016-07-07何兆林腾讯Bugly 如果您有耐心看完这篇文章,您将懂得如何着手进行app的分析、追踪...
    树懒啊树懒阅读 10,643评论 5 63
  • 对于压岁钱,清代富察敦崇在其《燕京岁时记》中这样记载:“以彩绳穿线,编作龙形,置于床脚,谓之压岁钱。尊长者赐小儿者...
    村夫野人阅读 704评论 0 51