29

iOS逆向-day1:逆向内容的简介与越狱环境搭建

 5 years ago
source link: http://www.cocoachina.com/ios/20190410/26775.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

总体内容

1、逆向课程简介

2、学习逆向的条件

3、iOS越狱(iOS Jailbreak)的优点和缺点

4、完美越狱和非完美越狱以及如何判断是否越狱成功?

5、Cydia(越狱后的App Store)

6、iphone/Mac必备软件安装以及安装包

7、代码判断设备是否越狱

8、提高工作效率的工具

一、逆向课程简介

1.1、逆向总体图

rmQZZn6.png!web

逆向课程简介

1.2、学习逆向的效果:初级开发 > 高级开发 > 底层开发

1.3、学习逆向的价值

  • 掌握编码的本质,编写高效代码

  • 修改已有APP的功能

  • 学习优秀APP的设计

  • 增强客户端的安全性

  • 通用性极强(越底层,通用性越强)

二、学习逆向的条件

2.1、至少有iOS开发经验:会写 UI界面、多线程网络、数据存储等等

2.2、调试设备:iPhone 6s plus,建议至少iPhone 5S(因为从5S开始支持arm64架构)或者至少是iPad Air、iPad mini2等支持arm64架构的设备

2.3、iOS 9.1完美越狱,建议至少iOS8完美越狱,版本也不能太高,要保证能够完美越狱, 检查手机是否可以越狱

VZRFF3j.png!web

检查手机是否可以越狱

三、iOS越狱(iOS Jailbreak)的优点和缺点

2.1、iOS越狱的优点

  • 打造个性化、与众不同的iPhone:自由安装各种实用的插件、主题、APP;修改系统APP的一些默认行为

  • 自由安装非AppSore来源的APP:“付费APP”秒变“免费APP”;未越狱iPhone安装APP的途径(AppStore、真机调试、通过证书打包签名ipa安装)

  • 灵活管理文件系统,让iPhone可以像U盘那样灵活

  • 给开发者提供了逆向工程的环境

2.2、iOS越狱的缺点

  • 苹果不予保修

  • 费电,越狱后的iOS系统会常驻一些进程,耗电速度约提升10%~20%

  • 在新的iOS固件版本出来的时候,不能及时地进行更新:(1)、每个新版本的固件,都会修复上一个版本的越狱漏洞,使越狱失效;(2)、如果需要保持越狱状态,要等待新的越狱程序发布时,才能升级相应的固件版本

  • 不再受iOS系统默认的安全保护,容易被恶意软件攻击,个人隐私有被窃取的风险

  • 如果安装了不稳定的插件,容易让系统变得不稳定、变慢,甚至出现“白苹果”等问题

bENBZnm.png!web

四、完美越狱和不完美越狱

4.1、完美越狱:越狱后的iPhone可以正常关机和重启

4.2、不完美越狱

  • iPhone一旦关机后再开机时,屏幕就会一直停留在启动画面,也就是“白苹果”状态

  • 能正常开机,但已经安装的破解软件都无法正常使用,需要将设备与PC连接后,使用软件进行引导才能使用

4.3、补充:一般说来,在苹果发布新的iOS固件后,针对该固件的不完美越狱会先发布,随后完美越狱才可能发布;一般较新的系统版本,均为不完美越狱

4.4、越狱方法推荐(我使用的是爱思助手越狱的)

PP助手

e2q6NvI.png!web

爱思助手

uaeu6fv.png!web

4.5、以及如何判断是否越狱成功?

手机桌面是否有 Cydia

q2E7z2M.png!web

提示: Cydia 出现无法加载网络的解决办法

FRnMjmi.png!web

NBNjauz.png!web

工具判断(比如 PP助手 或者 ITools 越狱助手)

eiaUZjq.png!web

五、Cydia(越狱后的 App Store)

5.1、Cydia的简单介绍

  • Cydia(越狱后的 App Store),可以在Cydia中安装各种第三方的软件(插件、补丁、APP)

  • 作者:Jay Freeman (网名:saurik)

aEj6B3i.png!web

