unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)

文章目录

  • 环境
  • 目的
  • 使用工具
    • 模拟器遇坑
    • GPA 遇坑
  • RenderDoc
  • ROOT 权限、救砖、ro.debuggable=1
    • ROOT权限
      • 开启 开发者模式
      • 开启 USB debug
      • 检查 adb devices
      • oem 解锁
      • 重启进入 adb reboot bootloader
      • 刷机解锁 unlock, fastboot flash unlock
      • 安装 Google USB Driver
      • 下载 Magisk.xx.x.apk
      • 下载 Factory Image
        • 提取 boot.img
        • Magisk 安装 boot.img
      • 再次刷机属性 fastboot flash boot <将你的 mast boot.img 拖放在这>
      • 有概率变砖
    • 救砖
      • 测试 是否 ROOT 成功
      • 使用 adb shell su 来测试
      • 确保 shell, terminal 等需要 su 的 APP 有 SU 权限
    • ro.debuggable=1
      • 使用 magisk resetprop ro.debuggable 1 (手机重启后失效)
      • 验证是否开启了 ro.debuggable = 1 : getrop ro.debuggable
      • 使用 MagiskHide Props Config 来设置 (手机重启也还能保持有效)
        • 下载 MagiskHide Props Config
          • 安装
          • 高版本 MagiskHide Props Config v6.1.2 找不到 ro.debuggable
          • 使用低一些版本的 magiskHide props config 5.3.6
  • 开始 RenderDoc 抓帧步骤
    • RenderDoc 连接 真机
    • 允许 RenderDocCmd 的 File Access 权限
    • 确定 application packagenames
  • RenderDoc 始终无法抓抓帧(Android亲测,PC 没有问题)
  • GPA - Capture Frame->Shader
  • 还原 Shader 效果
  • 还原的学习项目
  • 总结
    • GPA, RenderDoc 各发挥作用
    • 运行时,基于 Graphics Event/API hook 的方式
  • Project
  • Rerfernces


环境

unity : 2018.2.11f1
pipeline : BRP


目的

我主要是为后面实现各种效果时,直接抓帧分析拿资源 和 shader 复刻效果,都是为了 学习用

据了解,以前安卓手机抓帧分析是很容易的
但是自从 安卓手机安全性提高之后(BL锁,还有 限制 ROOT 在硬件解锁)
导致现在实现上的所有 抓帧软件都没有效了
所以特此记录此篇,抓帧的过程中多曲折


忘记将预研结果补上了,2022.04.29 回来补上

最终发现,折腾这么久,RenderDoc 还是无法抓 安卓平台的其他非 debuggable 应用
看了一下 RenderDoc 的 Github 作者声明,也是如此,所以妥妥的放弃了 RenderDoc 的抓帧方案了

unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第1张图片

还是使用 GPA + 模拟器的方案靠谱


使用工具

为何让 GPA 测量更精准,在 Win10 上要开启 Developer Mode (开发者模式)

To collect stable metrics on third party graphics solutions, enable Developer Mode in Microsoft Windows OS settings.

开发者模式开启步骤:

  • 在 Windows10 左下角开始栏输入:settings 或是 设置
  • 更新和安全
  • 开发者选项
  • 开发人员模式 开启

工具搭配:Intel GPA + 夜神模拟器

理论上,只要能在模拟器运行的所有程序的 graphics event / API 都可以抓取

jave.lin : 个人经验:如果有 GPA 抓取无数据的情况,可以尝试更改:graphics api 为:dx / ogl 之间切换,再尝试

GPA 步骤:

  • Graphics Monitor

    • Settings->Auto-detect launch application
    • 设置好 模拟器 *.exe
    • 启动
    • 这时 app 上有 相关的 GPA HUB 出现即可继续下一步
  • System Analyzer

    • 对应 application 上使用 CTRL+SHIFT+C(默认快捷键,也可以自行修改)
    • 如果 使用快捷键 Capture 不了,那就再 System Analyzer 中点击 capture frame 的按钮(在左上角)
    • capture 成功后,在 Graphics Monitor 中会显示 capture frame 的 snapshot 项目,在 右边的一栏,双击需要分析的抓数据
    • 等 Graphics Frame Analyzer 打开
  • Graphics Frame Analyzer

    • 打开后,就不用过多介绍了,该看懂的还是能看懂的

模拟器遇坑

