mayuan5520 发表于 2019-9-23 11:46

C/C++如何锁定某个地址的值不被修改呢?

C/C++在学习外挂制作方面,比如我CE找到了某个值的基址,我要用C++实现checkbox勾选上的时候,那这个值不能被修改。相当于锁定,在勾选上时候一直不能被修改。类似图片上的这种。勾选上的时候外部无法修改数据。请各位大神指点下经验,谢谢啦

mayuan5520 发表于 2019-9-23 11:58

获取句柄获取PID打开进程然后写入进程都会。但是写入后游戏里面动一下那个值会被修改,如何让我找到的那个值在勾选的时候不被修改呢

苏紫方璇 发表于 2019-9-23 12:59

ce的锁定是快速不断的比对写入原数据

mayuan5520 发表于 2019-9-23 13:10

谢谢版主      是不是可以这样理解   checkbox勾选上的时候,那这个值不能被修改。相当于锁定, 是不是有个死循环来做?当checkbox==true一直不断向那个地址写入某个值,直到checkbox==flase的时候在return?。这样实现没问题吧?还是加个时钟?或者有更好的方法呢?

bester 发表于 2019-9-23 15:57

我考虑了一下,提几点供楼主参考,首先不考虑0环,只考虑3环,0环驱动要改写估计你也没啥办法

1.3环内,如果知道具体哪个程序会改写游戏,那么只需要不让那个程序获取到handle就可以了,那么可以考虑hook openprocess 这个api,当然如果想彻底一点那就连低一级的api 比如nt或者zw也hook掉
2.3环内,可以考虑将页面属性改成只可读不可写,但是要考虑一个因素就是virtualprotect这个api可以改写内存属性,那么排除掉这个api修改内存属性,那么如果游戏本身会对该地址进行改写,那么肯定游戏会崩溃掉,这点注意一下,如果是别的程序,那么他自己会崩溃,就无所谓了,游戏不会掉的
3.写一个时钟,无限写入该值,缺点就是比较浪费系统资源,而且有一定的危险性,但是概率很小,简单解释就是,假设程序读到该地址的一瞬间,修改了该值,那么有可能造成冲突
4.大循环同理,也就是while do的写法,不断用read读取该值,如果获取值不是你修改的值,那么就改写成你想要的值,这种好处就是多读少写,理论上来说更安全一些,比频繁写入更为安全

mayuan5520 发表于 2019-9-23 18:12

好的谢谢。刚接触这块,给了不少思路!

苏紫方璇 发表于 2019-9-23 18:28

mayuan5520 发表于 2019-9-23 13:10
谢谢版主      是不是可以这样理解   checkbox勾选上的时候,那这个值不能被修改。相当于锁定, 是不是有个 ...

加个时钟就可以,复选框选中就启动时钟,然后时钟里读取数据,比对,写入锁定数值
页: [1]
查看完整版本: C/C++如何锁定某个地址的值不被修改呢?