逆向工程之砸壳

来自:

一、前言:

原来的书文应该来自iosre论坛,此文转发自:http://www.cnblogs.com/wfwenchao/p/4669140.html 供本人备份查阅需求
在《iOS应用逆向工程》4.6.2节中,大家曾引用应用一加Cake源的AppCrackr 1.7版给App砸壳。这种措施轻巧残忍,省时省力,但便是因为它过度低价有木有,导致差没多少具备iDevice客户都可轻易上手,随意亵玩,所以广大顾客都拿它来破解程序,并非读书《iOS应用逆向工程》,简直能够说是婶可忍叔不可忍!那也致使了iOS越狱开采社区普及以为那一个软件助长了盗版的气焰,未有退出低等野趣,对MotorolaCake源实行了由此可见声讨,责令其限时整顿改进。迫于压力,MotorolaCake在前段时间将AppCrackr下架,而书中关系的xsellize源中的AppCrackr则是1.5旧版,已不能在高端系统中接纳。所以,为了响应产业界反盗版的主张,提倡毛子任“自身入手安生乐业”的革命精神,让“砸壳”那件事苏醒单纯的钻研指标,在那边我们会利用更偏geek一些的dumpdecrypted情势来给App砸壳,不再推荐AppCrackr、Clutch、Crackulous等纯UI情势。由于dumpdecrypted刚经历过三回大提高,近年来网络能够找到的运用教程均已过期,所以这里大家手把手带大家进行叁次完整的“砸壳 class-dump”,请大家希图板凳瓜子汽水,起首围观。假诺能对着计算机,边看边做,善莫斯中国科学技术大学学焉!楼猪才疏学浅,如有纰漏,敬请斧正,专心的聆听,污言秽语,免开尊口,感激帮忙!

原创  2014年08月03日 21:44:46

一、前言:

从APPStore上边下载下来的顺序都有壳,我们不能够对他实行另外操作,iOS逆向的率先步正是脱壳。上边跟作者一块实战一下。

一、设置

标签:

从应用软件Store下边下载下来的前后相继都有壳,我们无法对她开展任何操作,iOS逆向的第一步便是脱壳。上面跟本人一齐实战一下。

二、工具:

  1. 下载dumpdecrypted的源码
    源码下载地址是“https://github.com/stefanesser/dumpdecrypted/archive/master.zip”,下载后请将其解压至你不乏先例的职位
    楼猪这里把它存放在/Users/wwc(自个儿计算机的称号)/Desktop/Code目录下
  2. 显明你的iDevice系统版本
    设置 -> 通用 -> 关于本机
  3. 修改Makefile中的SDK字段
    dumpdecrypted必得利用与iOS版本一样的SDK版本编写翻译,才具符合规律职业。展开“终端(Terminal)”,输入
    xcrun –sdk iphoneos –show-sdk-path,查看输出,看看近日的私下认可SDK是怎样版本,比如楼猪的是“/Applications/Xcode.app/Contents/Developer/Platforms/一加OS.platform/Developer/SDKs/HTCOS6.1.sdk”。这里分2种状态:

iOS逆向工程

二、工具:

1.一步越狱手提式有线电话机(提议选4s)

i. 要是你选取的iOS版本同以上输出的SDK版本符合(举个例子楼猪使用的难为iOS 6.1.5),则不用对dumpdecrypted工程中的文件作任何退换;
ii. 尽管您使用的iOS版本同以上输出的SDK版本不符则需求改变Makefile(友情提示:可用文本编辑器展开)中的
SDK=xcrun –sdk iphoneos –show-sdk-path
为iOS版本一样的SDK版本。什么,你只有二个SDK?去https://developer.apple.com/downloads/index.action下载旧版本的Xcode,然后把里面包车型大巴SDK提抽取来。什么,不会领取?自个儿去Google一下,罚你明晚表睡觉了!提抽出了旧版的SDK后,楼猪习贯把它们位于新版SDK一样的目录下,然后将
SDK=xcrun –sdk iphoneos –show-sdk-path
改为
SDK=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.X.sdk

10379

1.一步越狱手提式无线电话机

2.dumpdecrypted

SDK=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.X.sdk

自然是筹算用AppCrackr砸壳的,结果砸壳都以退步的,伊始感到是App的加密太厉害了,后来才晓得是因为AppCrackr太暴力了,引起民愤,结果被人起诉招致主题功用被迫关闭了。