Jay Freeman` (网名:`saurik`)

  • 5.2、Cydia安装软件的步骤

步骤1、添加软件源(不同软件的软件源可能不同),下面以 pp助手源: http://apt.25pp.com 为例

b2iuaeq.png!web

步骤2、进入软件源找到对应的软件,开始安装

VN36z2U.png!web

步骤3、如果软件源中的软件太多,可以搜索查找

5.3、SpringBoard

有时候通过Cydia安装完插件后,可能会出现以下界面

qummiq3.png!web

SpringBoard就是iOS的桌面

UVjYjaV.png!web

六、iphone/Mac必备软件安装以及安装包

6.1、建议安装顺序

Q3YFR3f.png!web

6.2、Apple File Conduit "2"(iphone必备软件安装)

补丁的作用(可以访问整个iOS设备的文件系统;类似的补丁还有:afc2、afc2add),可以使用工具 iFunBox

B3uQVrR.png!web

软件源: http://apt.saurik.comhttp://apt.25pp.com

vumayqJ.png!web

uayeAnF.png!web

提示:先在 软件源 里面添加上面软件源的链接,再到pp助手源里面的全部软件包里面下载 Apple File Conduit "2"

6.3、AppSync Unified(iphone必备软件安装)

AppSync Unified补丁的作用:可以绕过系统验证,随意安装、运行破解的ipa安装包

软件源: http://apt.25pp.com

bmAzaan.png!web

iAfauub.png!web

AppSync Unified

6.4、iFile(iphone必备软件安装)

iFile的作用:可以 在iPhone上自由访问iOS文件系统 ;类似的还有Filza File Manager、File Browser

软件源: http://apt.thebigboss.org/repofiles/cydia

bUFfAvM.png!web

BigBoss

qYfURvi.png!web

iFile

6.5、(Mac必备软件安装)

RBVRvim.png!web

iFunBox与PP助手

  • iFunBox :管理文件系统

  • PP助手 :自由安装海量APP;卸载APP;备份APP为ipa安装包(iOS9开始,不再支持备份APP)

6.6、安装包

通常情况下的安装方式

  • 通过Cydia安装的安装包是deb格式的(结合软件包管理工具apt)

  • 通过PP助手安装的安装包是ipa格式的

如果通过Cydia源安装deb失败

  • 通过可以先从网上下载deb格式的安装包

  • 数据线连上手机,通过 iFunBox 将deb安装包放到/var/root/Media/Cydia/AutoInstall

e2QvAn2.png!web

以iFile为例

重启手机,Cydia就会自动安装deb

七、代码判断设备是否越狱, 参考博客一参考博客二 ,手机是否越狱判断的 demo

7.1、越狱带来的苹果安全支付机制

  • 苹果是非常重视安全性的,所以给用户设计了一套复杂的安全机制。但是很多用户喜好自由或者是被一些商家恶意的,对手机进行了越狱。这严重的破坏了手机的安全性能,给一些恶意的应用打开了方便之门。

  • 而在苹果支付中,苹果为了保护用户的隐私,支付凭证中不包含任何用户的Apple ID信息,所以我们的服务器在验证这个凭证的时候无法得知是谁的凭证,只能验证这个凭证的真伪。就像一些商家发行的不记名购物卡,只要卡是真的就可以使用,而不管你是否是这个卡的真正主人。

  • 苹果的这种支付机制保护了用户的隐私,但也为不良的黑客提供了作案的机会。黑客可以对越狱的手机添加一种恶意软件,软件会窃取你支付过程中的支付凭证,然后伪造一份假的凭证,让你的支付验证在商家的服务器上失败,但你的钱却已经支付,黑客再使用你真正的支付凭证在其他的账号中验证支付,而商家的服务器验证该支付凭证是真的,商家则认为是黑客的账号购买了商品。这样黑客就盗取了用户的资金。

    所以,为了保护用户的安全性,应该对越狱的手机,取消其支付功能。

7.2、判断设备是否越狱一:通过手机越狱后增加的越狱文件判断,判断这些文件是否存在,只要有存在的,就可以认为手机已经越狱了。

const char* jailbreak_tool_pathes[] = {
"/Applications/Cydia.app",
"/Applications/limera1n.app",
"/Applications/greenpois0n.app",
"/Applications/blackra1n.app",
"/Applications/blacksn0w.app",
"/Applications/redsn0w.app",
"/Applications/Absinthe.app",
"/Library/MobileSubstrate/MobileSubstrate.dylib",
"/bin/bash",
"/usr/sbin/sshd",
"/etc/apt",
"/private/var/lib/apt/",
NULL,
};

+(BOOL)isJailBreak1
{
for (int i=0; i
if ([[ NSFileManager defaultManager] fileExistsAtPath:[ NSString stringWithUTF8String:jailbreak_tool_pathes[i]]]) {
NSLog( @"The device is jail broken!");
return YES;
}
}
NSLog( @"The device is NOT jail broken!");
return NO;
}

7.3、判断设备是否越狱二:根据是否能打开cydia判断(判断cydia的URL scheme

URL scheme是可以用来在应用中呼出另一个应用,这个方法也就是在判定是否存在cydia这个应用。)

+(BOOL)isJailBreak2{

    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://"]]) {
          NSLog(@"The device is jail broken!");
          return YES;
    }
    NSLog(@"The device is NOT jail broken!");
    return NO;
}

7.4、判断设备是否越狱三:根据是否能获取所有应用的名称判断,没有越狱的设备是没有读取所有应用名称的权限的

+(BOOL)isJailBreak3{
    if ([[NSFileManager defaultManager] fileExistsAtPath:@"User/Applications/"]) {
        NSLog(@"The device is jail broken!");
        NSArray *appList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"User/Applications/" error:nil];
        NSLog(@"appList = %@", appList);
        return YES;
     }
     NSLog(@"The device is NOT jail broken!");
     return NO;
}

7.5、判断设备是否越狱四:根据使用stat方法来判断cydia是否存在来判断,这个方法的思路还是通过判定cydia应用,但方法是使用stat函数,同时会判断是否有注入动态库。

#import   
+(BOOL)isJailBreak4
{
   struct stat stat_info;
   if (0 == stat("/Applications/Cydia.app", &stat_info)) {
      NSLog(@"Device is jailbroken");
      return YES;
   }
   
   return NO;
}

7.6、判断设备是否越狱五:攻击者可能会利用 Fishhook原理 hook了stat。那么,你可以看看stat是不是出自系统库,有没有被攻击者换掉:

#import   

+(BOOL)isJailBreak5
{
   int ret ;
   Dl_info dylib_info;
   int (*func_stat)(const char *, struct stat *) = stat;
   if ((ret = dladdr(func_stat, &dylib_info))) {
        NSLog(@"lib :%s", dylib_info.dli_fname);
        return YES;
   }
   return NO;
}

7.7、判断设备是否越狱六:读取环境变量这个DYLD_INSERT_LIBRARIES环境变量,在非越狱的机器上应该是空,越狱的机器上基本都会有Library/MobileSubstrate/MobileSubstrate.dylib

char* printEnv(void) {
   char *env = getenv("DYLD_INSERT_LIBRARIES");
   return env;
}
+(BOOL)isJailBreak6{
   if (printEnv()) {
      NSLog(@"The device is jail broken!");
      return YES;
   }
   NSLog(@"The device is NOT jail broken!");
   return NO;
}

八、提高工作效率的工具

8.1、 Alfred (便捷搜索与工作流使用)   推荐 博客 ,在博客里面有很多的使用方法介绍

jeUnamm.png!web

Alfred

8.2、 XtraFinder (增强型Finder)

8.3、 iTerm2博客1iTerm2博客2 ,里面有安装以及介绍, 配色方案OhMyZsh,安装,主题配置方法Mac OS 终端利器 iTerm2配置大全

8.4、 Go2Shell下载地址 :从Finder快速定位到命令行工具

作者:IIronMan

链接:https://www.jianshu.com/p/6cd12f559dcd


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK