受不了了啊!指针与常量!别搁那“就近原则”了!来点从编译器视角的解析吧!
归档 | 目录 | 时间直角 | 关于 |
受不了了啊!指针与常量!别搁那“就近原则”了!来点从编译器视角的解析吧!
C++20 更新了 coroutine 无栈协程的接口,westquote/SquidTasks 就已经使用它在商业产品中作为逻辑框架。它提供了一个近似 javascript 异步操作的写法来构建系统:
1 | Task<int> LoadGame() { |
这种写法的好处就在于,加载过程不阻塞启动流程,且大幅减少异步回调的函数链。本文会尝试利用 Lua 原生的 Coroutine 系统,来搭建优雅的异步框架。
出自 Death Stranding Orignial Sound Track
1=D, Capo=2
First of march, it’s clear to me
It’s something that’s uncomforting
Your body has a way with me
But I’m exactly where I wanna be
But I’m a long way from home
回看上一篇日志,已经是一年之前的事情了,结束了百无聊赖的大学生活,开始买车买房、求职相亲……当然不是。如果生活能如此一帆风顺该多好,然而这种看似“平庸”的生活竟成了奢望。
本文高度致敬张正友的文章《A Flexible New Technique forCamera Calibration》,同时介绍如何在 OpenCV 中实现其方法。虽然看不懂原理,不过东拼西凑姑且能弄出个能用的纯过程代码,放在这里供大伙看个乐。
前几日和朋友聊起各式音游,对解包产生了很大兴趣。当然也被科普了各种防逆向知识,由此想罗列一番做个随笔。
加壳的目的无非两种:压缩或加密。类似于 Minecraft Forge,在运行时中将所需要的字节码转入内存中,这种方式能很好地隐藏 OEP。
而对策便是直接替换class loader,将写入内存的部分输出到文件中,便能获取到所有运行时源码。
在《Project SEIKAI》中,游戏资源被一种特殊的方式所加密。其步骤为:开头128个字节每8个字节的前5个字节二进制取反。这种方法可谓异常简单,只需对比一遍原生 Unity 未加密的资源包二进制文件就能找出规律。
refer: 解包PJS资源的进一步探索, 黑鲸.
这种方式是将在指令头做一个映射,修改译码过程。这种方式可能连操作系统都不一定能捕捉到。
加壳的方式非常之多,还有 int3 陷阱等不再赘述。我也推荐他试着逆向原神,不过难度确实很大,据我所知成功的也仅寥寥几人。日厂手游开发中 Unity 使用率越来越高,这也导致了很多 Unity 上的安全问题能在各种产品中重现。而回忆当年《Love Live!》用的自家引擎,也算是一种原始的加壳方式吧。