溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

[cocos2dx]防止八門神器修改內(nèi)存數(shù)據(jù)

發(fā)布時(shí)間:2020-04-09 21:06:11 來(lái)源:網(wǎng)絡(luò) 閱讀:454 作者:蓬萊仙羽 欄目:開(kāi)發(fā)技術(shù)

網(wǎng)上的cocos2d-x教程多為知識(shí)點(diǎn)的講解,但我們學(xué)習(xí)cocos2d-x的目的是為了什么?為了做出游戲來(lái)!這篇文章的前提是單機(jī)游戲,網(wǎng)絡(luò)游戲有自己的加密方法,與單機(jī)游戲不盡相同!

游戲辛辛苦苦的做完了,但是使用八門神器可以輕松的修改你的重要數(shù)據(jù)(金幣,道具數(shù)量),哈哈哈,那么恭喜您,您掙不到一分錢!說(shuō)的有點(diǎn)危言聳聽(tīng)了,畢竟知道八門神器這個(gè)工具的不是非常多,而且使用條件比較苛刻,但是我們不能掉以輕心,他完全可以修改完成了,將存檔放在網(wǎng)上,這樣我們就十分被動(dòng)了!

一.什么是八門神器

不明白八門神器為何物的請(qǐng)自行Google!這里我引用百度百科中的一段話:

八門神器是安卓、iOS、塞班平臺(tái)上通用的游戲修改工具,可以修改內(nèi)存中的數(shù)值和參數(shù),達(dá)到修改游戲HP、MP、金錢、等級(jí)等的作用。八門神器類似 于PC平臺(tái)的金山游俠等游戲修改器,是手機(jī)游戲中的金手指。但八門神器在安卓平臺(tái)下需要Root權(quán)限才能正常工作,在iOS平臺(tái)下需要iPhone越獄才 能正常工作,并且支持中、英雙語(yǔ)言,并且自帶幫助說(shuō)明。

建議大家還是親自去使用下這個(gè)工具,效果請(qǐng)看下圖:

[cocos2dx]防止八門神器修改內(nèi)存數(shù)據(jù)[cocos2dx]防止八門神器修改內(nèi)存數(shù)據(jù)

二.原理

知己知彼百戰(zhàn)百勝,我們要先了解八門神器的原理:

在游戲運(yùn)行時(shí),內(nèi)存和處理器都會(huì)對(duì)于游戲進(jìn)行非常復(fù)雜的數(shù)據(jù)交換和變更,這是因?yàn)橛螒蛴泻芏嗟臄?shù)據(jù),例如金錢、HP值、等級(jí)、***力、防御力等數(shù) 據(jù),而這些數(shù)據(jù),就在內(nèi)存和處理器的各個(gè)地址當(dāng)中,玩家只需要在八門神器中搜索相關(guān)的數(shù)據(jù)值,八門神器就會(huì)將搜索出記錄此數(shù)據(jù)的各個(gè)地址顯示,玩家進(jìn)行多 次的數(shù)據(jù)變更后再次搜索,到最后就會(huì)確定此地址到底是哪一個(gè),然后將此地址的數(shù)值進(jìn)行修改,回到游戲中,相關(guān)的數(shù)據(jù)也會(huì)變化!總結(jié)下,就是八門神器會(huì)搜索出對(duì)應(yīng)數(shù)值的內(nèi)存地址,然后改變內(nèi)存地址對(duì)應(yīng)的值!

三.應(yīng)對(duì)方案

這樣我們貌似可以從兩個(gè)方面去入手解決這個(gè)問(wèn)題:

  1. 讓它搜不著!
  2. 讓它改變不了!但是仔細(xì)想想,一旦它拿到了你的變量的地址,還愁改變不了嗎?所以我們只能從讓它搜不著這個(gè)角度去考慮!

用過(guò)這個(gè)工具的人都明白,一般情況下,一次搜索就能準(zhǔn)確定位內(nèi)存地址的情況非常少見(jiàn)(除非這個(gè)數(shù)字非常大),都是先搜索,獲得大量(幾十萬(wàn))的數(shù)據(jù),然后回到游戲中,改變這個(gè)值,再回到八門神器,會(huì)自動(dòng)篩選出之前搜索到的結(jié)果有哪些改變了...直到只剩下幾個(gè)結(jié)果,這個(gè)時(shí)候我們挨個(gè)去改變值會(huì)變得十分的Easy!

1.改變內(nèi)存地址

想想這個(gè)過(guò)程,好像只有第一次搜索是全局搜索,后面的每次搜索都是在之前搜索的結(jié)果上進(jìn)行篩選!這樣如果我們游戲中每次改變這個(gè)變量的時(shí)都去改變這個(gè)變量的內(nèi)存地址,這樣它就搜索不到了!代碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class DynamicInt
{
public:
    DynamicInt(){m_pValue=NULL;}
 
    ~DynamicInt()
    {
        if(m_pValue)
        {
            deletem_pValue;
        }
    }
 
    int getValue(){return*m_pValue;}
 
    void setValue(int nValue)
    {
        if(m_pValue)
        {
            deletem_pValue;
        }
        m_pValue=newint();
        *m_pValue=nValue;
    }
private:
    int * m_pValue;
};

經(jīng)過(guò)嘗試,這個(gè)方法并不管用,還能被破解,不知我的做法錯(cuò)誤呢還是八門神器的原理不是這樣!請(qǐng)懂行人指出!

2.加密數(shù)據(jù)

換個(gè)思路,我們?yōu)楹尾辉跀?shù)據(jù)上做手腳,對(duì)數(shù)據(jù)進(jìn)行加密(如:表面上顯示的是50,內(nèi)部存的卻是50^0xff),這樣他搜索表面上的數(shù)字當(dāng)然搜索不到!代碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#ifndef _H_DYNAMICVALUE_H_
#define _H_DYNAMICVALUE_H_
 
template<class T>
class CEncryptValue
{
public:
    CEncryptValue()
        : m_Value(0)
    {
    }
    ~CEncryptValue()
    {
    }
 
    T getValue()
    {
        returnm_Value ^ m_EncryptKey;
    }
 
    void setValue(T value)
    {
        m_Value = value;
        m_EncryptKey = rand();
        m_Value ^= m_EncryptKey;
    }
 
    void offset(T value)
    {
        setValue(getValue() + value);
    }
 
public:
    T m_Value;
    int m_EncryptKey;
};
 
typedef CEncryptValue<int> CDynamicValueInt;
typedef CEncryptValue<float> CDynamicValueFloat;
typedef CEncryptValue<bool> CDynamicValueBool;
 
#endif
使用時(shí):
1
2
3
4
5
6
7
8
9
10
CDynamicValueInt m_DynamicMoney;
 
//設(shè)置金錢數(shù)
m_DynamicMoney.setValue(1000);
 
//得到金錢
m_DynamicMoney.getValue()
 
//改變金錢
m_DynamicMoney.offset(-100);
這個(gè)方法經(jīng)過(guò)測(cè)試,十分管用!也是我目前采取的方案!大家可以直接拿來(lái)使用!
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI