《iOS应用逆向工程》学习笔记(六)使用dumpdecrypted砸壳

2024-05-26 10:38

本文主要是介绍《iOS应用逆向工程》学习笔记(六)使用dumpdecrypted砸壳,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本来是打算用AppCrackr砸壳的,结果砸壳都是失败的,开始以为是App的加密太厉害了,后来才知道是因为AppCrackr太暴力了,引起公愤,结果被人投诉招致核心功能被迫关闭了。

幸好在RE官网搜到一个用dumpdecrypted砸壳的帖子。下面是我砸壳的经历。


一、造锤

1.下载dumpdecrypted源码

下载地址:https://github.com/stefanesser/dumpdecrypted/archive/master.zip,接着在Mac中解压。


2.确认iOS设备的版本 

iOS 7.1.x,原帖中snakeninny略啰嗦。。。 


3.Makefile 

cd到dumpdecrypted目录,看看Makefile文件的内容:

CC_BIN=`xcrun --sdk iphoneos --find gcc`
GCC_UNIVERSAL=$(GCC_BASE) -arch armv7 -arch armv7s -arch arm64
SDK=`xcrun --sdk iphoneos --show-sdk-path`CFLAGS =
GCC_BASE = $(GCC_BIN) -Os $(CFLAGS) -Wimplicit -isysroot $(SDK) -F$(SDK)/System$all: dumpdecrypted.dylibdumpdecrypted.dylib: dumpdecrypted.o$(GCC_UNIVERSAL) -dynamiclib -o $@ $^%.o: %.c$(GCC_UNIVERSAL) -c -o $@ $<clean:rm -f *.o dumpdecrypted.dylib

大多数看不懂。。。

接下来我们需要确认的是GCC_UNIVERSALSDK这两个变量的值和iOS设备的环境保持一致。


4.确保Makefile的配置和真机环境一致

在Mac中打开终端,输入xcrun --sdk iphoneos --show-sdk-path命令,查看SDK版本:

/Applications/Xcode 5.1.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk

Xcode的SDK版本是7.1.x,GCC_UNIVERSAL这个变量值可以略过。


5.创建动态库文件

(1)一错

在确保Makefile中对动态库的设置和iOS真机环境一致后,在当前目录下输入: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
/bin/sh: /Applications/Xcode: No such file or directory
make: *** [dumpdecrypted.o] Error 127

原因是找不到/Applications/Xcode来执行其中的一些脚本。 好吧,我的Mac中有3个Xcode:/Applications/Xcode 5.0.2, /Applications/Xcode 5.1.1, /Applications/Xcode 6 Beta4,就是没有/Applications/Xcode。 

没事,将Xcode 5.1.1重命名为Xcode就行了:

$ sudo mv Xcode\ 5.1.1.app/ Xcode.app/

(2)再错

再make,还是报错,错误信息和上面一样。

不怕,我们还有xcode-select这个小伙伴,通常Xcode找不到之类的错误都应该找它帮忙:

$ xcode-select -p
/Applications/Xcode 5.1.1.app/Contents/Developer

原来xcrun查找cmd tool时的路径还是Xcode 5.1.1/,当然什么都找不到了。这时候将它重置就行了(默认是/Applications/Xcode.app/):
$ sudo xcode-select -r
$ xcode-select -p 
/Applications/Xcode.app/Contents/Developer

(3)成功

再make,成功,输出如下:

$ 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$ ls
Makefile          dumpdecrypted.c          dumpdecrypted.o
README               dumpdecrypted.dylib

可以看到目录中多了两个文件,其中dylib后缀的就是我们要创建的动态库文件,也就是用来砸壳的锤子。


二、砸壳

1.将“锤子”放入设备中

查看iOS设备的IP地址,然后在Mac上使用scp命令将dumpdecrypted.dylib文件放到iOS设备中:

$ scp dumpdecrypted.dylib root@192.168.xxx.xxx:/var/tmp
root@192.168.xxx.xxx's password:
dumpdecrypted.dylib                           100%   81KB  81.0KB/s   00:00

2.砸

选定一个让你觉得非常不爽或非常感兴趣的app,我就随便选了一个HBGC。在iOS设备上打开iFile,查到它的可执行文件的路径为:/var/mobile/Applications/EBBD26E9-DDBA-481E-9403-84D159436889/HBGC.app/HBGC


然后用SSH连到iOS设备上,cd到刚刚动态库的路径:/var/tmp。

$ ssh root@192.168.xxx.xxx
root@192.168.xxx.xxx's password:
root# cd /var/tmp/
root# ls
FlipswitchCache/                              com.apple.audio.hogmode.plist
L65ancd.sock=                                 com.apple.tccd/
L65d.sock=                                    com.apple.timed.plist
MediaCache/                                   cydia.log
RestoreFromBackupLock*                        dumpdecrypted.dylib*
SpringBoard_reboot_flag                       launchd/
com.apple.assistant.bundleservicecache.plist  mobile_assertion_agent.log

砸壳(久等了):

