iOS逆向工程的探索与学习

1.砸壳前的准备

一台越狱iphone📱,根据以往经验,测试用的手机永远不要紧跟潮流升级系统,在越狱手机中打开Cydia,搜索并分别安装OpenSSH,Cycript

下载dumpdecrypted,地址在这https://github.com/stefanesser/dumpdecrypted/archive/master.zip

下载class_dump,地址也在这

http://stevenygard.com/download/class-dump-3.5.tar.gz

下载hopper,地址同样在这

https://mega.nz/#!OU9FSRbQ!9wB0NNgxncsu7j5kW9GVKeS_7hE2OhJBtbrff8zAlYM

至此,基本的准备已达成,可继续以下操作步骤


2.砸壳工具dumpdecrypted的使用

设置Makefile中的SDK字段和越狱设备系统版本一致,打开你下载dumpdecrypted的文件夹,接着打开Makefile文件(之前误以为双击打开就行,结果一直默认黑盒子打开,查看不了内容,原因是工具使用错了,那么就搜索相关打开工具吧,可以使用的工具有多种,这里提供一种打开免费工具,sublime,自行下载,打开Makefile是如下内容)

Makefile内容

在苹果终端输入

xcrun --sdk iphoneos --show-sdk-path

会显示出当前xcode的sdk版本

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk

可见我当前默认的使用版本是iPhondeOS9.0版本,这个跟我的手机系统版本刚好符合,则Makefile中的SDK=‘xcrun --sdk iphoneos --show-sdk-path’不用作修改,但比方说你的手机是8.4的版本,那么此处xcode的sdk版本就应当是xcode6.4(iPhoneOS8.4),老旧xcode版本可在下方链接下载。

注意,如果你电脑原本安装xcode,保存两者时,第二个xcode会显示为xcode 2,此时在mac终端输入xcrun --sdk iphoneos --show-sdk-path,显示的对应iPhoneOS版本依旧会跟手机的版本不符,可将原有xcode名称先修改为xcode3(3为任意数字,只是为了跟新下载的版本区分开名字),再将新下载的xcode 2重命名为xcode(一旦造好锤子🔨,或者砸壳完毕之后可将文件名修改过来,避免影响mac上相关程序的使用,切记切记)

老旧xcode版本的下载

https://developer.apple.com/downloads/index.action


3.造锤子🔨

完成上述操作之后,在mac终端cd进你下载dumpdecrypted的路径,紧接着输入make指令,可看到在该文件目录下会多处dumpdecrypted.dylibdumpdecrypted.o两个文件,dumpdecrypted.dylib就是我们要造的锤子🔨,锤子在下面会用到,拷贝到桌面备份(提示:做好的锤子🔨是可以重复使用的,所以可以拷贝一份放好,不用每次都造锤子🔨)

make之后生成的文件

4.通过mac终端控制手机📱

先前已经在越狱手机安装了openSSH,现在可通过mac来控制手机📱,需要确保的是mac跟手机处于同一个网段,并且需要知道手机的IP地址是多少,查看十分简单,在手机连接wifi处点击蓝色感叹号,进入即可看见对应IP地址(新手教程略啰嗦)

点击蓝色感叹号,即可在弹出界面看到当前ip

接下来在终端输入ssh root@你的手机IP地址,在弹出来需要输入password时输入alpine默认密码(T.T,新手踩过的一个坑,一直以为是我mac的密码,折腾了许久,贱笑了各位),出现如下图情况即为连接手机📱成功。

zhaozhenbodeMacBook-Pro:~ zhaozhenbo$ ssh root@192.168.2.11

root@192.168.2.11's password:

zhaoxianshengde-iPhone:~


5.寻找反编译app文件路径

ok,接着在越狱的手机上找到你要反编译的app的文件路径,为了避免影响,最好只运行你要砸壳的app,在mac终端输入ps -e,终端会显示运行app的文件路径(为方便找到你想找的目录,也可将ps -e指令,替换成ps -e | grep var这样终端显示的路径会更少,可自行测试相关指令的使用)

zhaoxianshengde-iPhone:~ root# ps -e | grep var

365 ??         0:01.10 /usr/libexec/pkd -d/var/db/PlugInKit-Annotations

506 ??         0:00.32 /private/var/db/stash/_.yogkf3/Applications/ServerDocuments.app/PlugIns/ServerFileProvider.appex/ServerFileProvider

783 ??         0:00.38 /private/var/db/stash/_.yogkf3/Applications/MobileCal.app/PlugIns/CalendarWidget.appex/CalendarWidget

785 ??         0:17.48 /private/var/db/stash/_.yogkf3/Applications/Stocks.app/PlugIns/StocksWidget.appex/StocksWidget

1342 ??         1:38.49 /var/mobile/Containers/Bundle/Application/40E7256C-8741-4C87-8A13-F82FDB46FEDC/idx.app/idx

1918 ttys000    0:00.00 grep var

zhaoxianshengde-iPhone:~ root# cycript -p idx

我砸壳的app叫爱定客,所以终端中显示的/var/mobile/Containers/Bundle/Application/40E7256C-8741-4C87-8A13-F82FDB46FEDC/idx.app/idx就是我要找的路径


6.接着用Cycript找出你看不爽的app的Documents目录路径

zhaoxianshengde-iPhone:~ root# cycript -p 1163

cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomans:NSUserDomainMask][0]

#"file:///var/mobile/Containers/Data/Application/FBF6F40C-D270-444A-A4F2-BCB628EDCD70/Documents/"

cy#