模拟器的话,我试过 mumu,和夜神,目前来说,夜神比较稳定,mumu 模拟器基本上都抓不了数据

后续再实时 雷电,和其他的模拟器


GPA 遇坑

GPA 导出 mesh 后,我发现在 shader 重构中,uv 输出全是黑色的,也就说压根没有 UV 数据
然后 搜索了一下,发现 2016 年 Intel GPA 官网就有人问了:GPA: No UV map support?,但是官方回答的是:DX9-DX11 都不会支持,但在 DX12 会支持,刚刚好我用的是 DX11,我去,所以我支持使用 DX12 再来抓一波,再导出 mesh

然后我回到 Intel Graphics Monitor 重来的时候,发现模拟器可能没去使用 DX12,我查看了一下我的显卡是 RTX 2060 是支持 DX12 的,然后我在 Intel Graphics Monitor 中选择 DX12 来启动时,发现没法 GPA inject。(这就蛋疼了)

然后我手动在 GPA 中,将 uv 的 vertex buffer 导出来,在通过 excel/wps 编辑成 vt u v 的格式放入到 v 和 vn 之间,结果还是不行。。。

后续在尝试使用 renderdoc 来抓模拟器的方式来分析


RenderDoc

RenderDoc 抓真机也是很蛋疼,我之前还为了抓真机尝试过:

  • apktool 或是 aapt 来解包,修改 Androidmanifest.xml 中的 调试权限
  • 然后使用 apktool 或是 aapt 来重新组回 APK 包
  • 然后再对 APK 进行签名
  • 但是:在手机上安装时,报错了(安装包解压报错)

折腾太久吴国,所以用另一种方法来强制打开 android 的全局 debuggable 标记,那么请看下一段落


既然 GPA 遇坑不能导出完整的 模型
可以使用 RenderDoc 来导出
我发现网络上各位大大也时这么用

先了解 RenderDoc 的一些主要功能可以参考这位大佬的文章:GPU分析工具RenderDoc使用

具体 RenderDoc 导出模型,可以参考这位大佬的处理方法:Renderdoc扒模型教程

将 RenderDoc 导出的 In VertexBuffer 的数据导出 CSV 后,再将 CSV 导出 FBX 或是 OBJ 的工具都在这里面Alunice/TaTa - CSV2Mesh, CSVConvertor

但是要使用 RenderDoc 抓帧 Android ,脚本推荐的是 小米+解BL锁 后再进行的

BL解锁,可以参考:

  • 小米手机解锁 Bootloader 教程以及常见问题
  • [教程] 小米手机解锁 Bootloader 教程和常见问题

BL解锁中困难重重,应该是小米的开发人员极度不用心所致
比如:你根本就找不到 miusbdriver.exe 驱动

比如再微博上也有人吐槽:吐槽找不到miusbdriver
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第2张图片

jave.lin : 经过大量搜索、翻阅,找到一个:小米手机助手

下载后,再手机助手的安装目录下的:Unlock_Tool 下找到了:miusbdriver.exe
(怎么找到的,我安装了 everything,然后输入:miusbdriver)

如果BL锁想要重新添加上:

  • 【解答组出品】小米手机解锁和加锁教程

解开 BL锁 目的是为了开启 ROOT 权限:

  • 【原创】小米手机获取完整ROOT权限教程

开启 ROOT 是为了可以开启:debuggable

为了获得手机 ROOT,我尝试过:

  • ROOT精灵
  • Root助手
  • 卓大师刷机专家
  • LBE一键ROOT
  • 完美ROOT
  • KingRoot
  • 强力一键ROOT
  • 卓大师Root专家

unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第3张图片

都不行,反正现在市面上(我今天2022/03/24搜索)发现所有安卓手机都不能轻易开启ROOT权限了
因为安全限制问题,都必须在手机的BIOS模式(BootLoader模式)下调整硬件标记开关,才能开启

然后我使用 了公司提供的一台 RedMi Note 10 ,然后使用我之前的一张小米移动卡,绑定了这台设备后,去解BL锁时,提示:
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第4张图片

然后去搜索了解到:
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第5张图片

直接气晕~,-_-!
所以只能等一周后继续使用这种方法
手机破解要等至少一周,小米官方又限制,因为这台手机我刚刚才绑定了我之前一张没用得 SIM 卡

