seusimon 发表于 2007-6-6 13:11:24

[讨论]游戏录像开关,有人研究吗?

有时候一局打了3、4个小时,经历了多次裸奔逃亡、会战,艰难取胜,却没有录像来回味,总觉得心里空荡荡。但每次要求主机钩上录像开关,80%遭拒绝。 如果存在一个工具,能够让客机摆脱主机的控制进行强制录像,该是多么高兴的事儿。网上踏破铁鞋来搜索永久录像补丁,包括用google变着关键词搜洋人的网站,也没有这种工具的影子。 最后心里萌生一个念头,自己做! 菜鸟我用Ollydbg + 金山游侠,反复寻找录像标记在内存中的位置,还有执行录像的函数入口,然后修改指令,虽然有所小成,但就是解决不了同步错误的问题。最好的时候,和朋友打了20分钟才跳出同步错误。怕麻烦朋友,我在自己机器上用vmware跑了win98,再装个aoc进行模拟联机测试。无奈跟同步有关的代码对我而言太艰涩,最后工作、生活的琐碎事情太多,只好先放下了。 第一次来这里,请教高手,如果有兴趣,是否可以一起研究录像开关?我摸索出来一些心得可供参考。

鬼火 发表于 2007-6-6 13:31:46

办法倒是有...你自己建主就不用要求别人录像了..

takken4 发表于 2007-6-6 13:32:23

什么版本?CALL地址多少

seusimon 发表于 2007-6-6 13:34:07

楼上的办法简单,但是不可能每次都自己建主。我对建个局等人来等上一小时心有余悸.......

seusimon 发表于 2007-6-6 13:37:47

1.0 版本,call地址不在手边,待会回家找出来

takken4 发表于 2007-6-6 13:47:32

1.0c的比较熟点

seusimon 发表于 2007-6-6 19:13:03

好,我分享一下自己的分析结果,当抛砖引玉。
写入是否录像的标记,据我分析是这个函数:
00424300/$33C0          XOR EAX,EAX 00424302      8A81 D8090000 MOV AL,BYTE PTR DS: 00424308\.C3            RETN
如果想始终都录像,那么改成如下指令就行,AL=1代表录像:
00424300/$33C0          XOR EAX,EAX 00424302      B0 01         MOV AL,1 00424304      C3            RETN
这样一来打单人战役也能录像了。不过简单的修改是逃不过游戏同步检查的法眼的,一联机准出问题。

seusimon 发表于 2007-6-6 19:24:21

真正在游戏开始时启动录像、创建*.mgx文件的,是这个函数:
005CF260/$81EC 10090000 SUB ESP,910 005CF266|.56            PUSH ESI 005CF267|.57            PUSH EDI 005CF268|.8BF1          MOV ESI,ECX 005CF26A|.E8 9150E5FF   CALL age2_x1.00424300 005CF26F|.85C0          TEST EAX,EAX 005CF271|.0F84 E8010000 JE age2_x1.005CF45F 005CF277|.8B3D 38336800 MOV EDI,DWORD PTR DS: 005CF27D|.C705 38336800>MOV DWORD PTR DS:,1 005CF287|.C705 64A56600>MOV DWORD PTR DS:,64 005CF291|.8B8E 24040000 MOV ECX,DWORD PTR DS: 005CF297|.8B01          MOV EAX,DWORD PTR DS: 005CF299|.FF90 D0000000 CALL DWORD PTR DS: . . . 005CF456|.51            PUSH ECX 005CF457|.E8 2C400400   CALL age2_x1.00613488 005CF45C|.83C4 04       ADD ESP,4 005CF45F|>5F            POP EDI 005CF460|.B8 01000000   MOV EAX,1 005CF465|.5E            POP ESI 005CF466|.81C4 10090000 ADD ESP,910 005CF46C\.C3            RETN
注意这句话: 005CF27D|.C705 38336800>MOV DWORD PTR DS:,1
经过多次测试,就定位到这条指令。 如果执行过这句,即使没有欺骗程序进行强制录像,也会在游戏开始的几秒钟内跳出同步错误! 所以,直接改成 005CF27D|.C705 38336800>MOV DWORD PTR DS:,0 OK,游戏开始也不会出错了,但在以后一个不确定的时间里,还是跳出同步错误提示。 本人精力能力有限,对此也无能为力了,期待可以启发高手来继续探索。
[此贴子已经被作者于2007-6-6 19:27:53编辑过]

seusimon 发表于 2007-6-10 14:13:46

没有人提出高见吗?
页: [1]
查看完整版本: [讨论]游戏录像开关,有人研究吗?