2.dumpdecrypted

三、步骤:

,即iOS版本需求与SDK版本同样。 注意,5.1版SDK编写翻译出的dylib是向下兼容的,能够用于iOS5.0,6.1版SDK同理。(注意:这几个有待验证,楼猪还没这么干过)

还好在RE官方网站搜到三个用dumpdecrypted砸壳的帖子。上面是本身砸壳的经验。

三、步骤:

3.1 下载对应的次第包

  1. 修改Makefile中的GCC_UNIVERSAL字段和dumpdecrypted.c
    只要您的iOS/SDK版本是7.0,则goto “这里继续:”。假设并不是7.0,则必要修改Makefile中的GCC_UNIVERSAL字段和dumpdecrypted.c。将Makefile中的
    GCC_UNIVERSAL=$(GCC_BASE) -arch armv7 -arch armv7s -arch arm64

一、造锤

3.1 下载对应的程序包

先是笔者动用作者早已越狱的One plus4s从Appstore下载APP,此处小编以某前后相继为例。并应用PP帮手等工具导入到Computer里。

改为

1.下载dumpdecrypted源码

首先小编动用自家一度越狱的小米4s从Appstore下载APP,此处小编以某前后相继为例。并动用PP帮手等工具导入到计算机里。

3.2 查看是不是加密

GCC_UNIVERSAL=$(GCC_BASE) -arch armv7 -arch armv7s

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

3.2 查看是不是加密

解压ipa文件,获得里面包车型客车主文件,对其举行框架结构查询

再将dumpdecrypted.c第76行的

2.认同iOS设备的版本 

解压ipa文件,获得里面的主文件,对其进展架构查询

file 主文件名

if (lc->cmd ==LC_ENCRYPTION_INFO || lc->cmd == LC_ENCRYPTION_INFO_64)

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

file 主文件名

如图:

改成

3.Makefile 

如图:

图片 1

if(lc->cmd == LC_ENCRYPTION_INFO)

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

图片 2

此APP协理三种架构,我们查询下它的加密景况

,保存。这里继续:接着直接cd到“/Users/wwc/Desktop/Code/dumpdecrypted-master/”下,然后输入“make”并回车,生成“/Users/wwc/Desktop/Code/dumpdecrypted-master/dumpdecrypted.dylib”。

[plain] view plain copy

此应用软件协助三种架构,大家询问下它的加密情况

otool-l 主文件名|grep crypt

  1. 太麻烦?直接下载楼猪编写翻译好的文件
    https://github.com/iosre/Ready2Rock/blob/master/dumpdecrypted_5.dylib
    https://github.com/iosre/Ready2Rock/blob/master/dumpdecrypted_6.dylib
    https://github.com/iosre/Ready2Rock/blob/master/dumpdecrypted_7.dylib

CC_BIN=`xcrun --sdk iphoneos --find gcc`  

otool -l 主文件名 | grep crypt

如图:

二、砸壳
1.将“锤子”归入设备中
翻开iOS设备的IP地址,然后在Mac上采取scp命令将dumpdecrypted.dylib文件放到iOS设备中:

GCC_UNIVERSAL=$(GCC_BASE) -arch armv7 -arch armv7s -arch arm64  

如图:

图片 3

$ scp dumpdecrypted.dylib root@192.168.xxx.xxx:/var/tmp

SDK=`xcrun --sdk iphoneos --show-sdk-path`  

图片 4

cryptid 1代表加密,cryptid 0代表未加密。多少个分别对应着armv7和arm64,也正是它们都有加密。

root@192.168.xxx.xxx's password:

CFLAGS =  

cryptid 1代表加密,cryptid 0代表未加密。多少个分别对应着armv7和arm64,也即是它们都有加密。

3.3 使用dumpdecrypted砸壳

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

GCC_BASE = $(GCC_BIN) -Os $(CFLAGS) -Wimplicit -isysroot $(SDK) -F$(SDK)/System$  

3.3 使用dumpdecrypted砸壳

地址:传送门->点我

2.砸

all: dumpdecrypted.dylib  

地址:传送门->

3.3.1 编译dumpdecrypted.dylib文件

