用dumpdecrypted给App砸壳
来源:互联网 发布:it软件行业账务 编辑:程序博客网 时间:2024/05/16 19:47
用dumpdecrypted给App砸壳
本文来自:http://bbs.iosre.com/t/dumpdecrypted-app/22
参考文章:https://github.com/jackrex/FakeWeChatLoc
以下部分内容摘自《iOS应用逆向工程》第二版,以iOS 8为环境编写,应该也支持iOS 7和9,请大家注意。
在《iOS应用逆向工程》4.6.2节中,我们曾推荐使用iPhoneCake源的AppCrackr 1.7版给App砸壳。这种方式简单粗暴,省时省力,但正是因为它过于方便有木有,导致几乎所有iDevice用户都可轻松上手,随便亵玩,所以不少用户都拿它来破解程序,而不是学习《iOS应用逆向工程》,简直可以说是婶可忍叔不可忍!这也导致了iOS越狱开发社区普遍认为这个软件助长了盗版的气焰,没有脱离低级趣味,对iPhoneCake源进行了强烈谴责,责令其限期整改。迫于压力,iPhoneCake在前段时间将AppCrackr下架,而书中提到的xsellize源中的AppCrackr则是1.5旧版,已不能在高级系统中使用。所以,为了响应业界反盗版的呼声,提倡毛主席“自己动手丰衣足食”的革命精神,让“砸壳”这件事恢复单纯的研究目的,在这里我们会使用更偏geek一些的dumpdecrypted方式来给App砸壳,不再推荐AppCrackr、Clutch、Crackulous等纯UI方式。由于dumpdecrypted刚经历过一次大升级,目前网上可以找到的使用教程均已过期,所以这里我们以一个虚构的TargetApp.app为例,手把手带大家进行一次完整的“砸壳 + class-dump”,请大家准备板凳瓜子汽水,开始围观。如果能对着电脑,边看边做,善莫大焉!楼猪才疏学浅,如有纰漏,敬请斧正,洗耳恭听,污言秽语,免开尊口,感谢支持!
下载dumpdecrypted的源码
源码下载地址是“https://github.com/stefanesser/dumpdecrypted/archive/master.zip”,下载后请将其解压至你习惯的位置,例如楼猪为/Users/snakeninny/Code/
,解压后生成/Users/snakeninny/Code/dumpdecrypted-master/
。
编译源码
snakeninnysiMac:~ snakeninny$ cd /Users/snakeninny/Code/dumpdecrypted-master/snakeninnysiMac:dumpdecrypted snakeninny$ 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.c `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 -dynamiclib -o dumpdecrypted.dylib dumpdecrypted.o
上面的make命令执行完毕后,会在当前目录下生成一个dumpdecrypted.dylib文件,这就是我们等下砸壳所要用到的榔头。此文件生成一次即可,以后可以重复使用,下次砸壳时无须再重新编译。
用ps命令定位待砸壳的可执行文件
snakeninnysiMac:~ snakeninny$ ssh root@yourIPFunMaker-5:~ root# ps -e PID TTY TIME CMD 1 ?? 3:28.32 /sbin/launchd……5717 ?? 0:00.21 /System/Library/PrivateFrameworks/MediaServices.framework/Support/mediaartworkd 5905 ?? 0:00.20 sshd: root@ttys000 5909 ?? 0:01.86 /var/mobile/Containers/Bundle/Application/03B61840-2349-4559-B28E-0E2C6541F879/TargetApp.app/TargetApp 5911 ?? 0:00.07 /System/Library/Frameworks/UIKit.framework/Support/pasteboardd 5907 ttys000 0:00.03 -sh 5913 ttys000 0:00.01 ps –e
因为iOS上只打开了一个StoreApp,所以唯一的那个含有/var/mobile/Containers/Bundle/Application/
字样的结果就是TargetApp可执行文件的全路径。
用Cycript找出TargetApp的Documents目录路径。
FunMaker-5:~ root# cycript -p TargetApp
cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
“file:///var/mobile/Containers/Data/Application/D41C4343-63AA-4BFF-904B-2146128611EE/Documents/”
将dumpdecrypted.dylib拷贝到Documents目录下。拷贝命令如下:
snakeninnysiMac:~ snakeninny$ scp /Users/snakeninny/Code/dumpdecrypted/dumpdecrypted.dylib root@192.168.2.2:/var/mobile/Containers/Data/Application/D41C4343-63AA-4BFF-904B-2146128611EE/Documents/dumpdecrypted.dylib 100% 193KB 192.9KB/s 00:00
这里采用的是scp方式,也可以使用iFunBox等工具来操作。
开始砸壳
DYLD_INSERT_LIBRARIES=/path/to/dumpdecrypted.dylib /path/to/executable
实际操作起来就是:
FunMaker-5:~ root# cd /var/mobile/Containers/Data/Application/D41C4343-63AA-4BFF-904B-2146128611EE/Documents/FunMaker-5:/var/mobile/Containers/Data/Application/D41C4343-63AA-4BFF-904B-2146128611EE/Documents root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/03B61840-2349-4559-B28E-0E2C6541F879/TargetApp.app/TargetAppmach-o decryption dumperDISCLAIMER: This tool is only meant for security research purposes, not for application crackers.[+] detected 32bit ARM binary in memory.[+] offset to cryptid found: @0x81a78(from 0x81000) = a78[+] Found encrypted data at address 00004000 of length 6569984 bytes - type 1.[+] Opening /private/var/mobile/Containers/Bundle/Application/03B61840-2349-4559-B28E-0E2C6541F879/TargetApp.app/TargetApp for reading.[+] Reading header[+] Detecting header type[+] Executable is a plain MACH-O image[+] Opening TargetApp.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 a78[+] Closing original file[+] Closing dump file
当前目录下会生成TargetApp.decrypted,即砸壳后的文件:
FunMaker-5:/var/mobile/Containers/Data/Application/D41C4343-63AA-4BFF-904B-2146128611EE/Documents root# ls TargetApp.decrypted dumpdecrypted.dylib OtherFiles
赶紧把砸壳后的文件拷贝到OSX上备用吧,class-dump、IDA等工具已经迫不及待啦。
以上6步还算简洁明了,但可能会有朋友问,为什么要把dumpdecrypted.dylib拷贝到Documents目录下操作?
问得好。我们都知道,StoreApp对沙盒以外的绝大多数目录没有写权限。dumpdecrypted.dylib要写一个decrypted文件,但它是运行在StoreApp中的,与StoreApp的权限相同,那么它的写操作就必须发生在StoreApp拥有写权限的路径下才能成功。StoreApp一定是能写入其Documents目录的,因此我们在Documents目录下使用dumpdecrypted.dylib时,保证它能在当前目录下写一个decrypted文件,这就是把dumpdecrypted.dylib拷贝到Documents目录下操作的原因。
最后来看看如果不放在Documents目录下,可能会出现什么问题:
FunMaker-5: /var/mobile/Containers/Data/Application/D41C4343-63AA-4BFF-904B-2146128611EE/Documents root# mv dumpdecrypted.dylib /var/tmp/FunMaker-5: /var/mobile/Containers/Data/Application/D41C4343-63AA-4BFF-904B-2146128611EE/Documents root# cd /var/tmpFunMaker-5:/var/tmp root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /private/var/mobile/Containers/Bundle/Application/03B61840-2349-4559-B28E-0E2C6541F879/TargetApp.app/TargetAppdyld: could not load inserted library 'dumpdecrypted.dylib' because no suitable image found. Did find: dumpdecrypted.dylib: stat() failed with errno=1Trace/BPT trap: 5
这里errno的值是1,即Operation not permitted
,砸壳失败。
class-dump丫
class-dump --arch armv7s Target.decrypted
或
class-dump --arch armv7 Target.decrypted
- 用dumpdecrypted给App砸壳
- 用dumpdecrypted给App砸壳
- 用dumpdecrypted给App砸壳
- 用dumpdecrypted给App砸壳
- 用dumpdecrypted给App砸壳
- 用dumpdecrypted给App砸壳
- 用dumpdecrypted给App砸壳
- 用dumpdecrypted给App砸壳
- 用dumpdecrypted给App砸壳
- 用dumpdecrypted给App砸壳
- iOS安全—dumpdecrypted APP砸壳
- dumpdecrypted砸壳
- iOS逆向工程(简单利用"dumpdecrypted"给ipa砸壳)
- IOS应用逆向工程之App砸壳:通过dumpdecrypted.dylib
- iOS逆向--dumpdecrypted砸壳
- dumpdecrypted
- iOS_逆向_使用dumpdecrypted砸壳
- iOS dumpdecrypted砸壳(解密AppStore下载的应用程序)
- win10系统安装sqlserver2005提示服务无法启动
- thinkphp数组处理
- 最大后验估计(MAP)
- Visual Studio 中使用 SQLite
- RDK-B-CMAgent
- 用dumpdecrypted给App砸壳
- Android App 性能优化总结
- esxi(vsphere):打开虚拟机和主机之间的copy/paste功能
- 【Day43】PHP中用PDO查询Mysql来避免SQL注入风险的方法
- 安卓真机测试:Installation error: INSTALL_CANCELED_BY_USER
- 进程管理工具
- String、StringBuffer、StringBuilder的区别
- android在任何一个界面退出此应用
- 安卓——上传头像的功能在一些手机上出现问题