版主
- 大洋
- 14985
- 阅读权限
- 140
|
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
引言:感谢 世界哪有真情lu、9011、i6henl、だ`無ぺ窷. 、老黑、花九胖 大佬们提供技术支持与教程文档分享!
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
※※※※※※※※ 前言 ※※※※※※※※
由 Radius60 制作的 Sony 菜单,修改文件查找与修改与常规 Radius60 菜单一致,特点是标志性的 Sony 菜单代码混淆,是此菜单修改的拦路虎。
Radius60-Sony 文件层级结构,与常见的 Radius60 不同,所有 class 文件均放置在目录内,且基本采用单字母方式命名目录(包)名与 class 文件名。由于 class 文件名与目录(包)名重复,造成反编译出来的 java 文件,混淆报错处理困难。
针对此类原盘,可以采用字节码修改的方式,直接对 class 文件下手,避开处理因混淆产生的大面积关联报错修改处理。
字节码修改,所有变量有完整的类型类名指向,修改单 class 文件无需额外加载调用类库,能完美避开混淆造成的修改困扰。这里是 hyb9373 大佬的字节码工具修改帖子链接:
hyb9373[蓝光技术] Sony+Radius60菜单用字节码工具修改的实例
但字节码修改操作要求非常小心细致,因为修改过程中产生的错误,是非常难察觉和发现的,一旦出错无法排查出来,就只能重头再来一遍。而且,字节码的代码阅读,还是不如 java 代码方式阅读直观方便,因此,采用 java 代码方式来修改,还是具有一定的视觉处理优势的。
利用新建子类的方式让反编译的 java 文件报错解除,使之能被修改编译,并让 BDJ 菜单正常工作。
以下就是使用 java 代码方式对 Radius60-Sony 菜单进行修改的过程记录。
本篇实例操作原盘:Whiplash.2014.UHD.BluRay.2160p.HEVC.TrueHD.Atmos.7.1-BeyondHD
※※※※※※※※ 菜单 class 文件查找 ※※※※※※※※
StandardMenuXlet.class BDJ启动入口类
com.spe.g.a.class 菜单总类
com.spe.g.b.l.class 字幕菜单-图块显示类
com.spe.g.c.l.class 字幕菜单-按钮列表类
com.spe.g.a.h.class 字幕菜单-按钮动作类
b.c.a.n.class CodeName 类
※※※※※※※※ 正文 ● 报错处理 ※※※※※※※※
这里参考福克斯 04001 版本对混淆报错的处理。
CodeName 类 报错处理
字幕菜单-按钮列表类 报错处理
字幕菜单-图块显示类 报错处理
按钮图块显示类,调用的类较多,所以冲突报错也相对较多。
图片类内代码调用使用到的类,可以通过 import 语句知道。
- The type b.q.d.b cannot be resolved. It is indirectly referenced from required .class files
- 无法解析到 b.q.d.b 类,它被所必需的.class 文件间接引用。【即菜单显示类所继承的父类或调用的函数所属类中,有引用到此类文件】
- The import b.q.c.a cannot be resolved
- import 语句要导入的 b.q.c.a[类/函数/常量] 无法被解析到
- Multiple markers at this line
- - The import b.q.d.g cannot be resolved
- - The import b.q.d.g collides with another import statement
- 此代码行有多个解析标记
- - import 语句要导入的 b.q.d.g[类/函数/常量] 无法被解析到
- - import b.q.d.g 与另一个 import 语句冲突 【指去除包名 b.q.d 后的类文件名,g.class 与其他 import 语句导入的泪文件名重复】
- The import b.q.g collides with another import statement
- import b.q.g 与另一个 import 语句冲突 【指去除包名 b.q 后的类文件名,g.class 与其他 import 语句导入的泪文件名重复】
- Only a type can be imported. com.spe.g.a resolves to a package
- 只能导入具体类型文件。(目录)。
复制代码
上面列出了报错语句的翻译说明,为后续报错处理提供修改支持。
以下是类文件的代码内容,已经标识出来所调用类的完整路径名,以及调用的函数格式。同时还标示出了 package 与 import 语句的报错原文。
报错说明一:
import 语句无法解析到,是指导入的完整类名中,所包含的路径名(目录名)有同名类存在,造成重名冲突,因而无法检索到我们要的类文件。
……
报错说明二:
import 语句与另一个 import 语句冲突,这是指两个导入的类文件拥有同样的文件名。
譬如,import b.q.d.a.g; 与 import b.q.d.g; 两者导入的 g.class 文件重名。对于这种重名冲突,我们可以对代码语句中出现的同名类名,加上完整路径名,解决这个同名冲突问题。
报错说明三:
import com.spe.g.a; 提示 com.spe.g.a 被解析为包。这是因为目录 com\spe\g\a\ 与类文件 com\spe\g\a.class 在代码中都同样以 com.spe.g.a 格式表示,所以出现了解析错误,没有指向 com.spe.g.a.class 类文件,同样是将 com\spe\g\a\ 目录屏蔽(删除)以去除解析干扰。
报错说明四:
无法解析到 b.q.d.b 类,它被所必需的.class 文件间接引用。这类报错提示,一般出现在 extends 衔接的父类上。
这类报错提示结果,主要是提示继承的父类中,有使用到 b.q.d.b 类。
虽然依照以上报错说明给出的解决方式,可以去掉一部分的报错,但实际操作情况是,旧的报错解除,新的报错出现,在不断地尝试屏蔽各种新提示干扰后,依旧不能完全解除原盘的所有报错提示。
这时候,我们就需要另一种解决思路:不再直接 import 原来的报错类文件,而是先对原 import 语句所要调用的类作 extends 操作,即建立它们的子类,然后通过 import 这些新子类,达到间接调用原有报错类文件的目的。
新建不会重名的继承子类,让我们无须像原来的报错处理一样,去屏蔽冲突文件,方便菜单代码的修改操作。
但这种操作,需要对 java 的编程有一定的操作基础知识,还要规避一些转义陷阱。
具体操作,请查看下一章节。
※※※※※※※※ 正文 ● 按钮显示类的报错处理 ※※※※※※※※
操作核心:首先,建立所调用的类文件的子类。然后,再修改按钮显示类里的 import 等调用语句,改为引用新建立好新子类文件。
……
使用 SBDJ 工具建立继承子类(接口)的操作如下:
……
新建的子类文件,同样会出现引用的父类类名报错,因此需要根据上一章节的报错处理解决。
得到的正确编译子类 class 文件,可以转移保存,等待所有子类文件生成完毕,再统一加入 jar 文件内,作为外部 jar 调用以修改菜单代码文件。
bqca | b.q.c.a 子类
bqcb | b.q.c.b 子类
bqdae | b.q.d.a.e 子类
bqdag | b.q.d.a.g 子类
bqdah | b.q.d.a.h 子类
bqdbf | b.q.d.b.f 子类
bqdbf.class | b.q.d.b.f 子类
b.q.d.b.f.class | 类内容修改
b.d.a.class | 类内容修改
bqdc | b.q.d.c 子类
bqdg | b.q.d.g 子类
bqdh | b.q.d.h 子类
bqdi | b.q.d.i 子类
bqdq | b.q.d.q 子类
bqdr | b.q.d.r 子类
bqg | b.q.g 子类
com.spe.g.b.l | 字幕菜单-按钮显示类
※※※※※※※※ 结语 ※※※※※※※※
Radius60-Sony 类型的 BDJ 菜单代码,依据目前修改过的此类原盘的记录,它们的代码结构基本一致,本次制作好的子类 class 文件都能被后续 Radius60-Sony 原盘通用!
感谢各位的阅读!
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅分割线┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅
以上是《Radius60-Sony 菜单修改》的内容目录及片段,详细内容下载附件“Radius60索尼_爆裂鼓手_菜单.chm”查阅。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
评分
-
查看全部评分
|