选定一个令你感觉十分不爽或非常感兴趣的app,小编就随意选了一个QQ。在iOS设备上展开iFunBox,查到它的可施行文件的门道为:/var/mobile/Applications/xxxxxxxx/QQ.app/QQ

dumpdecrypted.dylib: dumpdecrypted.o  

3.3.1 编译dumpdecrypted.dylib文件

率先我们供给编写翻译我们的dumpdecrypted.dylib文件,越狱手提式有线电话机的iOS的版本要和SDK的本子同样。我手提式有线电话机是iOS8.1.3,由此小编选拔了8.1的SDK,在Xcode6.第11中学得以找到。

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

        $(GCC_UNIVERSAL) -dynamiclib -o $@ $^  

首先大家要求编写翻译大家的dumpdecrypted.dylib文件,越狱手提式有线电话机的iOS的版本要和SDK的版本同样。作者手提式有线电电话机是iOS8.1.3,由此小编选择了8.1的SDK,在Xcode6.第11中学能够找到。

开采终端大家输入一下命令查找下笔者急需的SDK地址:

$ ssh root@192.168.xxx.xxx

%.o: %.c  

展开终端大家输入一下限令查找下小编要求的SDK地址:

find/-name iPhoneOS8*

root@192.168.xxx.xxx's password:

        $(GCC_UNIVERSAL) -c -o $@ $<  

find / -name iPhoneOS8*

自家这里的获得的地点为:

root# cd /var/tmp/

clean:  

本人这里的拿走的地点为:

/Applications/Xcode6.1.1/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk

root# ls

        rm -f *.o dumpdecrypted.dylib  

/Applications/Xcode6.1.1/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk

咱俩需求修改Makefile文件中的

FlipswitchCache/ com.apple.audio.hogmode.plist

大部看不懂。。。

咱俩须求修改Makefile文件中的

SDK=`xcrun--sdk iphoneos--show-sdk-path`

L65ancd.sock= com.apple.tccd/

接下去大家需求认可的是GCC_UNIVERSALSDK那五个变量的值和iOS设备的条件保持一致。

SDK=`xcrun --sdk iphoneos --show-sdk-path`

改为:

L65d.sock= com.apple.timed.plist

4.保证Makefile的布局和真机境况一致

改为:

SDK=/Applications/Xcode6.1.1/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk

MediaCache/ cydia.log

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

SDK=/Applications/Xcode6.1.1/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk

假设是的sdk是7.0的,必要一连去掉arm64的剧情。8.0上述版本请略过

RestoreFromBackupLock* dumpdecrypted.dylib*

[plain] view plain copy

一旦是的sdk是7.0的,必要接二连三去掉arm64的原委。8.0以上版本请略过

大家要求将Makefile文件中的

SpringBoard_reboot_flag launchd/

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

我们须求将Makefile文件中的

GCC_UNIVERSAL=$(GCC_BASE)-arch armv7-arch armv7s-arch arm64

com.apple.assistant.bundleservicecache.plist mobile_assertion_agent.log

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

GCC_UNIVERSAL=$ -arch armv7 -arch armv7s -arch arm64

改为

砸壳(久等了):

5.开立动态库文件

改为

GCC_UNIVERSAL=$(GCC_BASE)-arch armv7-arch armv7s

root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Applications/xxxxxxxx/QQ.app/QQ
mach-o decryption dumper

(1)一错

GCC_UNIVERSAL=$ -arch armv7 -arch armv7s

我们再将dumpdecrypted.c文件中的

DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.

在保证Makefile中对动态库的设置和iOS真机情状一致后,在当前目录下输入:make。

咱俩再将dumpdecrypted.c文件中的

if(lc->cmd==LC_ENCRYPTION_INFO||lc->cmd==LC_ENCRYPTION_INFO_64)

[ ] 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/QQ.app/QQ 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 QQ.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

而是失利了,错误音信如下:

if (lc->cmd == LC_ENCRYPTION_INFO || lc->cmd == LC_ENCRYPTION_INFO_64)

改为:

成果:
root# ls

[plain] view plain copy

改为:

if(lc->cmd==LC_ENCRYPTION_INFO)

FlipswitchCache/ com.apple.audio.hogmode.plist

