逆向2(class_dump和dumpdecrypted)

otool工具简介

otool(object file displaying tool) :目标文件的展示工具。可以用来发现应用中使用到了哪些系统库,调用了其中哪些方法,使用了库中哪些对象及属性,它是Xcode自带的常用工具。
在mac终端输入otool,就可以看到常用的命令以及参数

  • 例子: 查看支付宝依赖库
//查找支付宝可执行文件的位置
iPhone:/tmp root# ps -e | grep AlipayWallet
2162 ??         0:22.33 /var/mobile/Containers/Bundle/Application/50C881E4-8116-40C8-9922-3963DBD155EE/AlipayWallet.app/AlipayWallet
2581 ttys000    0:00.01 grep AlipayWallet
//将可执行文件拷贝到mac桌面上的test文件夹下
iPhone:/tmp root# scp /var/mobile/Containers/Bundle/Application/50C881E4-8116-40C8-9922-3963DBD155EE/AlipayWallet.app/AlipayWallet [email protected]:/Users/zl/Desktop/test
//回到mac终端查看用到的依赖库
otool -L AlipayWallet

class_dump

  • 简介
    可以将Mach-O文件中的Objective-C运行时的声明的信息导出,即编写OC代码时的 .h文件。classdump是对”otool -ov” 信息的翻译,以一种我们熟悉的易读的方式呈现。
    下载地址 http://stevenygard.com/projects/class-dump/

  • 安装方式
    下载class-dump后,将class-dump复制到/usr/local/bin目录下,
    (需要把文件拷贝到/usr/bin目录下,但是mac这个文件夹权限不开放,不管用什么命令都无法将文件拷到这个目录下,可以/usr/local/bin用这个路径代替/usr/bin路径 因为会先从/usr/local/bin目录加载 然后再加载/usr/bin目录)
    sudo cp /Volumes/class-dump-3.5/class-dump /usr/local/bin
    在终端中输入class-dump,显示class-dump的版本后,就可以正常使用class-dump的命令了,如果没显示,赋予一下权限
    sudo chmod 777 /usr/bin/class-dump

  • class_dump使用(class-dump只能导出未经加密的App的头文件)

得到class-dump的可执行文件以后,就可以导出应用的类的头文件了

命令如下:

class-dump -H 砸壳后文件 -o headers存放目录

例子:看下SpringBoard的头文件

iPhone:/tmp root# ps -e | grep SpringBoard
 1739 ??        10:14.78 /System/Library/CoreServices/SpringBoard.app/SpringBoard
 2586 ttys000    0:00.01 grep SpringBoard
iPhone:/tmp root# scp /System/Library/CoreServices/SpringBoard.app/SpringBoard [email protected]:/Users/zl/Desktop/test
//mac终端 将头文件保存在test文件夹下面
class-dump -s -S -H SpringBoard -o ./test

以下是 class-dump参数含义,终端里输入class-dump就可以看到

-a  显示实例变量偏移

-A  显示实现地址

–arch选择一个指定的架构,如ppc, ppc7400, ppc64, i386, x86_64

-C只显示同正则表达式匹配的类

-f在方法名中查找字符串

-H  在当前目录生成头文件,或者在用-o选项指定的目录生成

-I    对类,目录,协议 按照继承关系(inheritance)进行排序(覆盖-s选项)

-o为-H选项指定输出目录

-r  递归扩展framework,并修复VM共享库

-s  按名称对classes和categories进行排序

-S  按名称对方法(method)进行排序

dumpdecrypted砸壳

  1. 安装
mkdir Code
cd Code/
git clone https://github.com/stefanesser/dumpdecrypted.git
cd dumpdecrypted/
make

上面的make命令执行完毕后,会在当前目录下生成一个dumpdecrypted.dylib文件,这就是砸壳所要用到的。该文件生成一次可重复使用。

  1. 砸壳过程
//定位要砸壳的App的Document目录
iPhone:/ root# cycript -p WeChat
cy# [[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
#"file:///var/mobile/Containers/Data/Application/DCAB7824-7EF6-4F18-813B-39E52FDC2CA7/Documents/"
//退出cycript 去到Documents目录
cy# 
iPhone:/ root# cd /var/mobile/Containers/Data/Application/DCAB7824-7EF6-4F18-813B-39E52FDC2CA7/Documents/
//将dumpdecrypted.dylib拷贝到当前目录
iPhone:/var/mobile/Containers/Data/Application/DCAB7824-7EF6-4F18-813B-39E52FDC2CA7/Documents root# scp [email protected]:/Users/zl/Desktop/dumpdecrypted/dumpdecrypted.dylib .
//获取可执行文件路径   
iPhone:/var/mobile/Containers/Data/Application/DCAB7824-7EF6-4F18-813B-39E52FDC2CA7/Documents root# ps -e | grep WeChat
//开始砸壳
iPhone:/var/mobile/Containers/Data/Application/DCAB7824-7EF6-4F18-813B-39E52FDC2CA7/Documents root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/008FD01E-9421-40B7-A511-FCC23D175C3A/WeChat.app/WeChat
//结束后在documents里面看到WeChat.decrypted,将该文件拷贝到桌面
iPhone:/var/mobile/Containers/Data/Application/DCAB7824-7EF6-4F18-813B-39E52FDC2CA7/Documents root# scp WeChat.decrypted [email protected]:/Users/zl/Desktop/test
// 来到mac终端用class-dump获取.h文件
cd /Users/zl/Desktop/test
class-dump -s -S -H WeChat.decrypted -o ./decrypetfile
补充

StoreApp对沙盒以外的绝大多数目录没有写权限。dumpdecrypted.dylib要写一个decrypted文件,但它是运行在StoreApp中的,与StoreApp的权限相同,那么它的写操作就必须发生在StoreApp拥有写权限的路径下才能成功。StoreApp一定是能写入其Documents目录的,因此我们在Documents目录下使用dumpdecrypted.dylib时,保证它能在当前目录下写一个decrypted文件,这就是把dumpdecrypted.dylib拷贝到Documents目录下操作的原因。

你可能感兴趣的:(逆向2(class_dump和dumpdecrypted))