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

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

[ 44955 查看 / 59 回复 ]

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

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

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

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

在第一次读入字符数据(就是Pl的Load或New的时候)时,内存中会有某段是固定的字符,查找这些固定字符的位置就行了。

Findwindow的窗口名是什么?我实在不知道怎么把那几个字弄出来。
TOP

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

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

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

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

Findwindow Ok了,谢谢楼上了。

天哪,我本想用将内存中文字全部写成空格来让它不显示的,居然还要改地址。看来让它不显示还比较麻烦,估计查找一次就得N秒。(地址有一次我在07XXXXXX才找到,汗一个)

至于我找的内存,是在比较前面,和文本无关(应该和偏移地址有关)的一组数据,你用fpe去查一下就知道了。注意:前面四句的偏移地址比较后。
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 汉化测试第一版下载

以下引用wdx04在2004-12-18 16:51:17的发言:
是以 00 00 00 00 38 00 00 00 开始的头部吗?
这38h字节的文件头中的大部分数据项(DWORD值)都在4F3210子程序里用到了。


不是,不过不知道前面有没有这个。地址大约在7AXXXX附近。


又发现了一个问题,解密的脚本并没有被释放,只是改变了映射。而且,
如果游戏不被中断(比如Alt+Tab切换或调试器中断),有可能并不会发生地址映射改变。

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

的确,那次运行了N多程序。搜索时间长应该是我的算法问题,呵呵,可以改进。
TOP

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

Xp ok Ma ? ... ''
But Also Thx A Lot ^^
TOP

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

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

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

感谢下载中.......

等待在未来之途的会是什么,我不知道,不过,肯定是与和平、善良、正义完全无关的东西吧!
                                                  ──雪人
TOP

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

首先我完全不了解DirectX……
不过我觉得能否用类似API Hook的方法直接把文字换掉呢。。。。(幻想中。。。)
TOP