`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  

if (lc->cmd == LC_ENCRYPTION_INFO)

下边走入到dumpdecrypted根目录,make进行编写翻译,得到dumpdecrypted.dylib

QQ.decrypted com.apple.tccd/

/bin/sh: /Applications/Xcode: No such file or directory  

下边踏入到dumpdecrypted根目录,make实行编写翻译,获得dumpdecrypted.dylib

3.3.2 定位二进制文件地方

L65ancd.sock= com.apple.timed.plist

make: *** [dumpdecrypted.o] Error 127  

3.3.2 定位二进制文件地点

咱俩在管理器上解压缩那些ipa包,取到里面包车型大巴Info.plist文件,获取里面包车型地铁Bundle identifier,举个例子:com.ianisme.xxxxx

L65d.sock= cydia.log

原因是找不到/Applications/Xcode来执行个中的一部分本子。 好吧,小编的Mac中有3个Xcode:/Applications/Xcode 5.0.2, /Applications/Xcode 5.1.1, /Applications/Xcode 6 Beta4,就是从未/Applications/Xcode。 

咱俩在管理器上解压缩这二个ipa包,取到里面包车型客车Info.plist文件,获取里面包车型地铁Bundle identifier,举例:com.ianisme.xxxxx

如图:

MediaCache/ dumpdecrypted.dylib*

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

如图:

图片 5

RestoreFromBackupLock* launchd/

[plain] view plain copy

图片 6

在二弟大上跑小编提供的那么些德姆o:

SpringBoard_reboot_flag mobile_assertion_agent.log

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

在手提式无线电话机上跑笔者提供的这么些Demo:

传送门->点本身下载

com.apple.assistant.bundleservicecache.plist

(2)再错

传送门->

找到对应Bundle identifier的附和的resourcesDirectoryU奇骏L和dataContainerU普拉多L

个中的QQ.decrypted正是目的产物

再make,依旧报错,错误消息和下边一样。

找到对应Bundle identifier的呼应的resourcesDirectoryUWranglerL和dataContainerU凯雷德L

如图:

///////////////////////注意://///////////////////////////
这一段楼猪未有赢得注脚,有心的同伴能够证实一下,然后上报给楼猪,楼猪再度先谢过了。

哪怕,我们还会有xcode-select那些小友人,常常Xcode找不到之类的错误都应当找它扶助:

如图:

图片 7

class-dump
在全新的21世纪,App的可推行文件一般都以fat binary,也正是说贰个二进制文件里富含适合八个CPU架构使用的可实践文件,尽管CPU架构是向下包容的(也便是说armv64足以实践armv7s的吩咐,反之则不行),但向下包容一般会造成部分性质的就义。那样假若四个binary既富含适用于armv7架构的可实践文件,又带有armv7s的,还含有arm64的,就代表它能够在魅族4(armv7),4s(armv7),5(armv7s),5s(arm64)上都发布百分之百的品质。即便除了天秤座以外的任何星座顾客一般是感受不到这几个本性的晋级换代的~不过,机器比双子座还要水瓶座,它在实行一个fat binary时,会选择最契合本人CPU的极度可施行文件,别的的可实行文件其实是不曾到手试行的。由此dumpdecrypted.dylib起效果的独有实际获得实行的那么些可施行文件,举个例证,就算Victim里带有armv7和armv7s那2种架构,而大家的操作机是一台中兴5/4,那么dumpdecrypted砸掉的是armv7s/armv7那某个的壳,armv7/armv7s局部仍是有壳的。自然地,class-dump的功能对象必须是砸掉壳的binary,所以大家要在class-dump时钦赐指标,在本例中,正是
class-dump –arch armv7s Victim.decrypted

[plain] view plain copy

图片 8

3.3.3 进行脱壳管理

class-dump –arch armv7 Victim.decrypted

$ xcode-select -p  

3.3.3 举办脱壳处理

收获地点后大家将编写翻译好的dumpdecrypted.dylib传输到dataContainerU途达L的tmp目录下

///////////////////////注意://///////////////////////////

/Applications/Xcode 5.1.1.app/Contents/Developer  

获得位置后大家将编写翻译好的dumpdecrypted.dylib传输到dataContainerUENVISIONL的tmp目录下

如图:

楼猪直接试行了class-dump命令提取了头文件,命令如下:

原来xcrun查找cmd tool时的不二等秘书籍如故Xcode 5.1.1/,当然什么都找不到了。那时候将它重新恢复设置就行了(暗中认可是/Applications/Xcode.app/):

如图:

图片 9

class-dump -H QQ.decrypted -o /Users/wwc/Desktop/Code/headers

[plain] view plain copy

图片 10

下一场切换成dataContainerUEvoqueL的tmp目录实行如下代码:

伺机命令试行落成,查看那么些目录,你想要的事物就在在那之中了。

$ sudo xcode-select -r  

接下来切换来dataContainerU昂CoraL的tmp目录实践如下代码:

DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib/var/mobile/Containers/Bundle/Application/FEA0A0C0-EF52-4D76-8EEC-422D5D8331D4/XXXX.app/XXXX

那是楼猪借鉴了各方经验,加上本人亲自出手操作获得的定论,大概某个地点存在破绽,希望各位小同伙积极指正。二哥在此拜谢了。

$ xcode-select -p   

DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/FEA0A0C0-EF52-4D76-8EEC-422D5D8331D4/XXXX.app/XXXX

张开脱壳

/Applications/Xcode.app/Contents/Developer  

拓宽脱壳

如图:

(3)成功

如图:

图片 11

再make,成功,输出如下:

图片 12

在tmp目录下生成了二个XXXX.decrypted那就是脱壳后的主文件

[plain] view plain copy

在tmp目录下生成了贰个XXXX.decrypted那正是脱壳后的主文件

咱俩把公文用scp命令导出

$ make  

大家把文件用scp命令导出

如图:

`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  