以前 安卓系统没又这么多麻烦得安全性的设置没那么多
现在破解手机就麻烦多了。。。
而我们得现有 抓帧工具都需要手机破解 BL 锁,才能发挥作用。
着简直蛋疼得要死~

但是时间不等人,我就先尝试 GPA + in VertexBuffer 的方式来还原

但是我之前还原之前发现,顶点数量 和、UV、法线、切线的数量都对不上

我估计是 GPA 的显示的 BUG,但是从 GPA 的选择结果看是没又错误的(也就说数据没又错,顶多可能 GPA 上数据的显示又问题),如下:

// jave.lin : 从 VS INPUT 可以看到,0:position, 1:normal, 2:uv, 3:tangent
struct VS_INPUT
{
    float4 __glesVertex : TEXCOORD0;
    float3 __glesNormal : TEXCOORD1;
    float4 __glesMultiTexCoord0 : TEXCOORD2;
    float4 __glesTANGENT : TEXCOORD3;
};

unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第6张图片

顶点数据都对不上,那还叫我怎么还原模型。。。,我是服了

所以我认为:GPA 只适合抓取 shader,然后每一句都需要手动翻译成正常的可读性高得写法

GPA 抓美术资源还好,但抓帧出来的 shader 基本不能用,但是能看懂,基本上全部都需要手动重写全部已读

基本上,一个长一点的 shader 破解后,手动复原效果,需要 1~2 天时间
代码短的 shader 还好,长一点的估计要更长时间,因为破解出来的 shader 可读性超级差

所以,还是等 手机可以申请解BL锁再进一步处理吧(我是真的服!!!)


然后等了一周,然后可以申请解锁了

兴致勃勃的安装官方贴子的操作方法

并下载各种软件工具

我使用得测试手机得小米得,关于开启手机 root 前得 bootloader 解锁
我都参考官方帖子操作,没有一个成功得,论坛里面各大网友已经口吐芬芳了
官方依旧不解决,冷处理,我看得也有点迷~(好几篇关于解锁的贴图,1000+的评论,目测至少 95% 以上都是抠图芬芳)

所以我还是放弃了,然后去 某乎 发问:手机真机上游戏抓帧,需要开启root,有什么手机容易开启root?

几天过去,结果只有一个大佬回答,推荐还是花点钱,去 手机维修点让人解锁,并开启 root 成功了,顶多 100~200 RMB

所以我也正打算等节假日,带上公司测试机去解锁


ROOT 权限、救砖、ro.debuggable=1

2022/04/01 下午,公司得测试机:google pixel 6 pro 到手了
当天下午,跟着教程:How To Guide [GUIDE] Root Pixel 6 Pro “raven” with Magisk

ROOT权限

开启 开发者模式

将 google pixel 6 pro 开启 开发者模式

开启 USB debug

再开启 use 调试

检查 adb devices

这时

adb devices

是有反应得:
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第7张图片

oem 解锁

再联网后,打开: oem 解锁

说到联网:google pixel 6 pro 连接 wifi 也是有 BUG得:

  • 百度一下:google pixel 6 pro wifi 连接不上
  • google 一下:google pixel 6 pro wifi issue

大家就可以看到自媒体,或是官方 所说得:pixel 6 wifi 问题,我是真的无语了

所以我用我自己手机 SIM 插入 pixel 6 pro,使用移动网络后,才能 oem 解锁

重启进入 adb reboot bootloader

这时:

adb reboot bootloader

进入:fastboot mode

unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第8张图片

fastboot mode 也叫:bootloader

可以看到 locked 得

刷机解锁 unlock, fastboot flash unlock

然后再 cmd, fastboot flash unlock ,注意这部会 清理掉所有的数据

fastboot flash unlock

发现 fastboot flash unlock没有反应

安装 Google USB Driver

然后搜索了一下,说是没有安装:google usb driver

google 了一下,使用 android sutdio 来安装:

但是安装完后,Google USB 驱动还是没有反应(在 android studio/settings/sdk tools/google usb driver 下载得最新驱动也不行),如下图
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第9张图片

后面还得使用:everything 输入:usb_dri 找到了 unity android playengine(不是 android studio 安装得) 目录下得 google usb 驱动来安装才行,我是真的服了
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第10张图片

安装 google usb driver 这么整即可:计算机->右键->设备->设备管理->其他设备->Google Pixel 6 Pro->右键->更新驱动->选择上面 usb_driver 目录所在

