《九阴真经: iOS黑客攻防秘籍》新书发布,干货满满,快来看看吧!

iOS 安全论坛 - 专注于研究 iOS 安全

 找回密码
 立即注册
查看: 576|回复: 5

群里的师傅门5s 9.3.2系统可否用这种方法拯救

[复制链接]

4

主题

38

帖子

336

积分

中级会员

Rank: 3Rank: 3

积分
336
发表于 2020-3-8 11:50:49 | 显示全部楼层 |阅读模式
IOS9抹掉所有后Cyida红字。MobileTerminal.ipa报错,没有OpenSSH,iFile,AFC2,修复Cydia的方法
发表于: 2017-06-05 23:34:53
来自 威锋网页版

1.6w
40

只看楼主



本帖最后由 ixiaoi 于 2017-6-5 23:34 编辑

本教程针对ios9越狱抹掉所有后Cyida红字没有安装OpenSSHiFileAFCMobileTerminal.ipa报错,的Cydia修复方法。自己一个晚上的研究成果,现在分享出来希望可以帮助更多的封釉。教程写的不怎么样,大家讲究着看,不清楚的就回帖问吧,所用到工具和文件都在下面。

此教程在5C设备上测试成功,其他设备理论上也支持,请锋柚自测。
1.手机连接电脑打开爱思助手。打开文件管理,把数据库文件夹lib导入文件系统根目录.


2.手机进入越狱环境,用Impactor.exe安装FileBrowser.ipa。注意安装不成功的请下载Impactor.exe最新版.
打开Impactor文件夹双击Impactor.exe


3.FileBrowser.ipa拖到Impactor窗口安装,输入apple id,必须是没有开启两步验证的id


4.安装完成,手机打开设置,通用,设备管理,选择你刚才输入的ID账号。点击信任。


5.点击信任


6.在手机上打开FileBrowser


7.进入User/Media文件夹


8.先点击右上角Edit在到下面点击了lib复制.


9.点击上面 .. 返回根目录,打开var文件夹,在点击右上角Edit,点击下面粘贴。






现在打开Cydia,没有红字了,现在可以添加源尽情的安装插件了!


到此教程结束,有什么不明白的锋有在下面回帖吧。



回复

使用道具 举报

4

主题

38

帖子

336

积分

中级会员

Rank: 3Rank: 3

积分
336
 楼主| 发表于 2020-3-8 11:52:32 | 显示全部楼层
师傅门,用这种方法可否解救,若有空,请研究下......
回复

使用道具 举报

4

主题

38

帖子

336

积分

中级会员

Rank: 3Rank: 3

积分
336
 楼主| 发表于 2020-3-8 12:41:24 | 显示全部楼层
我用这个工具impactor_0.9.37安装FileBrowser.ipa这个应用受阻,提示设备未安装appSync越狱补丁,该怎么破。。。
回复

使用道具 举报

117

主题

489

帖子

2008

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2008
发表于 2020-3-8 23:11:46 | 显示全部楼层
如果没有越狱,这个方法没有权限改 SystemVersion.plist 文件,但是可以查看读取。
回复

使用道具 举报

4

主题

38

帖子

336

积分

中级会员

Rank: 3Rank: 3

积分
336
 楼主| 发表于 2020-3-9 08:19:45 | 显示全部楼层
今天的心情是愉快的,感谢管理的热情帮助,用他的爱心与专业拯救了我的5s,重新越狱并能改回了原来的9.3.2系统版本。虽然是过去的旧机子,但能起死回升,深深的感谢
回复

使用道具 举报

4

主题

38

帖子

336

积分

中级会员

Rank: 3Rank: 3

积分
336
 楼主| 发表于 2020-3-9 08:23:32 | 显示全部楼层

       
[分享]手残改掉SystemVersion.plist导致无法越狱修复办法
2018-3-25 18:40  13290
Dlnn  
举报
0x1 背景
本人是个小菜比不小心把DeveloperDiskImage.dmg直接解压到/目录下,因为版本不对且覆盖了SystemVersion.plist后导致系统不稳定VPN废了,越狱废了,系统频繁重启,所以想办法重新越狱,本人已经重新越狱修复好,所以没截到图演示。
0x2 一些信息
真实系统版本:9.3.3(13G34)
当前识别版本:9.3.1(13E238)
无论是手机设置里的信息还是连接到PC上用助手查看版本都是被修改之后的
0x3 分析
这个文件路径为/System/Library/CoreServices/SystemVersion.plist
大概内容是
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>ProductBuildVersion</key>
    <string>13G34</string>
    <key>ProductCopyright</key>
    <string>1983-2016 Apple Inc.</string>
    <key>ProductName</key>
    <string>iPhone OS</string>
    <key>ProductVersion</key>
    <string>9.3.3</string>
</dict>
</plist>

---------------------------------------------------------------------------------------------------------------
由于这个路径在AFC2无法开启的情况下是访问不到的,所以重新直接改文件不现实,所以我就去试试Patch盘古越狱。
把盘古越狱下下来解包丢IDA看看这货咋识别
分析完后直接搜系统版 然后CTRL+x查找引用


看到是硬编码
ProductVersion找到了我们接下来找ProductBuildVersion 搜下13G试试

也找到了但是他的是13G3不是13G34,小心点再看下现在13E

好像都是裁掉了一位不管了
回去找13G的引用自己对应自己的手机是几就几

