iOS的逆向工程

逆向工程的目的

1)分析竞品的最新研究或者产品原型(包括所用的技术,所使用的框架)2)学术/学习目的。3)破解应用的使用权限4)识别竞品潜在的侵权行为

逆向工程的分析工具

进行的iOS逆向工程的一个关键就是工具的使用,工欲善其事,必先利其器。

工具分类工具名称

越狱工具盘古越狱

查看文件工具PP助手,iExplorer,iFunbox,iTool

砸壳工具dumpdecrypted,离合器

查看头文件工具类转储

反汇编工具Hopper,IDA Pro

调试器Cycript,gdb

UI分析工具揭示

网络分析工具查尔斯

第一部分砸壳查看APP头文件

工具

一。App Store上的应用都使用了FairPlay DRM数字版权加密保护技术。我们要对文件进行反汇编,而IPA都是加密的,哪怎么办呢?所以在逆向之前我们需要先对应用进行砸壳。这里我们使用的是dumpdecrypted。(还可以使用Clutch,这里我们就不讲Clutch了)

dumpdecrypted 代码

Dumps decrypted mach-o filesfromencrypted iPhone applicationsfrommemory to disk.This tool is necessaryforsecurity researchers to be able to look under the hoodofencryption.

二。class-dump是用于解析Mach-O文件中存储的OC运行时信息的。他能生成类的声明,分类,协议。和otool -ov类似,但是由于class-dump的结果是以OC代码展示的,所以有很强的可读性。

类转储代码

Thisisa command-line utilityforexamining the Objective-C runtime information storedinMach-O files.It generates declarationsforthe classes, categoriesandprotocols. Thisisthe same information provided by using ‘otool -ov’,but presentedasnormal Objective-C declarations, so itismuch more compactandreadable.

三。一台越狱手机

iOS版为了保证安全性,所有的应用都是在沙盒中运行。所以要想完成逆向操作,我们需要更高级的权限。没有越狱设备那就无法展开学习和研究工作。

步骤

一。好安装dumpdecrypted状语从句:class-dump以后,在越狱机上的Cydia上安装openSSH,通过MAC终端控制手机,openSSH密码是alpine(手机和电脑需要在同一网段,然后点开设置查看当前手机分配的IP地址)

Mac-mini-Damon:~ damon$ ssh [email protected]@192.168.2.108's password:

iPhone4:~ root#

二,越狱在机上Cydia上安装Cycript

Cycript是一个理解Objective-C语法的javascript解释器,这意味着我们能够在一个命令中用Objective-C或者javascript,甚至2者兼用。它能够挂钩正在运行的进程,能够在运行时修改应用的很多东西。使用Cycript有如下好处:1.我们能够挂钩正在运行的进程,并且找出正被使用的类信息,例如view controllers,内部和第3方库,甚至程序的delegate的名称。2.对于一个特定的类,例如View Controller, App delegate或者任何其他的类,我们能够得到所有被使用的方法名称。3.我们能够得到所有实例变量的名称和在程序运行的任意时刻实例变量的值。4.我们能够在运行时修改实例变量的值。5.我们能够执行Method Swizzling,例如替换一个特定方法的实现。6.我们可以在运行时调用任意方法,即使这个方法目前并不在应用的实际代码当中。

Mac-mini-Damon:dumpdecrypted-master damon$ cd /Users/damon/Desktop/dumpdecrypted-masterMac-mini-Damon:dumpdecrypted-master damon$ make`xcrun --sdk iphoneos --find gcc`-Os  -Wimplicit -isysroot`xcrun --sdk iphoneos --show-sdk-path`-F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/Frameworks -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/PrivateFrameworks -arch armv7 -arch armv7s -arch arm64 -c -o dumpdecrypted.o dumpdecrypted.cMac-mini-Damon:dumpdecrypted-master damon$ lsMakefile        dumpdecrypted.c    dumpdecrypted.oREADME          dumpdecrypted.dylibMac-mini-Damon:dumpdecrypted-master damon$

三,找出要反编译APP的执行文件目录,为了避免干扰,最好杀掉其他进程,只打开反编译的应用程序,使用ps -e命令得到路径

