主要考察opcode还原,具体可参考:[原创]用 Lua 简单还原 OpCode 顺序。但是中国女人一身反骨,就想硬刚逆向。通过libjava.so可知lua版本是5.3.3
除了众所周知的luaV_execute以外,还可以通过其他地方比如funcnamefromcode进行分析。
主要考察opcode还原,具体可参考:[原创]用 Lua 简单还原 OpCode 顺序。但是中国女人一身反骨,就想硬刚逆向。通过libjava.so可知lua版本是5.3.3
除了众所周知的luaV_execute以外,还可以通过其他地方比如funcnamefromcode进行分析。
起因:碰到一个GG脚本,需要知道这个脚本做了什么。
使用unluac反编译,lua脚本已被混淆,完全不可读:
frida是一个非常好用的hook框架,但使用中有两个问题,一是非root手机使用挺麻烦的,二是frida相较于其他HOOK框架没那么持久。网上的持久化大多基于xposed、刷ROM或者是virtualapp,前面两个是比较重量级,不够轻便。虚拟化技术本身就自带风险,很容易被检测到。
在Android端,网上教程里大部分都是使用frida server来进行hook,其实还有一种使用方法为 frida gadget,此方法需要将frida-gadget.so注入到apk中,纯手动的话过于麻烦,所以这里实现两个脚本,分别用修改smali、修改so来注入目标。
我使用的frida-gadget版本为14.2.18。有其他版本的需求,需要替换tools下的so文件
此方法相对简单。原理来自于古早的静态注入方式:Android平台感染ELF文件实现模块注入
而这种注入方式有工具可以快速实现:How to use frida on a non-rooted device
该方法优点在于可以让gadget是第一个启动的,缺点是没有so的apk不能用
本次主角是米哈游的《原神》,起因还是在网上看到了一篇关于崩3的符号信息还原的文章,就想看看原神上有没有变化。
本次分析选取的是android平台的,游戏采用unity开发,使用il2cpp模式编译。
使用 IL2CPP 模式编译,游戏中使用的字符串都被保存在了一个global-metadata.dat的资源文件里,只有在动态运行时才会将这些字符串读入内存。一般使用Il2CppDumper就可以读取global-metadata.dat文件中的信息,帮助反编译。
有破解就有保护,可能会遇到无法dump或者global-metadata.dat文件结构被修改的情况,无法使用Il2CppDumper,这个时候就需要自己动手了。