中级玩家
 
- 贡献度
- 1
- 金元
- 1216
- 积分
- 126
- 精华
- 0
- 注册时间
- 2009-8-21
|
本帖最后由 yigjvn 于 2017-12-13 23:57 编辑
首先,你的猜想1和3都是对的,CE可以枚举附加进程的基本上所有DLL,你能在Unity3D制作的游戏里发现游戏加载了mono.dll
但是你是会发现没有存储Unity3d的C#脚本逻辑代码的Assembly-CSharp.dll或是存放JavaScript脚本代码的Assembly-UnityScript.dll
这是因为Unity3D使用mono_image_open_from_data_with_name这个函数进行dll动态解密.
这时你便需要用.NET Reflector这样的.NET程序反编译软件来反编译这个Assembly-CSharp.dll了
至于说如何找到这些代码,那么你是需要关键字的,按照你上面说的例子,不管是Calories还是Hunger都可以查找到相对应的类名
其实通过查找你所猜测的关键字基本上就能找到你所想要的函数了,因为一般游戏程序员都是写的比较规范清楚的.
当然,游戏也很可能会混淆函数名的....
但是你也可以找到可以反混淆回来的程序...
那么如果你还是想用CE来获取mono数据的话,其实也是可以的,CE6.4之后的版本自带了monoscript.lua这个自动运行的lua脚本,也就是可以用LaunchMonoDataCollector()这样的Lua函数来初始化mono数据的收集器
然后用CE附加了Unity3D制作的游戏后,在CE的主界面的菜单栏里会出现Mono的菜单项,接着Activate mono features,Dissect Mono,这样便会生成Mono的各种数据的分析表.
至于为什么大多数我们写AA都是在函数头直接将结果返回指定的值,是因为这样的话,代码紧凑,而且比较稳定(相对于在其他地方修改)..
|
|