C++编程隐藏变量,避免CE对内存搜索
通过重载INT,隐藏内存中的数据,来避免CE等内存搜索工具对内存的锁定与修改。**1 普通程序模拟。输入'A'增加金钱,’S‘减少金钱,’X'用于退出程序。**
```
#include <iostream>
using namespace std;
int money = 2000;
int main()
{
cout << "A 增加,S减少,X退出\n";
do
{
char x;
cin >> x;
if (x=='x'||x=='X') break;
if (x == 'a' || x == 'A') money = money + 10;
if (x == 's' || x == 'S') money = money - 10;
cout << "金钱为:" << money << endl;
} while (true);
}
```
程序执行截图:
**2 Cheat Engine分析**
输入2000后,进行搜索。
可以很轻松的找到在内存中的地址,并修改。
并可能通过谁修改了这个值,来找到相应位置的汇编代码,来更改程序。
**3 加密程序**
原理:将INT在内存中的位置给打乱,防止内存搜索软件对程序进行搜索。程序只是简单介绍了实现该方法的技巧。
```
class hint
{
char* mem;//4个字节的内存空间
public:
hint(int val = 0);
~hint();
operator int();//重载int
void operator=(int val);//重载=
};
hint::hint(int val)
{
mem = new char;//动态分配内存
mem = new char;
mem = new char;
mem = new char;
cout << "mem" <<(void*) (mem) << " mem" << (void*)mem << " mem" <<(void*)mem << " mem" << (void*)mem << endl;
*this = val;
}
hint::~hint()
{
delete mem;//删除内存
delete mem;
delete mem;
delete mem;
}
hint::operator int()
{
int val;
char* read = (char*)&val;
read = mem;
read = mem;
read = mem^ 0x21;//防止只剩个位数时,对内存的搜索
read = mem;
return val;
}
void hint::operator=(int val)
{
char* read = (char*)&val;//读取int值的地址
mem = read; //打乱放入内存中
mem = read;
mem = read^ 0x21;
mem = read;
}
hint money=2000;//其它程序不变
```
**4 后记**
此笔记是根据腾讯课堂上某某云培训机构的C++课堂的一节内容进行整理,为避免广告嫌疑,就不提该机构的名称了。程序看上去简单,但包含的知识不少。指针数组,动态内存分配,类的重载等,值得好好研究掌握,特此分享共同进步。 这是哪位师兄? 如果是我的话,我选择把变量数据跟服务器同步,那数据具体应该是多少,服务器说了算。 yuechu 发表于 2022-3-25 15:21
这是哪位师兄?
果然有同门在群里{:1_893:} 超级大碰碰 发表于 2022-3-25 15:26
如果是我的话,我选择把变量数据跟服务器同步,那数据具体应该是多少,服务器说了算。
课程里有介绍。搜内存只是个突破点。如果能搜到内存,就能找到相关的程序。通过修改程序,就可以改变程序的运行规则,这样跟服务器同步就没有任何关系了。当然这里主要是介绍一种编程思路。 endriver 发表于 2022-3-25 15:39
课程里有介绍。搜内存只是个突破点。如果能搜到内存,就能找到相关的程序。通过修改程序,就可以改变程序 ...
哪个机构的课啊,有视频分享吗 问题是很多游戏开发者就算这样.还是被 风灵月影 大师给破了{:1_918:} archmagee82 发表于 2022-3-25 21:23
问题是很多游戏开发者就算这样.还是被 风灵月影 大师给破了
这就是矛盾之争。会永远斗争下去,看谁的手段高了。 sam喵喵 发表于 2022-3-25 18:17
哪个机构的课啊,有视频分享吗
这个是收费课程,没报名是看不了的。 超级大碰碰 发表于 2022-3-25 15:26
如果是我的话,我选择把变量数据跟服务器同步,那数据具体应该是多少,服务器说了算。
两者都用上不是更好?
页:
[1]
2