如图:

图片 13

`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  

图片 14

3.4 armv7抽出管理

$ ls  

3.4 armv7收取管理

那儿大家把XXXX.decrypted的扩充名去掉,使用otool查看脱壳情况

Makefile          dumpdecrypted.c          dumpdecrypted.o  

那时候我们把XXXX.decrypted的强大名去掉,使用otool查看脱壳情状

图片 15

README               dumpdecrypted.dylib  

图片 16

咱俩开采六13人的壳未有脱掉,因为本人用的是Samsung4s,管理器架构是armv7,只可以脱那有些的壳。

能够看到目录中多了七个公文,当中dylib后缀的正是大家要开创的动态库文件,也正是用来砸壳的榔头。

小编们开采62个人的壳未有脱掉,因为小编用的是魅族4s,管理器架构是armv7,只好脱那部分的壳。

大家将app的armv7收收取来,就足以保障app只以armv7格局运营,指令集向下包容,也正是4s以上的机型都得以运作的。不得不说未来4s照旧威武,随地都少不了她。

二、砸壳

大家将app的armv7抽取出来,就足以保障app只以armv7方式运营,指令集向下包容,也正是4s上述的机型都可以运作的。不得不说未来4s照样威武,随地都少不了他。

运转如下代码:

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

运作如下代码:

lipo XXXX-thin armv7-output XXXX_armv7

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

lipo XXXX -thin armv7 -output XXXX_armv7

XXXX_armv7就是最后的无壳主文件,将ipa包里面包车型客车轮换掉,那便是三个无壳的APP了。

[plain] view plain copy

XXXX_armv7正是终极的无壳主文件,将ipa包里面的轮换掉,那正是三个无壳的应用程式了。

四、总结:

$ 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。

[plain] view plain copy

$ 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  

砸壳(久等了):

[plain] view plain copy

root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Applications/EBBD26E9-DDBA-481E-9403-84D159436889/HBGC.app/HBGC  

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: @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  

成果:

[plain] view plain copy

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的声援音讯:

[plain] view plain copy

$ xcrun -h  

Usage: xcrun [options]  ... 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             find the tool for the given SDK name  

  --toolchain           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

[plain] view plain copy

$ 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并实践。

[plain] view plain copy

$ 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

率先走访轻便的帮带消息:

[plain] view plain copy

$ 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 , --switch   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中搜索对应的工具。 平常它的值为:

[plain] view plain copy

/Applications/Xcode 5.1.1.app/Contents/Developer  

比方说,在/Applications/Xcode 5.1.1.app/Contents/Developer/usr/bin中,能够见见有个别上文供给的gcc:

[plain] view plain copy

$ 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砸壳

本文由星彩网app下载发布于计算机编程,转载请注明出处:逆向工程之砸壳

TAG标签: 星彩网app下载
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。