iPhone4:~ root# ps -e PID TTY          TIMECMD1556??0:00.10/usr/libexec/afc2d -S -L -d /1564??0:03.07/usr/libexec/deleted --idleExit1566??0:00.15/System/Library/PrivateFrameworks/GeoServices.framework/geod1568??0:00.36/usr/libexec/mobileassetd1570??0:00.63/System/Library/Frameworks/AssetsLibrary.framework/Support/assetsd1612??0:00.37sshd: root@ttys0001622??0:06.20/var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/QQ.app/QQ1623??0:00.10/System/Library/Frameworks/UIKit.framework/Support/pasteboardd1613ttys0000:00.05-sh1628ttys0000:00.01ps -eiPhone4:~ root#

的其中/var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/QQ.app/QQ就是我们要找的

四。使用Cycript找出反compile-APP的文件目录路径

iPhone4:~ root# cycript -p QQcy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]#"file:///var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/Documents/"cy#

的其中/var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/Documents/就是我们要找的文件目录路径

五。将dumpdecrypted_7.dylib拷贝产品到文件目录下,此处是使用SCP方式,也可以使用IFUNBOX或者PP助手进行文件操作(这里的dumpdecrypted_7.dylib是别人已经生成好的)地址

Mac-mini-Damon:~ damon$ scp /Users/damon/Desktop/dumpde/dumpdecrypted_7.dylib [email protected]:/var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/Documents/[email protected]'s password:

dumpdecrypted_7.dylib                        100%  81KB  81.0KB/s  00:00   

Mac-mini-Damon:~ damon$

六,就是然后使用dumpdecrypted砸壳

iPhone4:~ root# cd /var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/Documents/iPhone4:/var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/Documents root# DYLD_INSERT_LIBRARIES=dumpdecrypted_7.dylib /var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/QQ.app/QQmach-o decryption dumperDISCLAIMER:This tool is only meantforsecurity research purposes,notforapplication crackers.[+] detected32bit ARM binaryinmemory.[+] offset to cryptidfound:@0x4a4c(from0x4000) = a4c[+] Found encrypted data at address00004000of length46284800bytes - type1.[+] Opening /private/var/mobile/Applications/B1215D4A-24B7-480F-B91D-8F5386B0211A/QQ.app/QQforreading.[+] Reading header[+] Detecting header type[+] Executable is a FAT image - searchingforright architecture[+] Correct arch is at offset16384inthe file[+] Opening QQ.decryptedforwriting.[+] Copying thenotencrypted start of the file[+] Dumping the decrypted data into the file[+] Copying thenotencrypted remainder of the file[+] Setting the LC_ENCRYPTION_INFO->cryptid to0at offset4a4c[+] Closing original file[+] Closing dump file

iPhone4:~ root# ls(null)/        CustomFace/        Image/        Other/        QQAppSetting.plist  TRctBundle/  app.m                dumpdecrypted_7.dylib  wallet/AVEngine.log    Doc/              LuaPluginDir/  QMusicSdk/    QQFlow.ini          Theme/      client_wording.json  giftInfo/              webappCache2/Audio/          FileRecv/          MQZONEv1/      QQ.decrypted  QQHeadThumb/        ThemeInfo/  content/            patchScripts/          wupseq.datConfigStorage/  FileTransferTemp/  MyFolder/      QQ.ini        QZoneImageThumb/    Video/      contents/            tbmg.dataroot#

的其中QQ.decrypted就是我们要的破解文件

七,使用class-dump将文件解析

将QQ.decrypted拷贝产品到Mac的桌面文件夹,使用class-dump进行解析

Mac-mini-Damon:~ damon$ cd /Users/damon/Desktop/testMac-mini-Damon:test damon$class-dump--archarmv7QQ.decrypted>QQ.mMac-mini-Damon:test damon$

得到的QQ.m文件就是我们需要的头文件,class-dump --arch armv7 QQ.decrypted > QQ.m因为我是用的手机是iPhone4做的(没办法,只能用公司不用的4进行越狱),所以使用armv7,其他型号使用相对应的4(armv7),4s(armv7),5(armv7),5s(arm64),6(arm64),6s(arm64)

1)分析从苹果商店下载的IPA包

class-dump--archarmv7QQ.decrypted>QQ.m

2)分析从越狱平台下载的越狱IPA包

class-dump-HMYXJ.app-o/Users/damon/Desktop/test/headMYXJ

第二部分分析APP UI

显示简介

