美文网首页iOS资料逆向iOS Developer
iOS逆向工程的探索与学习

iOS逆向工程的探索与学习

作者: I_m赵昊 | 来源:发表于2016-10-24 17:55 被阅读511次

    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逆向工程

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

    相关文章

      网友评论

      • yohunl:IOS 9.x的越狱手机也是可以用pp 助手等将文件拷贝出来的,无需命令行
      • Joy___:嘻嘻好搭
      • Joy___:写得太乱了 格式
        I_m赵昊:@Martin_Joy :cold_sweat: 不是很擅长文字表达,会多写,多借鉴,多改进

      本文标题:iOS逆向工程的探索与学习

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