溫馨提示×

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

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

或與運(yùn)算和安全整數(shù)(數(shù)的影子)

發(fā)布時(shí)間:2020-08-14 15:22:58 來(lái)源:ITPUB博客 閱讀:130 作者:WolfHawk_ITPUB 欄目:軟件技術(shù)

? 八門神器是安卓、iOS、塞班平臺(tái)上通用的游戲修改工具,可以修改內(nèi)存中的數(shù)值和參數(shù)。在游戲運(yùn)行時(shí),內(nèi)存和處理器都會(huì)對(duì)于游戲進(jìn)行非常復(fù)雜的數(shù)據(jù)交換和變更。因?yàn)橛螒蛴泻芏嗟臄?shù)據(jù),例如金錢、HP值、等級(jí)、攻擊力、防御力、戰(zhàn)斗力等數(shù)據(jù),尤其是PVE戰(zhàn)斗在客戶端進(jìn)行。服務(wù)器校驗(yàn)缺失等。而這些數(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ì)變化,八門神器的原理就如金山游俠、整人專家、游戲修改大師等類型的修改軟件,只不過(guò)八門神器只可以在智能手機(jī)中使用而已。

? 對(duì)于八門神器在修改游戲時(shí)發(fā)生無(wú)法修改或無(wú)法保存修改后的數(shù)據(jù)等情況,是因?yàn)橛螒虮旧斫?jīng)過(guò)特殊處理。安全整型。主要用來(lái)內(nèi)存存放功能。防止八門神器等外掛篡改。根據(jù)外掛機(jī)制可以在游戲開(kāi)發(fā)中內(nèi)存整形的簡(jiǎn)單加密。也就是真實(shí)值A(chǔ)隱藏。內(nèi)存中值只是A的影子而已。具體原理就是或與運(yùn)算的巧妙應(yīng)用。

或運(yùn)算原理

1.常數(shù)A或變量=常數(shù)B。變量或常數(shù)A=常數(shù)B。
常數(shù)A:383391203
常數(shù)B:34603266
分析:分布轉(zhuǎn)換成二進(jìn)制得出結(jié)論公式
10110110110100001010111100011
&
0X01X00X10X0XXXX0X0X1000XXX10
等于:
00010000100000000000100000010
結(jié)論:變量有規(guī)律,其中X可以是0或者1
則12個(gè)X可以取值個(gè)數(shù)為:1<<13=8192個(gè)數(shù)
例如:
?383391203&34867974;
00010000101000000101100000110
?383391203&34867978;
00010000101000000101100001010
?383391203&34867982;
00010000101000000101100001110

與運(yùn)算原理

2.常數(shù)A與變量=常數(shù)B。變量與常數(shù)A=常數(shù)B
常數(shù)A:383391203
常數(shù)B:1459600891
分析:分布轉(zhuǎn)換成二進(jìn)制得出結(jié)論公式
0010110110110100001010111100011
|
10X0XX0XX1XX1X1101X1X0XXXX110XX
等于:
1010110111111111011110111111011
例如:
?383391203|1076739384;
1000000001011011011110100111000
?383391203|1076210840;
1000000001001011010110010011000
?383391203|1076209688;
1000000001001011010100000011000
?383391203|1076210168;
1000000001001011010100111111000

得出結(jié)論。發(fā)散思維。推廣應(yīng)用。

最后結(jié)論是把32位整形拆分:每位分解成兩個(gè)整數(shù)表示:算法即可得出參照SaftInt類
XXX0X01X    00X10X0X    XXX0X0X1    000XXX10
010X0XX0    XX1XX1X1    101X1X0X    XXX110XX
拓展:把整數(shù)對(duì)應(yīng)位分別去除來(lái)
應(yīng)用推廣:
    如何一個(gè)整數(shù)A可以和另外一個(gè)變量互轉(zhuǎn)。
    有了這個(gè)依據(jù)則可以用于游戲開(kāi)發(fā)中內(nèi)存整形的簡(jiǎn)單加密。
    也就是真實(shí)值A(chǔ)隱藏。內(nèi)存中值只是A的影子而已。

Gk8SafeInt.cs

using System.Collections;
/**
 * 安全整型:用主要用來(lái)內(nèi)存存放功能。防止八門神器外掛等
 * @Thinker
 **/
public class Gk8SafeInt
{
    private int m_nInt1;            //內(nèi)放整型1
    private int m_nInt2;            //內(nèi)放整型2
    //private int m_nMaskRnd;            //隨機(jī)掩碼
    //XXX0X01X    00X10X0X    XXX0X0X1    000XXX10
    //010X0XX0    XX1XX1X1    101X1X0X    XXX110XX
    //取對(duì)應(yīng)位
    static int g_nMaskBit1=383391203;
    static int g_nMaskBit2=-383391204;
    //合并
    static int g_nUionBit1=1076209688;
    static int g_nUionBit2=34603266;
    public override string ToString ()
    {
        return GetInt().ToString ();
    }
    private void MakeInt(int nValue)
    {
        //m_nMaskRnd=383391203;
        m_nInt1=g_nMaskBit1&nValue|g_nUionBit1;
        m_nInt2=g_nMaskBit2&nValue|g_nUionBit2;
    }
    private int GetInt()
    {
        return (m_nInt1&g_nMaskBit1)+(m_nInt2&g_nMaskBit2);
    }
    public Gk8SafeInt()
    {
        MakeInt(0);
    }
    public Gk8SafeInt(int nValue)
    {
        MakeInt(nValue);
    }
    public static explicit operator Gk8SafeInt(int nValue)
    {
        return new Gk8SafeInt(nValue);
    }
    public static implicit operator int(Gk8SafeInt iSafeInt)
    {
        return iSafeInt.GetInt();
    }
    //重載加減乘除
    public static Gk8SafeInt operator + (Gk8SafeInt iSafeInt,int nValue)
    {
        int n=iSafeInt.GetInt();
        n+=nValue;
        return  new Gk8SafeInt(n);
    }
    public static Gk8SafeInt operator - (Gk8SafeInt iSafeInt,int nValue)
    {
        int n=iSafeInt.GetInt();
        n-=nValue;
        return  new Gk8SafeInt(n);
    }
    public static Gk8SafeInt operator * (Gk8SafeInt iSafeInt,int nValue)
    {
        int n=iSafeInt.GetInt();
        n*=nValue;
        return  new Gk8SafeInt(n);
    }
    public static Gk8SafeInt operator / (Gk8SafeInt iSafeInt,int nValue)
    {
        int n=iSafeInt.GetInt();
        n/=nValue;
        return  new Gk8SafeInt(n);
    }
    //重載比較操作
    public static bool operator < (Gk8SafeInt iSafeInt,int nValue)
    {
        if(iSafeInt.GetInt()< nValue) return true;
        return false;
    }
    public static bool operator <= (Gk8SafeInt iSafeInt,int nValue)
    {
        if(iSafeInt.GetInt()<= nValue) return true;
        return false;
    }
    public static bool operator == (Gk8SafeInt iSafeInt,int nValue)
    {
        if(iSafeInt.GetInt()==nValue) return true;
        return false;
    }
    public static bool operator != (Gk8SafeInt iSafeInt,int nValue)
    {
        if(iSafeInt.GetInt()!=nValue) return true;
        return false;
    }
    public static bool operator >= (Gk8SafeInt iSafeInt,int nValue)
    {
        if(iSafeInt.GetInt()>=nValue) return true;
        return false;
    }
    public static bool operator > (Gk8SafeInt iSafeInt,int nValue)
    {
        if(iSafeInt.GetInt()>nValue) return true;
        return false;
    }
}
向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