root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Applications/EBBD26E9-DDBA-481E-9403-84D159436889/HBGC.app/HBGC
mach-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: @0xd5a90(from 0xd5000) = a90
[+] Found encrypted data at address 00004000 of length 3047424 bytes - type 1.
[+] Opening /private/var/mobile/Applications/EBBD26E9-DDBA-481E-9403-84D159436889/HBGC.app/HBGC 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 HBGC.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 4a90
[+] Closing original file
[+] Closing dump file

成果:
root# ls
FlipswitchCache/                              com.apple.audio.hogmode.plist
HBGC.decrypted                                com.apple.tccd/
L65ancd.sock=                                 com.apple.timed.plist
L65d.sock=                                    cydia.log
MediaCache/                                   dumpdecrypted.dylib*
RestoreFromBackupLock*                        launchd/
SpringBoard_reboot_flag                       mobile_assertion_agent.log
com.apple.assistant.bundleservicecache.plist
其中的HBGC.decrypted就是目标产物,接下来IDA各种斧头水果刀上吧。

三、附录

1.xcrun

首先简单看看xcrun的帮助信息:

$ xcrun -h
Usage: xcrun [options] <tool name> ... arguments ...Find and execute the named command line tool from the active developer
directory.The active developer directory can be set using `xcode-select`, or via the
DEVELOPER_DIR environment variable. See the xcrun and xcode-select manual
pages for more information.Options:-h, --help                  show this help message and exit--version                   show the xcrun version-v, --verbose               show verbose logging output--sdk <sdk name>            find the tool for the given SDK name--toolchain <name>          find the tool for the given toolchain-l, --log                   show commands to be executed (with --run)-f, --find                  only find and print the tool path-r, --run                   find and execute the tool (the default behavior)-n, --no-cache              do not use the lookup cache-k, --kill-cache            invalidate all existing cache entries--show-sdk-path             show selected SDK install path--show-sdk-version          show selected SDK version--show-sdk-platform-path    show selected SDK platform path--show-sdk-platform-version show selected SDK platform version

xcrun的作用在于从一个激活的开发者目录(active developer directory)中查找一个command line tool,并执行这个工具。 

例如上面的Makefile中: GCC_BIN=`xcrun --sdk iphoneos --find gcc` 

分解来看: 

(1)xcrun --find gcc

$ xcrun --find gcc
/Applications/Xcode 5.1.1.app/Contents/Developer/usr/bin/gcc
这一步获取了gcc这个tool的路径,设为cmd_tool_path。 

(2)xcrun --sdk iphoneos cmd_tool_path 

这一步通过路径名获取到了具体的工具程序,这个工具对应iphoneos的SDK,并执行该工具。 

(3)GCC_BIN是一条shell命令,对应的就是这个查找和执行工具的过程。 


再如: xcrun --sdk iphoneos --show-sdk-path 

它的作用就是查找对应于iphoneos SDK的SDK并执行。

$ xcrun --show-sdk-path
/Applications/Xcode 5.1.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk $ xcrun --sdk iphoneos --show-sdk-path
/Applications/Xcode 5.1.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk

2.xcode-select

首先看看简单的帮助信息:

$ xcode-select -h
Usage: xcode-select [options]Print or change the path to the active developer directory. This directory
controls which tools are used for the Xcode command line tools (for example,
xcodebuild) as well as the BSD development commands (such as cc and make).Options:-h, --help                  print this help message and exit-p, --print-path            print the path of the active developer directory-s <path>, --switch <path>  set the path for the active developer directory-v, --version               print the xcode-select version-r, --reset                 reset to the default command line tools path

它的作用在于打印或改变active developer directory,而xcrun就是从这个directory中查找对应的工具。 通常它的值为:
/Applications/Xcode 5.1.1.app/Contents/Developer

例如,在/Applications/Xcode 5.1.1.app/Contents/Developer/usr/bin中,可以看到一些上文需要的gcc:
$ ls
BuildStrings          gcc               ndisasm
CpMac               gcov-4.2          opendiff
DeRez               git               projectInfo
GetFileInfo          git-cvsserver          resolveLinks
ImageUnitAnalyzer     git-receive-pack     scntool
MergePef          git-shell          sdef
MvMac               git-upload-archive     sdp
ResMerger          git-upload-pack          svn
Rez               gnumake               svnadmin
RezDet               hdxml2manxml          svndumpfilter
RezWack               headerdoc2html          svnlook
SetFile               ibtool               svnrdump
SplitForks          ibtool3               svnserve
TextureAtlas          ibtoold               svnsync
UnRezWack          ictool               svnversion
actool               instruments          symbols
agvtool               iprofiler          xcodebuild
amlint               ld               xcrun
以上只是部分输出。


注:以上是我个人在自己的机子上的砸壳经历,大家要根据自己的实际情况进行,详细请参考:用dumpdecrypted砸壳



这篇关于《iOS应用逆向工程》学习笔记(六)使用dumpdecrypted砸壳的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1004234

相关文章

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.