这时再倒回 fastboot flash unlock,发现可以了,如下图
用 音量上下键,选择:unlock the bootloader
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第11张图片
然后确定选中 Unlock the bootloader 后,按下,电源键,即可解锁:
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第12张图片

如果你想重新锁回 BL,那么执行:fastboot flashing lock
在这里插入图片描述
这样就可以锁回去了
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第13张图片

下载 Magisk.xx.x.apk

再去下载:Magisk vxx.x.apk (下载记得使用 迅雷,70MB±/S,否则就算 VPN 后,也只有 10~50KB±/S,我自己下载了 pixel 6 pro 的img : Magisk-v24.3.apk, 提取码: 4k1b)

将此 apk 复制到你 google pixel 6 pro 并安装

下载 Factory Image

然后在:Factory Image 中下载:最新得 Google Pixel 6 pro 镜像(下载记得使用 迅雷,70MB±/S,否则就算 VPN 后,也只有 10~50KB±/S,我自己下载的是:raven-sp2a.220305.013.a3-factory-87b3bf0a.zip, 提取码: ecyy)

提取 boot.img

如下图,我下载了镜像后,解压之后,再将:里面得 image-xxx-xxxxx.zipboot.img 解压出来

将它,复制到你得 google pixel 6 pro 设备中
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第14张图片

Magisk 安装 boot.img

再手机上运行:Magisk,根据下图操作:

再次刷机属性 fastboot flash boot <将你的 mast boot.img 拖放在这>

然后将:/sotrage/emulated/0/Download/magisk_patched-24300_XMUT5.img 拷贝到你得工作电脑,并重命名为:mast boot.img(注意这里需要将 USB 播出来,再重新插入,不然再你得工作电脑上得 google pixel 6 pro 得 Download 文件夹上是没有 magisk_patched-24300_XMUT5.img 之类的文件,这个问题还坑了我不少时间,结果发现是 USB 需要重插,我是真的服!)

然后将 google pixel6 pro 重启到 bootloader:
和之前一样:在工作电脑上一句 cmd 即可:adb reboot bootloader
接在,在工作电脑上继续:cmd 输入:fastboot flash boot <将你的 mast boot.img 拖放在这>,如下:

unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第15张图片

敲下回车
在这里插入图片描述

有概率变砖

然后重启 google pixel 6 pro,如果能顺利进入 pixel 6 pro,那么恭喜你,你的 pixel 6 pro 没有变成砖头机

救砖

不小心变砖头机也别慌,先将砖头机连接上 工作电脑,然后 再进行下面操作

直接使用 刚刚下载的 img 镜像里面的内容复制到 adb 所在目录下(cmd:where adb),这是偷懒的做法:
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第16张图片

然后再 CMD flash-all.bat 救砖
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第17张图片

等个5分钟左右,砖头机就正常了(可以进入pixel 6 pro系统了)

然后记得将 adb 目录下的 img 文件清理掉

测试 是否 ROOT 成功

OK,到这里,我们可以检测一下我们的机器是否 root 成功了

先 google 一下:how to check my google pixel is rooted

我搜索到一篇:可以参考这里:How To Check If Your Android Phone Is Rooted,里面有三种方法来验证,因为系统版本不同,所以我三种都试过,只有一种对 google pixel 6 pro 可行,下面是别分三种:

  • Settings/About phone/Status information/Device Status/Phone Status/ - 如果显示 Official ,那说明还没 root,但是 google pixel 6 pro 中的系统和这菜单对不上,所以就用其他方法
  • Terminal emulator for android - 我下载了,输入 su 没有半毛钱反应 - terminal_emulatorv3.6.0_downcc.com.apk, qhm1
  • Root Checker App - 下载安装后,运行就自动检测我的 pxiel 6 pro is rooted - com.jrummyapps.rootchecker.apk, jjny

unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第18张图片

OK,那么继续使用 rooted 后的 google pixel 6 pro 来抓帧、提取资源试试

使用 adb shell su 来测试

刚刚开启,就翻车:
adb shell su 可以看到 su (super-user) 超级用户没有权限。。。那也就是压根没有 rooted 成功
在这里插入图片描述

然后我重新来了一篇 root,然后可以了。。。我真滴无语了都。。。

确保 shell, terminal 等需要 su 的 APP 有 SU 权限