Reveal能够在运行时调试和修改iOS应用程序。它能连接到应用程序,并允许开发者编辑各种用户界面参数,这反过来会立即反应在程序的UI上。就像用FireBug调试HTML页面一样,在不需要重写代码、重新构建和重新部署应用程序的情况下就能够调试和修改iOS用户界面。

显示查看任意应用程序的高级技巧介绍了如何在越狱设备上查看任意应用程序的技巧:

1)iOS设备需要越狱,iOS6以上2)安装Reveal,越狱设备与安装Reveal的Mac在同一wifi内。3)点击菜单Help / Show Reveal LibraryinFinder,获取libReveal.dylib4)将libReveal.dylib上传到设备的/Library/MobileSubstrate/DynamicLibraries5)编辑并上传一个libReveal.plist,格式和/Library/MobileSubstrate/DynamicLibraries下面的其他plist类似,其中的filter的bundle写要查看的iOS App的bundle Id。格式如下:{ Filter = { Bundles = ("你要查看的app的bundle Id"); }; }6)重启iOS设备

第三部分反编译

一:Hopper简介

Hopper是一款运行在Mac、Windows和Linux下的调试(os x only)、反汇编和反编译的交互式工具。可以对32、64位的MAC程序、Windows程序和IOS程序(arm)进行调试、反编译等。

功能

1)能够分析出函数的代码块、变量等2)可以生成代码块的控制流图CFG3)可以通过Python脚本来调用Hopper的其他一些功能,使用更加灵活4)在MAC上还可以通过GDP动态调试分析5)对Objective C的极佳的支持——能够解析出Selector、字符串和发送的消息6)反编译,生成伪代码7)分析快速,且占用资源少

二:IDA Pro简介

IDA Pro是一个非常强大的反汇编和调试工具,支持Windows,Linux,Mac OS X平台

IDA Pro权威指南(第2版)

第四部分网络接口分析

查尔斯简介

Charles是Mac下常用的对网络流量进行分析的工具,类似于Windows下的Fiddler。在开发iOS程序的时候,往往需要调试客户端和服务器的API接口,这个时候就可以用Charles,Charles能够拦截SSL请求、模拟慢速网络、支持修改网络请求包并多次发送、能够篡改Request和Response等强大的功能。下面介绍安装和使用方法。

功能

1)拦截SSL请求2)模拟慢速网络菜单Proxy中的Throttle Setting可以对此进行设置3)支持修改网络请求包并多次发送4)断点功能Charles能够断到发送请求前(篡改Request)和请求后(篡改Response)5)捕获记录控制 可以过滤出关注的请求。菜单Proxy中的Record Setting可以对此进行设置

第五部分使用调试器钩子

gdb调试命令已经集成在Xcode中去了用于调试App程序但是直接在硬件设备上执行时,可以获得更多的功能可以调试设备上所有的进程快速分离和重新附着到某个进程上没有桌面形式的操作系统上进行开发程序时的调试攻击者可以修改gdb命令的脚本文件,来达到操作设备上任何程序的运行、修改、监控设备上的所有的程序

iOS的应用程序安全(22) - 使用GDB进行运行时分析和操作

iOS的安全攻防(二十)动态调试利器--- GDB基础篇

iOS的逆向工程读书笔记

第六部分如何防止被反编译

代码混淆的必要性以及方法:

1) 使用c语言实现关键的代码逻辑2)使用宏替换

逆向工程参考文章

iOS逆向 -  dumpdecrypted工具砸壳

iOS的安全 - 使用Cycript进行运行时分析

dumpdecrypted砸壳

用dumpdecrypted给应用砸壳

用dumpdecrypted给应用砸壳

IOS逆向工程之砸壳

iOS的逆向工程-dumpdecrypted砸壳

手把手教你反编译别人的应用

iOS使用Class-dump分析App内部实现

Objective-C Class-dump安装和使用方法

使用类转储-Z分析支付宝应用

IOS安全 - 使用类转储-Z导出IOS应用类信息

iOS APP安全杂谈

iOS APP安全杂谈之二

iOS APP安全杂谈之三

iOS URL Scheme劫持 - 在未越狱的iPhone 6上盗取支付宝和微信支付的帐号密码

显示真机查看任意APP

使用显示调试自己和他人的应用

分析微信来优化自己的应用

#微信抢红包#源码直接分享

你可能感兴趣的:(iOS的逆向工程)