关于大文件十六进制数据操作的问题

wzn1987 2010-07-11 08:32:24
这几天在弄个游戏的登录器,因为想弄个补丁功能,所以需要操作数据文件,现在数据文件分析已经结束了,就差数据读写了,目的数据文件比较大,有 1G 多,所以觉得有些玄乎,如果补丁文件大于原始文件的话,需要往目的数据文件里插入相差的字节数组,这里就觉得有些玄了,不知道大家有什么好的方法,我现在的想法是“缓存数据文件头-->插入补丁数据-->缓存数据文件尾-->写入目的数据文件”,不过这样的方法太花费时间了,总觉得不好用,麻烦有解决方案的朋友给个思路,先谢谢了。


顺便提个问题,一般游戏登录器都有登录器配置器,那东西说白了就是能够改变登录器的目的 IP 地址,我也想弄那东西,目前想到两个方法:1.十六进制找登录器保存目的 IP 地址的位置,然后进行数据写操作。 2.将目的 IP 地址保存到资源中,然后从登录器的资源中写字符串资源。
关于第二个方法在网络上看到可以读写外部资源文件,应该也能读写 exe 文件的,不过没试过,麻烦大家给个好些的解决方案,先谢谢了。
...全文
105 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzn1987 2010-07-21
  • 打赏
  • 举报
回复
本来前天要结贴的,后来工作太忙就忘记了,真是抱歉。

问题基本解决了,关于第一个问题用的就是追加文件尾的方法,早看到楼上的回答就不用纠结那么久了,第二个问题就准备用 16 进制流修改的方式,可以固定字符串长度,在用的时候去掉字符串结尾就可以了,郁闷的是因为想要做的面向对象,所以封装了底层的操作(也就是个 16 进制与字符串和整形之间的互相转换),数据文件数量比较多,有近 50000 个,所以速度比较慢些,等以后有更好的方法再优化了。

再次感谢楼上各位的帮助,结贴了
zgke 2010-07-19
  • 打赏
  • 举报
回复
你看你的数据结构了..如果结构里可以使用 偏移地址的方式..那你大可以把你要写入的数据写到文件尾.然后修改对应的偏移量就好了.
第2个问题 EXE的...这个你要看EXE是怎么写的..如果程序里使用资源方式..你可以功过PE文件结构..然后找到对应资源表然后修改内容,应资源表地址和大小...如果写到程序里,简单的就只直接16进修改.难度在于如果IP是字符串类型的位数例如"10.1.1.1" 你要修改为"xxx.xxx.xxx.xxx" 就困难了.因为程序的大部分偏移地址需要改变. 如果是个数字类型的直接修改就可以了.
风平心境 2010-07-19
  • 打赏
  • 举报
回复
你这个补丁是内存补丁,还是静态文件补丁啊?

打补丁就就是要修改目标进程内存的数据.
1.lpk 注入 方式
2.dll 注入
3.shell code 方式

说实在的.lz用c#来弄这些东西真是不敢恭敬. 客户要打补丁,还要安装.net framework.

捷哥1999 2010-07-19
  • 打赏
  • 举报
回复
应该也能读写 exe 文件的

这个估计不行,除非是病毒的方式去改。
showjancn 2010-07-19
  • 打赏
  • 举报
回复
更新目标机器1G数据,不太合适。
还是把重点放在本地数据的截获和更改上可能是出路。
wzn1987 2010-07-19
  • 打赏
  • 举报
回复
这问题没人帮帮忙吗?今天下班前结贴
平生我自如 2010-07-12
  • 打赏
  • 举报
回复
帮顶……………………
wzn1987 2010-07-12
  • 打赏
  • 举报
回复
我给它顶上去,谢谢楼上帮顶
wgc 2010-07-12
  • 打赏
  • 举报
回复
怎么会有这么的数据?
lvfeng19806001 2010-07-11
  • 打赏
  • 举报
回复
帮你顶下,别沉了,不会!

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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