有经验的朋友来看看

yang_e_2009 2009-10-03 10:22:09
昨天试了个小游戏, 玩的很不顺利, 尝试去修改存档文件.....

我可以确定存档文件第76~79字节代表了金钱数. 但我并不确定金钱数一定是用4个字节表示的~

简单代码如下:

HFILE hSaveFile = _lopen("x:\\xxx\\xxx.sav", OF_WRITE);

int Money = 10000

_llseek(hSav, 76, FILE_BEGIN);
_lwrite(hSav, (CHAR*)&Money, 4);

_lclose(hSav);


文件修改似乎成功了~ 不过居然说存档被破坏了......

莫非不是简单的修改文件数据就可以了??

还有就是如果我想在游戏运行时对进程内存写入
可是每次启动进程变量的地址总是会改变, 重新搜索好麻烦, 大家有没有什么好的办法呢??

有经验的朋友给点建议或者链接都行
谢谢大家了!
...全文
162 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yang_e_2009 2009-10-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 aeris 的回复:]
我的意思是,寻找附近有没有很少发生变化的数据(不是指地址,而是指内容),如果有,先搜索到这段很少变化的数据,然后根据偏移来定位目标数据
[/Quote]
谢谢.
Aeris 2009-10-03
  • 打赏
  • 举报
回复
我的意思是,寻找附近有没有很少发生变化的数据(不是指地址,而是指内容),如果有,先搜索到这段很少变化的数据,然后根据偏移来定位目标数据
spring046400 2009-10-03
  • 打赏
  • 举报
回复
hao
yang_e_2009 2009-10-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 aeris 的回复:]
可以全地址空间搜索特征码
比如你可以看看有没有哪段数据是始终不变的,然后全地址空间搜索即可。
当然,实际做的时候,需要查询目标进程的地址空间分区情况,然后到合适的区间内搜索。
[/Quote]
您的意思是说
int i;
int x;

&i - &x 是不变的?

不过始终不变的似乎大部分是代码段
我试了下

void fun(int* p)
{
*p = 10;
}
int wmain(int argv, wchar_t* argc[])
{
int i = 0;
std::cout << (char*)&i - (char*)&fun << std::endl;
return 0;

还是会变的~
Aeris 2009-10-03
  • 打赏
  • 举报
回复
通常游戏的关键数据都不会存放在堆栈里,结合地址可能变化这种情况,应该是动态分配的(malloc/new),所以地址不一样。搜索特征码是一种可行的方法。
oyster2008 2009-10-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yang_e_2009 的回复:]
引用 1 楼 oyster2008 的回复:
第二个问题,没明白变量地址会更改是什么意思

例如
int main()
{
    int i = 6;
    cout < < (void*)&i < < std::endl;
    return 0;
}
每次启动程序i的地址都不一样
如果我想用另一个程序对该进程的i写入, 怎样锁定i的位置?
[/Quote]
全局变量和静态变量倒还有一定可能是固定位置的,堆栈变量的话如果函数执行的顺序不一样,则地址肯定是变化的
Aeris 2009-10-03
  • 打赏
  • 举报
回复
可以全地址空间搜索特征码
比如你可以看看有没有哪段数据是始终不变的,然后全地址空间搜索即可。
当然,实际做的时候,需要查询目标进程的地址空间分区情况,然后到合适的区间内搜索。
yang_e_2009 2009-10-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oyster2008 的回复:]
第二个问题,没明白变量地址会更改是什么意思
[/Quote]
例如
int main()
{
int i = 6;
cout << (void*)&i << std::endl;
return 0;
}
每次启动程序i的地址都不一样
如果我想用另一个程序对该进程的i写入, 怎样锁定i的位置?
oyster2008 2009-10-03
  • 打赏
  • 举报
回复
第一个问题,一般配置文件会有校验机制,你只是修改了文件中的一两个字节,这样会使整个文件校验错误,所以游戏软件认为配置文件被破坏
第二个问题,没明白变量地址会更改是什么意思

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