endriver 发表于 2022-3-25 13:06

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

这是哪位师兄?

超级大碰碰 发表于 2022-3-25 15:26

如果是我的话,我选择把变量数据跟服务器同步,那数据具体应该是多少,服务器说了算。

endriver 发表于 2022-3-25 15:36

yuechu 发表于 2022-3-25 15:21
这是哪位师兄?

果然有同门在群里{:1_893:}

endriver 发表于 2022-3-25 15:39

超级大碰碰 发表于 2022-3-25 15:26
如果是我的话,我选择把变量数据跟服务器同步,那数据具体应该是多少,服务器说了算。

课程里有介绍。搜内存只是个突破点。如果能搜到内存,就能找到相关的程序。通过修改程序,就可以改变程序的运行规则,这样跟服务器同步就没有任何关系了。当然这里主要是介绍一种编程思路。

sam喵喵 发表于 2022-3-25 18:17

endriver 发表于 2022-3-25 15:39
课程里有介绍。搜内存只是个突破点。如果能搜到内存,就能找到相关的程序。通过修改程序,就可以改变程序 ...

哪个机构的课啊,有视频分享吗

archmagee82 发表于 2022-3-25 21:23

问题是很多游戏开发者就算这样.还是被 风灵月影 大师给破了{:1_918:}

endriver 发表于 2022-3-26 19:38

archmagee82 发表于 2022-3-25 21:23
问题是很多游戏开发者就算这样.还是被 风灵月影 大师给破了

这就是矛盾之争。会永远斗争下去,看谁的手段高了。

endriver 发表于 2022-3-26 19:39

sam喵喵 发表于 2022-3-25 18:17
哪个机构的课啊,有视频分享吗

这个是收费课程,没报名是看不了的。

xinyu 发表于 2022-3-27 07:13

超级大碰碰 发表于 2022-3-25 15:26
如果是我的话,我选择把变量数据跟服务器同步,那数据具体应该是多少,服务器说了算。

两者都用上不是更好?
页: [1] 2
查看完整版本: C++编程隐藏变量,避免CE对内存搜索