KeyFC欢迎致辞,点击播放
资源、介绍、历史、Q群等新人必读
KeyFC 社区总索引
如果你找到这个笔记本,请把它邮寄给我们的回忆
KeyFC 漂流瓶传递活动 Since 2011
 

[文物] Planetarian 汉化测试第一版下载

[ 45322 查看 / 59 回复 ]

回复:Planetarian 汉化测试第一版下载

问一下楼主,外挂字幕是如何实现和游戏同步的?是通过API Hook、调试API、硬件断点还是别的技术?
    我在做的对脚本引擎的逆向工程遇到了很大的阻碍。现在已经查明SEEN文件位于kineticdata.pak的
偏移29B00D8h处,大小为8506Ch字节,前面38h字节为头部,游戏初始化时读入内存并进行第一轮解密。
通过目录或存档进入游戏时还要再解密一次,才得到真正的脚本。最大的困难在于虚拟地址004F3210处
的一个子程序。这个子程序是整个解密算法的核心,两轮解密都要用到,长度为22F9h字节,有36个输入
参数,里面大量使用多层间接寻址和跳跃表,最后还有389个ret返回出口。看到这个样子我已经觉悟到
要在短期内还原它的算法是不可能了。下个月我考研,现在只有放弃。期待楼主早日做出正式版。
    另外游戏中的文字到底是用什么方法显示的也不清楚。SoftICE装载了ddraw.dll,d3d8.dll,d3d9.dll
之后,DirectDrawCreate、DirectDrawCreateEx、Direct3dCreate8、Direct3dCreate9及常规GDI中的
TextOut、ExtTextOut、DrawText、DrawTextEx等函数都拦截不到文本输出。
分享 转发
KEYFC第二届版杀 - 川澄 舞
TOP

回复:Planetarian 汉化测试第一版下载

没有直接的方法。用EnumWindows枚举所有顶层窗口的HWND,然后用GetWindowThreadProcessId取得它的
ProcessID,一个一个验证。
如果限定于Pl的窗口的话,更好的办法可能是直接调用FindWindow,
使用窗口类名
"VisualArts_System2000_KINETIC_planetarian 乣偪偄偝側傎偟偺備傔乣"。

另外还有疑问:每隔X毫秒读取的内存区域是如何确定的?
KEYFC第二届版杀 - 川澄 舞
TOP

回复:Planetarian 汉化测试第一版下载

FindWindow不需要完全指定两个参数,窗口名NULL(0)就可以了。
其实可以用工具得到窗口名,如M$的Spy++和Borland的WinSight。

是这样啊。我也已经发现,虽然在Load或New的时候,整个脚本会被解密放到用GlobalAlloc
分配的内存中,但每隔一段时间就被GlobalFree了。之后再反复执行GlobalAlloc/GlobalFree,
分配到的虚拟地址可能发生改变,但一般会出现在02XXXXXXh处。如果每隔X毫秒搜索固定字符串
的话,中间会有一段时间找不到,然后可能在同一位置或另一个位置找到。
另外程序每次显示一小段字符都要单独用GlobalAlloc分配内存,
把字符复制过去,显示完就GlobalFree释放。
KEYFC第二届版杀 - 川澄 舞
TOP

回复:Planetarian 汉化测试第一版下载

是以 00 00 00 00 38 00 00 00 开始的头部吗?
这38h字节的文件头中的大部分数据项(DWORD值)都在4F3210子程序里用到了。
又发现了一个问题,解密的脚本并没有被释放,只是改变了映射。而且,
如果游戏不被中断(比如Alt+Tab切换或调试器中断),有可能并不会发生地址映射改变。

地址在07XXXXXX是不是因为同时运行的程序太多?我每次都是启动Windows就开始调试,
每次都在03000000以下,一般用S命令搜索只到08000000,时间应该少于0.5秒。
KEYFC第二届版杀 - 川澄 舞
TOP

回复:Planetarian 汉化测试第一版下载

今天又遇到一个问题,我把游戏字体强制改为宋体,并在缓冲区中放入一些GB2312编码的中文字符,
发现一个奇怪的现象,所有放进来的中文字符都被当成日文内码转换为Unicode,而日文字符又被当成中文内码。
结果就是没有一个字符能正常显示,而且许多中文字符被当成日文转换为Unicode时失败,导致程序死锁。
问题的关键在于一个GDI函数GetGlyphOutline,此函数是根据一个给定DC中的字体,把一个字符转换为位图。
函数执行中调用了MultiByteToWideChar函数,搞不懂的是这个函数的CodePage参数一会儿中文(3C8H),
一会儿日文(3C4H),哪位熟悉这方面的知识朋友可以指点一下解决办法?
KEYFC第二届版杀 - 川澄 舞
TOP