气稽败坏,这是逼我直接Patch
我直接打开Hex把9.3.3改成了9.3.1 把9.3.3改成9.3.1,(CFSTRING一般需要改CFString里的Length,但是这里是相同的所以不用改)
同理把 ProductBuildVersion对应的字符串也改了(这是CSTRING没有结构我自己直接改了)
直接Patch后理论上 可行了 重签名后丢手机打开 嗯识别还是9.3.1但是理论上没问题了结果一点越狱重启了 越狱扑街,感觉是不是哪里体位不对
所以换个姿势不静态patch 直接HOOK API改这样不会漏
翻了下9.3.3的引用函数 可以看出他是通过 currentDevice获取SystemVersion
百度了下使用方法是 [ [UIDevice currentDevice] systemVersion],先记录下来
问题来了 [UIDevice currentDevice]里没有 ProductBuildVersion的获取 也没找到 ProductBuildVersion引用函数咋办
同样也是在9.3.3的引用函数里我看到一串%s_%s_off_pg 这是格式化字符串
可是找那些参数没找到赋值F5出问题了在翻下 看到了个_CFCopySystemVersionDictionary()
这个是读SystemVersion.plist的API比currentDevice底层,直接HOOK他SetValue就能把 ProductVersion , ProductBuildVersion 给改了,mark下

0x4 写tweak
由于没越狱 不能用cydia substrate,所以改用fishhook
代码出自 jmpews 大腿 由于我没mac所以厚着脸皮求大腿帮忙
dalao也是很敬业的把两个东西一个Captain和fishHOOK都写了一遍
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*======= patch systemVersion with method swizzling =======*/
#import <CaptainHook/CaptainHook.h>
CHDeclareClass(UIDevice);
CHDeclareClass(NSString);

// template
CHConstructor {
  CHLoadLateClass(NSString);
}

CHMethod(0, NSString *, UIDevice, systemVersion)
{
  // NSString *realSystemVersion = CHSuper(0, UIDevice, systemVersion);
  NSString *fakeSystemVersion=@"9.3.3";
  return fakeSystemVersion;

}

__attribute__((constructor)) static void EntryCaptainHook()
{
    NSLog(@"hello patch!");
    CHLoadLateClass(UIDevice);
    CHClassHook(0, UIDevice, systemVersion);
}

/*======= patch systemVersion with fishhook(GOT table hook) =======*/

#include <fishhook/fishhook.h>
#include <CoreFoundation/CoreFoundation.h>

#include <dlfcn.h>
#include <mach-o/dyld.h>

CF_EXPORT CFDictionaryRef _CFCopySystemVersionDictionary(void);
CFDictionaryRef (*orig_CFCopySystemVersionDictionary)(void);
#define CONST_STRING_DECL(S, V) const CFStringRef S = (const CFStringRef)__builtin___CFStringMakeConstantString(V);

CONST_STRING_DECL(_kCFSystemVersionBuildVersionKey, "ProductBuildVersion")
CONST_STRING_DECL(_FakeProductBuildVersion, "13G34")
CONST_STRING_DECL(_kCFSystemVersionProductVersionKey, "ProductVersion")
CONST_STRING_DECL(_FakeProductVersion, "9.3.3")

CFDictionaryRef fake_CFCopySystemVersionDictionary(void) {
  CFDictionaryRef tmp_dict = orig_CFCopySystemVersionDictionary();
  CFDictionarySetValue((CFMutableDictionaryRef)tmp_dict, _kCFSystemVersionBuildVersionKey, _FakeProductBuildVersion);
  CFDictionarySetValue((CFMutableDictionaryRef)tmp_dict, _kCFSystemVersionProductVersionKey, _FakeProductVersion);
  return tmp_dict;
}

__attribute__((constructor)) static void EntryFishHook()
{
  intptr_t (*pub_dyld_get_image_slide)(const struct mach_header *mh);
  pub_dyld_get_image_slide         = dlsym((void *)dlopen(0, RTLD_LAZY), "_dyld_get_image_slide");
  const struct mach_header *header = _dyld_get_image_header(0);
  intptr_t slide                  = pub_dyld_get_image_slide(header);
  rebind_symbols_image((void *)header, slide, (struct rebinding[1]){{"_CFCopySystemVersionDictionary", fake_CFCopySystemVersionDictionary, (void *)&orig_CFCopySystemVersionDictionary}}, 1);
}

编译成dylib先签名然后用yolib或者其他工具给 LoadCommands 插入加载节点然后重签名安装(切记先给dylib签名不然会闪退)
因为本人已测试成功所以就不截图了
安装后版本识别成了9.3.3
ProductBuildVersion没法看就暂时不管了先试试水
黑屏之后成功越狱赶紧去把 /System/Library/CoreServices/SystemVersion.plist里的信息该回去然后重启手机
重启手机会出现白屏(不是白苹果)然后下方出现一坨很难看到的滑动升级,这是由于版本号变更重启系统重新加载造成的,滑动升级等进度条完后会自动重启手机,此时打开手机一看版本变回9.3.3了,连接到PC的软件看也是9.3.3,下了一个没Patch版的盘古越狱依然也没问题。
附上tweak源码给大家自行玩耍,Patch后的包20多M就不上传了,再次感谢 jmpews大腿抽出时间帮我写tweak


这种方法是正确的,但对于我们小白来说是很难搞定,在这个强大的论坛里,我们的管理员高手就帮我搞定了,感谢有你的付出。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|iOSHacker

GMT+8, 2020-8-4 09:45 , Processed in 0.023403 second(s), 19 queries .

iOS安全论坛

© 2017-2020 iOS Hacker Inc. 京ICP备17074153号-2

快速回复 返回顶部 返回列表