adb shell su 时,在 magisk 会提示是否 授予 root 权限,还可以指定 root 权限拥有多久,选个:forever (永久就好了)

如下,我整了 3 个 app 都有 root 权限
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第19张图片

ro.debuggable=1

然后 根据这篇:GPU分析工具RenderDoc使用 发现整不了 ro.debuggable = 1 的 global prop
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第20张图片

使用 magisk resetprop ro.debuggable 1 (手机重启后失效)

然后 google 了一下:how to enabled ro.debuggable in android
找到了这么一片:A simple way to realize “global debuggable” (RO. Debuggable = 1) of Android phones [hammer nut 3] - 有说明,每个 apk 都可以设置 android:debuggable=1 的设置,但是只是针对单个 apk 的,如果 apk 没有设置这个 flag,那么就可以通过 root 的 su 权限来设置 ro.debuggable 即可,这样不管你发布的 apk 中的 android:debuggable 是与否,都会按 debuggable=1 来对待,因为 ro.debuggable 是全局的一个 debuggable 标记

使用的是 google pixel 6 pro 里面安装:magisk 来修改,刚刚好我们上面就安装了
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第21张图片

验证是否开启了 ro.debuggable = 1 : getrop ro.debuggable

其中的 stop;start; 会重启 adb,等重启好了之后,在 adb shell, su, getprop ro.debuggable 即可看到输出 1

但如果这时,再重启一次,你会发现 adb shell 中的 getprop ro.debuggable 又变成 0 了

使用 MagiskHide Props Config 来设置 (手机重启也还能保持有效)

为何让 ro.debuggable 重启也能持久生效

参考:Android修改ro.debuggable 的四种方法

下载 MagiskHide Props Config

