292012
 

【简介】由于《云之遥》自带的只有8个分辨率,导致部分无理想分辨率的机器上运行无法得到最完美的效果;本工具提供了分辨率修改功能,可以自己设置任意数值的分辨率!

注意1:由于加密机制原因,本工具仅支持繁体版V2.3.0,不支持简体版!
注意2:请务必将本程序与游戏主程序放置于同一目录下。否则将导致本程序无法运行!
注意3:部分杀毒软件会提示“风险注入”,请务必允许并将本程序加入“信任列表”!

 【下载地址】点击下载

 【软件截图】

 

工具原理及说明请见“继续阅读” >>

本工具采用了Hook API外加Loader的形式来实现对屏幕分辨率内存数值的改写,采用Hook API的而不采用Loader监视内存的原因在于这个数值修改必须在游戏程序完成相关初始化前完成,否则分辨率修改将无法成功!

而同时,主程序采用了VMP加密,很明显,直接修改代码是不现实的,只能通过在程序到达入口点后Hook API来实现;当然,这一技术用在被SecuROM加密的简体版上是不可能的(由于SecuROM二次CreateProcess反调试,因此你找不到写内存的时机)

本程序Hook的API为kernel32.GetPrivateProfileIntA,Hook这个API的原因在于游戏程序是通过这个函数来读取game.ini获取分辨率设定值的,而这时Hook的并修改相应内存的话可以保证游戏程序中没有调用过分辨率宽高的设定值,SwdCF主程序中相关代码如下:


0040DDA4 8D4424 0C        lea eax, dword ptr [esp+C]
0040DDA8 50               push eax
0040DDA9 6A 00            push 0
0040DDAB 68 D09D7900      push 00799DD0                ; ASCII "Resolution"
0040DDB0 68 089E7900      push 00799E08                ; ASCII "SETUP"
0040DDB5 FFD6             call esi                     ; kernel32.GetPrivateProfileIntA
0040DDB7 83F8 07          cmp eax, 7
0040DDBA A3 4C257E00      mov dword ptr [7E254C], eax
0040DDBF 0F87 B1000000    ja 0040DE76
0040DDC5 FF2485 04DF4000  jmp dword ptr [eax*4+40DF04]
0040DDCC C705 50257E00 0> mov dword ptr [7E2550], 400
0040DDD6 E9 91000000      jmp 0040DE6C
0040DDDB C705 50257E00 0> mov dword ptr [7E2550], 500
0040DDE5 C705 54257E00 0> mov dword ptr [7E2554], 400
0040DDEF E9 82000000      jmp 0040DE76
0040DDF4 C705 50257E00 A> mov dword ptr [7E2550], 5A0
0040DDFE C705 54257E00 8> mov dword ptr [7E2554], 384
0040DE08 EB 6C            jmp short 0040DE76
0040DE0A C705 50257E00 9> mov dword ptr [7E2550], 690
0040DE14 C705 54257E00 1> mov dword ptr [7E2554], 41A
0040DE1E EB 56            jmp short 0040DE76
0040DE20 C705 50257E00 8> mov dword ptr [7E2550], 780
0040DE2A C705 54257E00 3> mov dword ptr [7E2554], 438
0040DE34 EB 40            jmp short 0040DE76
0040DE36 C705 50257E00 8> mov dword ptr [7E2550], 780
0040DE40 C705 54257E00 B> mov dword ptr [7E2554], 4B0
0040DE4A EB 2A            jmp short 0040DE76
0040DE4C C705 50257E00 0> mov dword ptr [7E2550], 500
0040DE56 C705 54257E00 2> mov dword ptr [7E2554], 320
0040DE60 EB 14            jmp short 0040DE76
0040DE62 C705 50257E00 5> mov dword ptr [7E2550], 556
0040DE6C C705 54257E00 0> mov dword ptr [7E2554], 300
0040DE76 8D4C24 0C        lea ecx, dword ptr [esp+C]
0040DE7A 51               push ecx
0040DE7B 6A 20            push 20
0040DE7D 68 C49D7900      push 00799DC4                ; ASCII "ColorDepth"
0040DE82 68 089E7900      push 00799E08                ; ASCII "SETUP"
0040DE87 FFD6             call esi                     ; kernel32.GetPrivateProfileIntA

由于在获取game.ini中分辨率Resolution数值后还继续读取了数据,因此Hook GetPrivateProfileIntA的话,在40DE87这个CALL调用的时候,执行了我们预先已写好的内存改写代码,此时之前已被程序自身副赋值的宽(7E2550)与高(7E2554)将被新值覆盖,从而实现了修改屏幕分辨率这一功能。

 

 发表评论

(required)

(required)

你可以使用下列HTML标签和属性:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>