RukoBlood/jenny-mod-re-clean

GitHub: RukoBlood/jenny-mod-re-clean

该项目对经过重度混淆的 Minecraft Jenny Mod 进行逆向工程与代码清理,旨在还原可读的 Java 源码结构并消除各类混淆手段的影响。

Stars: 0 | Forks: 0

**18+ 警告!糟糕的代码警告!** ## **本项目是 https://github.com/palkaline/jenny-mod-re 的一个 fork** # Jenny mod 逆向工程(及代码清理)(TMC 1.1.0 版本) 由 Palkaline 创建,由我编辑。目前我重命名了部分类,因为其中一半仍然在使用逆向工程产生的乱码。 ## 关于 本项目的初始目标 - 对整个 jar 文件应用过的极端混淆进行逆向工程 - FOSS! - 清理代码 ## 构建和/或运行 查看原版。 ## 混淆 按严重程度排序 - 异常传递与返回包装 try { // 代码 ... } catch (RuntimeException runtimeException) { // 看这里... 异常被包装、传递并返回(同一性) throw a(new RuntimeException(runtimeException)); } public static RuntimeException a(RuntimeException runtimeException) { return runtimeException; } - 异常表混淆 try { try { try { // ... 真实代码 } catch (RuntimeException runtimeException) { throw a(new RuntimeException(runtimeException)); } // 代码 ... 或顺延执行 } catch (RuntimeException runtimeException) { throw a(new RuntimeException(runtimeException)); } // 代码 ... 或顺延执行 } catch (RuntimeException runtimeException) { throw a(new RuntimeException(runtimeException)); } - 悬空 catch 块 int a = 5 + z; // 一些代码 ... catch { // 没有前置 try 的悬空 catch throw a.b(new RuntimeException()); } - 不可能的控制流 block71: { block73: { block75: { // 一些代码... *** goto label69 *** // 无法追踪 } } } - 局部变量复用 Object z = new Integer(5); // 一些代码... z = new HashMap(); - 重复标识符 class a { int a; Aa a; A a(); public class a { } } - synthetic(s) 值得单独开一个子话题讨论 - 通用的“全填充”包装器 - 内部类辅助方法 - 泛型剥离 - `class A` --> `class A`,涉及类、方法、参数等... - 签名冲突 int a() float a() a a() - 上面未包含的其他 CFR 失败情况... ## 正则表达式 下面是一些有用的模式: - 剥离泛型的 onMessage 恢复: - 查找:`((?:public|protected|private)?\s*IMessage\s+onMessage\s*\(\s*)IMessage(\s+\w+\s*,\s*MessageContext\s+\w+\s*\)\s*\{\s*return\s+[\w.]+\s*\(\s*\(\s*)([\w.]+)(\s*\)\s*\w+\s*,\s*\w+\s*\)\s*;\s*\})` - 替换:`@Override\n$1$3$2$3$4` - 查找对任意方法的调用,例如 `ad`: - `(void |\.)ad\(\)` -
查找屏蔽词: cock|pussy|dick|sex|trol|(? 不再需要: - 异常包装混淆(传递与返回) - 查找:`throw ([\w\d]+)\.([\w\d]+)\(([\w\d]+)\);` - 替换:`throw $3;` ## Bug (Palkaline) 我 110% 保证在反混淆过程中产生了一些 bug。许多步骤很可能会导致许多 bug,并且每一步都会使之前步骤产生的 bug 叠加加剧。 最可能出现的 bug 是: - 我未能重命名的悬空 override - a 变成了 doRender, getResourceLocation, getTexture, getModelFileLocation - 因此,这些方法可能会回退到父类的默认实现。 - 引用了具有相同签名的错误方法。 - 静态方法的解析对我来说很奇怪……你总能学到新东西! ## Bug (我) Mod 的当前状态 - я сломаль(坏掉了) ## 相对于源 jar 文件的修改 - 我修改了一些我认为对用户有点不友好的代码部分: - 当年龄检查失败时,删除 `/mods` 中的 mod .jar 和当前工作目录 - 感觉文件系统操作很危险 - 我觉得这个检查界面挺难看的,我发誓以前曾 经在游戏内内置过询问年龄的 GUI 按钮……可能是我老了吧…… - 注释掉了损坏的代码: - 一个例子是 Kobold 伤害监听器 - 它在注册到伤害时输出部落统计数据。然而,目前这 似乎已经损坏了。 - 其他我可能已经忘记的事情……不过已经被注释掉了。 ## TODO (Palkaline) - 修复损坏的重构 - 见上文... - 添加 buttplug.io 支持和/或为动画添加适当的关键帧以解决动作问题 - 见 TODO(搜索 'toy' 等...) - 我写了一个小小的概念验证(未包含在此项目中)并且成功让它 运行起来了,但它需要为每个实体手动复制/粘贴。我讨厌这个项目的设计。 我觉得应该有更好的支持方式来实现这个……再说一次,看注释... ## TODO (我) - 修复女孩们的 bug - 重构一些东西 - ## 参考 - 参见:https://github.com/hfgufjkgjkfbg/Minecraft-Sex-Mod-Jenny-1.12.2-Forge
标签:JS文件枚举, Minecraft, 云资产清单, 代码去混淆, 域名枚举, 游戏Mod, 逆向工程