微信逆向砸壳笔记
我们需要用到的工作有
class-dump-安装包(不会编译class-dump下载安装包)
一台越狱的iPhone
(Cydia) openSSH
(Cydia) iFile
(Cydia) Cycript
上面提到的工具都要准备好,接来下我们就可以开始操作砸壳了。我们就拿微信来练练手吧~~
解密微信可执行文件
当然,我们从App Store下载安装的应用都是加密的,所以我们需要用一些工具为下载的app解密,俗称“砸壳”。
首先我们需要一台已经越狱了的iPhone手机,然后进入Cydia安装需要的三款工具openSSH、Cycript、iFile。(调试程序时可以方便地查看日志文件)
PS:笔者砸壳用的手机是iPhone5C iOS版本:8.0.2(12A405)
在电脑上打开iTunes下载一个最新版本的微信,然后连上iPhone,用iTunes装上刚刚下载的微信。(建议把原有的微信删掉再安装)
连接ssh
打开Mac的bash,用ssh连上iPhone(确保iPhone跟Mac在同一个网段)。openSSH的root密码默认为:alpine
Mac连接iPhone的ssh
寻找微信可执行文件
接下来我们需要找到微信的可执行文件的具体位置 ,我们先把iPhone上的所有程序都关掉,唯独留下微信。然后输入命令ps -e | grep WeChat 或 ps -e | grep /var/mobile
微信的可执行文件路径
寻找Documents具体路径
最后我们需要用Cycript找出微信的Documents具体路径。输入命令cycript -p WeChat
进入cy#模式输入
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, ES)[0]
或
[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
就能找出Documents的具体路径
control+Z 可退出模式
Documents具体路径
编译dumpdecrypted
进入dumpdecrypted源码的目录,输入指make来编译dumpdecrypted。一般make后会在当前目录下生成一个dylib文件。
编译dumpdecrypted
scp拷贝指令
使用scp指令把dumpdecrypted.dylib拷贝到iPhone的Documents路径目录下输入指令:scp 源文件路径:目标文件路径
例如: scp dumpdecrypted.dylib root@192.168.2.7:/var/mobile/Containers/Data/Application/BAE4C92C-1B94-4E80-984D-1D6BE4ED415E/Documents/
scp
开始砸壳!!!
回到手机的ssh上,输入dumpdecrypted的指令。
dumpdecrypted的具体用法:DYLD_INSERT_LIBRARIES=/PathFrom/dumpdecrypted.dylib /PathTo
例如:DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/C25B88DE-CCC3-4AC2-87BF-A8642B4B4B81/WeChat.app/WeChat
dumpdecrypted敲壳
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: @0x56a4c(from 0x56000) = a4c
[+] Found encrypted data at address 00004000 of length 38748160 bytes - type 1.
[+] Opening /private/var/mobile/Containers/Bundle/Application/2C920956-E3D6-4313-BD88-66BD24CEBE9B/WeChat.app/WeChat 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 WeChat.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 4a4c
[+] Closing original file
[+] Closing dump file
这样就代表砸壳成功了,当前目录下会生成砸壳后的文件,即WeChat.decrypted。同样用scp命令把WeChat.decrypted文件拷贝到电脑上,接下来我们要正式的dump微信的可执行文件了。
scp远程下载到本地,此操作不用登录到手机窗口运行,打开要存放WeChat.decrypted文件的本地目录即可
输入指令:scp -r root@ip:文件目录/文件名 /目的地
例如:scp -r root@192.168.2.7:/var/mobile/Containers/Data/Application/BAE4C92C-1B94-4E80-984D-1D6BE4ED415E/Documents/WeChat.decrypted ./
scp远程下载
dump微信可执行文件
现在可以开始编译刚刚从Github下载下来的class-dump源码了,然后用xcode编译即可生成class-dump。(不会编译的可以去下载dmg版)
导出微信头文件
使用class-dump为刚刚砸壳后的文件WeChat.decrypted进行头文件提取。
指令:class-dump -s -S -H --arch armv7 WeChat.decrypted -o ./hearder8.1-armv7
注意:--arch armv7 根据手机指令集的具体情况来定
指令集对照表:
armv6设备:iPhone,iPhone2,iPhone3G
armv7设备:iPhone3GS,iPhone4,iPhone4S
armv7s设备:iPhone5,iPhone5C
arm64设备:iPhone5S,iPhone6,iPhone6S
参考文:
链接:http://www.jianshu.com/p/5533c36947d5