'/var/mobile/Containers/Data/Application/FBF6F40C-D270-444A-A4F2-BCB628EDCD70/Documents/'即为所得,没有多余的“//”


7.将步骤3.造锤子🔨中的锤子放入到上述获得的Documents目录下

(执行的指令为“scp 锤子路径 root@你的ip地址:反编译app路径”,注意中间的空格,为防止各位尝试出错,可直接复制后做相应替换即可,password依旧是alpine)

zhaozhenbodeMacBook-Pro:~ zhaozhenbo$ scp /Users/zhaozhenbo/Desktop/逆向学习/砸壳工具/dumpdecrypted-master/dumpdecrypted.dylib root@192.168.3.107:/var/mobile/Containers/Data/Application/FBF6F40C-D270-444A-A4F2-BCB628EDCD70/Documents/

root@192.168.3.107's password:

dumpdecrypted.dylib                           100%  193KB 192.9KB/s   00:00


8.砸~壳

来到最激动人心的时候了,锤子已经放好,那么就开始砸吧(先cd到Documents目录下)

zhaoxianshengde-iPhone:~ root# cd /var/mobile/Containers/Data/Application/FBF6F40C-D270-444A-A4F2-BCB628EDCD70/Documents/

zhaoxianshengde-iPhone:/var/mobile/Containers/Data/Application/FBF6F40C-D270-444A-A4F2-BCB628EDCD70/Documents root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/40E7256C-8741-4C87-8A13-F82FDB46FEDC/idx.app/idx

mach-o decryption dumper

DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.

[+] detected 32bit ARM binary in memory.

[+] offset to cryptid found: @0x5ea08(from 0x5e000) = a08

[+] Found encrypted data at address 00004000 of length 21364736 bytes - type 1.

[+] Opening /private/var/mobile/Containers/Bundle/Application/40E7256C-8741-4C87-8A13-F82FDB46FEDC/idx.app/idx for reading.

[+] Reading header

[+] Detecting header type

[+] Executable is a FAT image - searching for right architecture

[+] Correct arch is at offset 16384 in the file

[+] Opening idx.decrypted for writing.

[+] Copying the not encrypted start of the file

[+] Dumping the decrypted data into the file

[+] Copying the not encrypted remainder of the file

[+] Setting the LC_ENCRYPTION_INFO->cryptid to 0 at offset 4a08

[+] Closing original file

[+] Closing dump file

找到二进制文件

zhaoxianshengde-iPhone:/var/mobile/Containers/Data/Application/FBF6F40C-D270-444A-A4F2-BCB628EDCD70/Documents root# ls

TCSdkConfig.plist  dumpdecrypted.dylib guide.zip      loading.html

cache   error.html idx.decrypted  lsqTempDir

com.bugrpt.data    guide info       web

以.decrypted结尾的文件即为我们需要找的二进制文件,上图中idx.decrypted就是我砸壳完需要反编译的二进制文件。执行到这一步,感动哭,一开始没什么经验,做砸壳到这的时候确实踩了不少的坑。


9.复制二进制文件

将二进制文件拷贝至mac桌面,利用class_dump和hopper对二进制文件进行反编译,

(注意:自ios8.3版本开始,苹果公司对应用文件共享进行了限制,简而言之就是旧版本的iTools等查看文件工具都看不了document文件下的内容,这很悲催,二进制文件拉不过来,就没有办法进行反编译工作了)

这里还是挺折腾人的,没有查看工具,该怎么复制呢?针对这个问题,我在简书等进行过相关的搜索,但一无所获,大家都是用工具复制的,应该是他们使用的测试机系统没有超过8.3,所以才没有我这种烦恼吧。我使用的查看工具有iTools、pp助手、iExplorer、iFunBox等,但都没法查看到Docunments文件夹。后来终于找到了解决方法,思考通过mac终端直接将二进制文件从手机复制至mac,但应该是需要相关的ssh指令才行,我对这一块并不是很熟悉,所以百度了一下“如何在linux系统下使用ssh进行拷贝文件?”

good,黄天不负有心人,在终端敲一下试下,看到正在复制。。。泪流满面,折腾了我挺久T.T

zhaozhenbodeMacBook-Pro:~ zhaozhenbo$ scp root@192.168.2.11:/var/mobile/Containers/Data/Application/1D0B6021-1DE0-4FF5-9515-38B769287E36/Documents/idx.decrypted /Users/zhaozhenbo/Desktop/idx/idd.decrypted

root@192.168.2.11's password:

idx.decrypted                                 100%   50MB   2.5MB/s   00:20

zhaozhenbodeMacBook-Pro:~ zhaozhenbo$


10.反编译

二进制文件成功拿到,那么反编译就不是问题了,借助下面的两个强大工具,可以轻松获取整个app的h头文件

i.探索class_dump工具的使用,简单点说可以反编译出项目中h文件声明方法,用法十分简便,下面我举个栗子🌰:

http://www.bubuko.com/infodetail-258073.html

ii.探索hopper工具的使用,反编译二进制文件,呈现的是一坨汇编代码,点击工具右上角按钮,可以大致查看文件的内容,用法简单,请自行尝试,下载地址:

https://mega.nz/#!OU9FSRbQ!9wB0NNgxncsu7j5kW9GVKeS_7hE2OhJBtbrff8zAlYM



最后,在砸壳的过程中,借鉴了优秀文章的经验,如(简书上作者蓝月空谷写的

iOS逆向工程

如果文章有任何不足之处,欢迎补充纠正

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

推荐阅读更多精彩内容