github release: Magisk-Modules-Repo/MagiskHidePropsConf - 这里我下载的是最新的(建议不下载这个最新的,因为找不到哪里可以设置 ro.debuggable,建议往下看,下载:5.3.6 版本的

安装

为了防止,5.3.6 可能放生意外 找不到,我就直接放网盘一份:MagiskHidePropsConf-v5.3.6.zip, 提取码: uiqs

然后将 MagiskHidePropsConf-xxxx.zip 复制到 google pixel 6 prop 的 Download 目录

打开 Magisk/Models/Insall from storage/选择 上面复制过来的 MagiskHidePropsConf-xxxx.zip
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第22张图片

下面是 v6.1.2 的截图,v5.3.6 的截图没去截图,就算了
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第23张图片

点击 Magisk 右下角的 Reboot (重启手机)

高版本 MagiskHide Props Config v6.1.2 找不到 ro.debuggable

注意我上面下载的是(当前)最新(v6.1.2)的 MagiskHide Props Config

然后找不到 ro.debuggable 在哪设置,下面的是 按 4 - Edit MagiskHide props (active) 我还试过了 5 - Add/edit custom props 还是不行,add 的方式会导致 ro.debuggable = ro.debuggable 1 而不是 ro.debuggable=1
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第24张图片

下面是尝试:5 - Add/edit custom props 的过程

PS E:\ChromDownloads> adb shell
raven:/ $ su
raven:/ # getprop ro.debuggable
0
raven:/ # magiskhide setprop ro.debuggable 1
raven:/ # props

Loading... Please wait.


MagiskHide Props Config v6.1.2
by Didgeridoohan @ XDA Developers

=====================================
 Updating fingerprints list
=====================================


Checking list version.
Fingerprints list up-to-date.

Checking for module update.
No update available.

MagiskHide Props Config v6.1.2
by Didgeridoohan @ XDA Developers

=====================================
 Select an option below.
=====================================

1 - Edit device fingerprint
2 - Force BASIC key attestation
3 - Device simulation (disabled)
4 - Edit MagiskHide props (active)
5 - Add/edit custom props
6 - Delete prop values
7 - Script settings
8 - Collect logs
u - Perform module update check
r - Reset all options/settings
b - Reboot device
e - Exit

See the module readme or the
support thread @ XDA for details.

Enter your desired option: 5

MagiskHide Props Config v6.1.2
by Didgeridoohan @ XDA Developers

=====================================
 Custom props
 Select an option below:
=====================================

Set or edit custom prop values for your device.

Currently no custom props set.
Please add one by selecting
"New custom prop" below.

n - New custom prop
b - Go back to main menu
e - Exit

See the module readme or the
support thread @ XDA for details.

Enter your desired option: n

MagiskHide Props Config v6.1.2
by Didgeridoohan @ XDA Developers

=====================================
 New custom prop
=====================================

Enter the prop to set. Example:
ro.sf.lcd_density

b - Go back
e - Exit

Enter your desired option: ro.debuggable=1

MagiskHide Props Config v6.1.2
by Didgeridoohan @ XDA Developers

=====================================
 ro.debuggable=1
=====================================

Enter the value you want to set
ro.debuggable=1 to,
or select from the options below.

The currently set value is:
Currently not set, or the value could not be retrieved.
Please enter the value to set.

b - Go back
e - Exit

Enter your desired option: ro.debuggable 1

MagiskHide Props Config v6.1.2
by Didgeridoohan @ XDA Developers

=====================================
 ro.debuggable=1
=====================================

This will set ro.debuggable=1 to:

ro.debuggable 1

Pick an option below to change
what boot stage the prop will
be set in, or set/reset a delay:

1 - Default (current)
2 - post-fs-data
3 - late_start service
4 - Both boot stages
d - Delay

Do you want to continue?

Enter y(es), n(o), e(xit)
or an option from above: 4

MagiskHide Props Config v6.1.2
by Didgeridoohan @ XDA Developers

=====================================
 ro.debuggable=1
=====================================

This will set ro.debuggable=1 to:

ro.debuggable 1

Pick an option below to change
what boot stage the prop will
be set in, or set/reset a delay:

1 - Default
2 - post-fs-data
3 - late_start service
4 - Both boot stages (current)
d - Delay

Do you want to continue?

Enter y(es), n(o), e(xit)
or an option from above: y

Working. Please wait...

Working. Please wait...

Working. Please wait...

Working. Please wait...

MagiskHide Props Config v6.1.2
by Didgeridoohan @ XDA Developers

=====================================
 Reboot - ro.debuggable=1
=====================================

Reboot for changes to take effect.

Do you want to reboot now (y/n)?

Enter y(es), n(o) or e(xit): y

Rebooting...
PS E:\ChromDownloads> adb shell
raven:/ $ su
raven:/ # getprop ro.debuggable
1=ro.debuggable 1

看,上面的 getprop ro.debuggable 输出:1=ro.debuggable 1 我也是真的服了~, -_-!

使用低一些版本的 magiskHide props config 5.3.6

所以我又下载回参考博文的:5.3.6 的 magiskHide props config

下面是 ro.debuggable 的设置过程

PS E:\ChromDownloads> adb shell
raven:/ $ su
raven:/ # getprop ro.debuggable
0
raven:/ # props

Loading... Please wait.


MagiskHide Props Config v5.3.6
by Didgeridoohan @ XDA Developers

=====================================
 Updating fingerprints list
=====================================

No connection.

MagiskHide Props Config v5.3.6
by Didgeridoohan @ XDA Developers

=====================================
 Select an option below.
=====================================

1 - Edit device fingerprint
2 - Force BASIC key attestation
3 - Device simulation (disabled)
4 - Edit MagiskHide props
5 - Add/edit custom props
6 - Delete prop values
7 - Script settings
8 - Collect logs
u - Perform module update check
r - Reset all options/settings
b - Reboot device
e - Exit

See the module readme or the
support thread @ XDA for details.

Enter your desired option: 4

MagiskHide Props Config v5.3.6
by Didgeridoohan @ XDA Developers

=====================================
 MagiskHide props
 Select an option below:
=====================================

Change some of the sensitive props set by MagiskHide.

1 - ro.debuggable
2 - ro.secure
3 - ro.build.type
4 - ro.build.tags
5 - ro.bootmode
6 - ro.boot.mode
a - Change all props
b - Go back to main menu
e - Exit

Pick several options at once by
separating inputs with a comma.
Example: 1,3,4

See the module readme or the
support thread @ XDA for details.

Enter your desired option: 1

MagiskHide Props Config v5.3.6
by Didgeridoohan @ XDA Developers

=====================================
 ro.debuggable
=====================================

Currently set to 0.

You currently have the safe value set.
Are you sure you want to change it to 1?

Enter y(es), n(o) or e(xit): y

Working. Please wait...

Working. Please wait...

Working. Please wait...

MagiskHide Props Config v5.3.6
by Didgeridoohan @ XDA Developers

=====================================
 Reboot - ro.debuggable
=====================================

Reboot for changes to take effect.

Do you want to reboot now (y/n)?

Enter y(es), n(o) or e(xit): y

Rebooting...
PS E:\ChromDownloads> adb shell
raven:/ $ getprop ro.debuggable
1
raven:/ $ su
raven:/ # getprop ro.debuggable
1
raven:/ #

这样无论重启多少次,只要不修改该值,都会是 ro.debuggable=1


开始 RenderDoc 抓帧步骤

真的经历千辛万苦才到这部,那么我们继续使用 RenderDoc 来设置吧

RenderDoc 连接 真机

右下角选择,我们的调试机:google pixel 6 pro

unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第25张图片

允许 RenderDocCmd 的 File Access 权限

这时,google pixel 6 pro 会提示应用的 文件访问权限,将两个:RenderDocCmd 都 Allowed 一下:
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第26张图片

确定 application packagenames

google pixel 6 pro 下找不到 packagenames,我是真的服,如下图:
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第27张图片

google 一下:how to look up the application packagename

找到一篇:Find package name or application ID of an Android app

可以在play store下载:Package Name Viewer 2.0

为了方便,也可以直接下载我网盘里的:
安装 PackageNames Viewer 2.0

unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第28张图片

安装完后运行
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第29张图片

下面是用我的小米机来找 packagenames
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第30张图片


RenderDoc 始终无法抓抓帧(Android亲测,PC 没有问题)

再次重复说明一下:

最终发现,折腾这么就,RenderDoc 还是无法抓 安卓平台的其他非 debuggable 应用(以前的 pacthing 修改 android manifest.xml中的 debuggable 然后,重新打包,签名的方式无效了(虽然官方文档中没声明,但是亲测即可了解到,虽然是开源,我可不想大费精力去阅读、修改源码)

看了一下 RenderDoc 的 Github 作者声明,也是如此,所以妥妥的放弃了 RenderDoc 的抓帧方案了

unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第31张图片

还是使用 GPA + 模拟器的方案靠谱


GPA - Capture Frame->Shader

既然 RenderDoc 不能抓,那就还是使用回 GPA 来抓吧
GPA 目前唯一缺陷就是不能导出模型的 UV
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第32张图片

下面是 原 shader 备份(怕 收到律师函,所以不公开

  • capture frame->original vertex shader
  • capture frame->original fragment shader

下面是自己在 unity 中复刻后、优化后的 shader(怕 收到律师函,所以不公开

  • optimize shader lab
  • ZDSXS_2022_04_26.shader (怕 收到律师函,所以不公开

还原到 shaderlab 心得:无他,唯熟手尔。

短一些的代码,基本上 1 天左右,向上面 的代码大概就 1天左右(还原 VS, FS)


还原 Shader 效果

最后通过其他方式,“拿到” 了 学习素材,然后使用自己还原的 shaderlab 套上即可看到效果
材质参数随意调整的,顺眼就好,没得时间一个一个看 shader 的传入参数来还原
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第33张图片
unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第34张图片

unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第35张图片

unity shader - 圣斗士星矢 人物 shader 还原 - GPA 抓帧提取资源、shader,ROOT权限、救砖、ro.debuggable=1(最终还是RenderDoc无法抓帧)_第36张图片


还原的学习项目

不公开,个人学习用
(数量多,未完成)


总结


GPA, RenderDoc 各发挥作用

  • GPA - 抓 Shader 代码,纹理也可以
  • RenderDoc - 抓模型,纹理也可以

运行时,基于 Graphics Event/API hook 的方式

使用 RenderDoc, GPA 这些运行时抓帧分析的方式优化点时非常明显的:

  • 优点:就是可以不用破解,直接从内存分析抓取资源、Graphics API/event hook抓取,shader 的反编译,因此无论开发商做了什么加密都没用,一样可以抓
  • 缺点:一次只能抓取游戏当前运行的界面中所有显示的资源

Project

(不公开,自己学习用)

  • RecoveryShaderEffect_Unity_2018.2.11f1_TX圣斗士_效果还原_没在线性空间 - BRP

Rerfernces

  • Application/Graphics Analyser - 应用程序、图形分析工具集

你可能感兴趣的:(unity,unity-shader,工具集收藏,unity,抓帧学习,抓帧分析渲染)