吾愛破解 - LCG - LSG |安卓破解|病毒分析|破解軟件|www.dypczhxn.cn

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

搜索
查看: 14226|回復: 171
上一主題 下一主題

[游戲安全] [原創]網絡游戲安全之實戰某游戲廠商FPS游戲CRC檢測的對抗與防護

    [復制鏈接]
跳轉到指定樓層
樓主
機智聰明的小迪 發表于 2019-8-3 12:46 回帖獎勵
本帖最后由 機智聰明的小迪 于 2019-8-8 08:45 編輯

網絡游戲安全之實戰某游戲廠商FPS游戲CRC檢測的對抗與防護


0x00:簡介

——————————————————————————————————————————————————————————————————


不得不說,隨著時代的發展,游戲產業在近幾年的互聯網潮流中越來越扮演者重要的地位,與之而來的不僅有網絡游戲公司的春天,還有游戲灰色產業的暗流涌動。在游戲產業的發展中,誕生了一大批所謂的“外x掛”開發人員,他們不斷的利用游戲的漏洞,在違法牟利的同時,也促進了游戲安全行業的進步。









同時,在游戲安全的對抗中,誕生了以下幾種技術以防止游戲作弊的發生:


⒈數據檢測:對基礎的游戲數據進行校驗,例如坐標是否違規越界地圖(坐標瞬移功能),人物短時間位移距離是否過大(人物加速功能)等等


⒉CRC檢測:基于游戲程序代碼的檢驗,例如將人物移動中判斷障礙物的je條件跳轉修改為jmp強制跳轉(人物穿墻功能)等等


⒊封包檢測:將游戲數據封包進行校驗,防止利用封包漏洞實現違規操作,例如之前的穿X火線強登(可以登錄任意賬號)等等


⒋機器檢測:現在鵝廠 安全組好像換人了 ,游戲機器碼封的都挺狠,一封就十年,不過道高一尺,魔高一丈,目前依然不夠完善,很多朋友還是可以Pass


⒌Call檢測:非法調用Call導致校驗值非法,例如攻擊Call的嚴格校驗(角色扮演游戲自動打怪腳本都是調用Call的)等等


⒍堆棧檢測:該檢測歸于調用Call過程中產生的問題


⒎文件檢測:對于游戲本地文件的檢測,例如之前穿X火線幾年前風靡一時的REZ文件(快刀秒殺,穿墻,遁地,飛天)等等


⒏模塊檢測:很多外x掛采用“注入”的形式,所以模塊檢測在游戲安全對抗中也扮演著極其重要的作用


⒐特征檢測:這個主要檢測典型的使用“易語言”開發的程序,或者部分外x掛市場比較大的毒瘤程序,或者菜單繪制(imgui繪制)等等


⒑調試檢測:針對調試器和調試行為的檢測,對OllyDbg,CheatEngine等調試器特征和調試行為的檢測等。


⒒游戲保護:主要是利用R3各種反調試技術以及驅動層的HOOK等技術實現的游戲保護,例如鵝廠的TP等等


可能還有一些我暫時還沒想到的,哥哥們可以在下方補充~







0x01:步入今天的正題—CRC檢測


——————————————————————————————————————————————————————————————————


首先,我們今天要講的是游戲的CRC檢測,所以為了能讓下面的內容讓大家理解,我們先來準備一下CRC檢測的基礎知識吧:


⒈百度百科給我們CRC的解釋


[C++] 純文本查看 復制代碼
CRC即循環冗余校驗碼(Cyclic Redundancy Check):是數據通信領域中最常用的一種查錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。循環冗余檢查(CRC)是一種數據傳輸檢錯功能,對數據進行多項式計算,并將得到的結果附在幀的后面,接收設備也執行類似的算法,以保證數據傳輸的正確性和完整性。

來源:[url=https://baike.baidu.com/item/crc%E6%A0%A1%E9%AA%8C]https://baike.baidu.com/item/crc%E6%A0%A1%E9%AA%8C[/url]



⒉維基百科給我們CRC的解釋


[C++] 純文本查看 復制代碼
循環冗余校驗(英語:Cyclic redundancy check,通稱“CRC”)是一種根據網絡數據包或計算機文件等數據產生簡短固定位數校驗碼的一種散列函數,主要用來檢測或校驗數據傳輸或者保存后可能出現的錯誤。生成的數字在傳輸或者存儲之前計算出來并且附加到數據后面,然后接收方進行檢驗確定數據是否發生變化。一般來說,循環冗余校驗的值都是32位的整數。由于本函數易于用二進制的計算機硬件使用、容易進行數學分析并且尤其善于檢測傳輸通道干擾引起的錯誤,因此獲得廣泛應用。此方法是由W. Wesley Peterson于1961年發表[1]。

來源:[url=https://zh.wikipedia.org/wiki/%E5%BE%AA%E7%92%B0%E5%86%97%E9%A4%98%E6%A0%A1%E9%A9%97]https://zh.wikipedia.org/wiki/%E ... 8%E6%A0%A1%E9%A9%97[/url]



我們總結一下上面的百科解釋:CRC是一種校驗算法并且該算法被廣泛應用于文件,數據等的校驗。


不過好像對于逆向來說還是有些模糊,那么現在就讓我們打開看雪論壇發布的《加密與解密(第四版)》第279頁,看一下其中的解釋:







通過翻閱書籍,我們發現實際上CRC算法有很多種,而我們運用在軟件加密中的CRC算法為CRC32算法。


哇,這本書,兄弟萌,你們看,這本書,簡直就是逆向界的圣經啊,別猶豫了!買他!書本有價!知識無價!


哈哈,開個玩笑,在這里對所有參與《加密與解密》書籍工作的朋友致敬!








0x02:手寫一個CRC檢測


——————————————————————————————————————————————————————————————————




參考《加密與解密》書籍,我們便寫如下代碼,實現我們的CRC檢測:






首先,為了方便我們進行學習,我們將CRC算法運用于自己身上,檢驗自身代碼是否被修改,整體性代碼如下:


[C++] 純文本查看 復制代碼
#include <Windows.h>
#include <stdio.h>
 
 
int crc = NULL;
int have_crc_table = NULL;
unsigned int crc32_table[256];
 
//生成具有256個元素的CRC32表
void Crc_Make_Table()
{
    have_crc_table = 1;
 
    for (int i = 0; i < 256; i++)
    {
        crc = i;
        for (int j = 0; j < 8; j++)
        {
            if (crc & 1)
                crc = (crc >> 1) ^ 0xEDB88320; //CRC32 多項式的值,也可以是0x04C11DB7
            else
                crc >>= 1;
        }
        crc32_table[i] = crc; //生成并存儲CRC32數據表
    }
}
 
//根據CRC32數據表計算內存或文件CRC校驗碼
unsigned int Calc_Crc32(unsigned int crc, char *Data, int len)
{
    crc = 0xFFFFFFFF; //將CRC初始化為-1
 
    //判斷CRC32表是否生成
    if (!have_crc_table)
        Crc_Make_Table();
 
    for (int i = 0; i < len; i++)
    {
        crc = (crc >> 8) ^ crc32_table[(crc ^ Data[i]) & 0xff];
    }
    return ~crc;
}
 
int main()
{
    SetConsoleTitleA("Crc檢測過掉學習工具 Ver1.0    提供方:小迪Xiaodi");
 
    printf("\n\n");
 
    printf("使用CE工具->添加地址0x402000->查找訪問并嘗試過掉檢測!\n\n");
 
    printf("如果修改主程序模塊,將會提示 “CRC代碼校驗檢測到您修改了代碼!”:\n\n\n\n\n");
 
    //初始內存校驗值
    unsigned int uMainMoudleSumA = Calc_Crc32(0, (char*)0x400000, 0x1F000);//400000- 41D000
 
 
    //while循環開啟CRC檢測
    while (1)
    {
        //CRC循環檢測內存實時校驗值
        unsigned int TmpCrcSum = Calc_Crc32(0, (char*)0x400000, 0x1F000);
 
        if (TmpCrcSum != uMainMoudleSumA)
        {
            //封號處理-掉線處理
            MessageBoxA(NULL, "CRC代碼校驗檢測到您修改了代碼!", "Caption", MB_OK);
        }
 
                //為了方便,我在這里使用的Sleep函數控制檢測的周期
        Sleep(2000);
    }
 
    getchar();
    return 0;
}



最后,我們在生成文件的時候,要注意以下幾個問題:


⒈靜態編譯和去除優化等的設置














⒉CRC校驗函數傳入參數的設置:


代碼處:


[C++] 純文本查看 復制代碼
//計算內存校驗值

Calc_Crc32(0, (char*)0x400000, 0x1F000);



在這里尤其要注意傳入的第三個參數,他代表了一個校驗的范圍,那么這個位置,我們如何確定呢?


①:先編譯生成文件,我生成的是Release版本:





②:用PE相關的工具確定程序主模塊鏡像的大小,在這里我使用的是PEID v0.95工具:











復制粘貼一下鏡像大小,傳入一下就可以了,這個參數不可以亂填,否則會造成數據溢出,導致程序崩潰。


0x03:對自己的CRC程序的防護測試


——————————————————————————————————————————————————————————————————


⒈運行自己的程序并用CheatEngine添加地址:





⒉修改代碼測試:


由于0x00402000處于代碼段的位置,所以我們修改數值就相當于修改了代碼,也就相應的觸發了代碼CRC的校驗







⒊我們將末尾的數字“2”改為“3” ,直接觸發了CRC檢測:





0x04:對自己的CRC程序的分析


——————————————————————————————————————————————————————————————————


①首先,在攻擊前,我們要知道代碼的CRC檢測是針對代碼段的


②代碼段是用來執行的,正常情況下不會有其他數據訪問代碼段,被訪問的大多是數據段,代碼段被訪問,很可疑就是CRC檢測


③此處說的“訪問”的概念,大家可以通過CheatEngine工具中的“找出是什么訪問了這個地址”來理解


開干!







⒈針對0x402000這個地址,在CheatEngine工具中鼠標右鍵,查找訪問,操作如下:






2.檢測出現了!







我們記錄一下該處的訪問代碼:

[C++] 純文本查看 復制代碼
0040103F - movsx ecx,byte ptr [eax]



因為Ollydbg的調試體驗要更好一些,所以我們記錄地址:0x40103F,并轉到Ollydbg去分析:





Ollydbg舒服就舒服在還能把你的代碼分析出來,太強了!





⒊下斷走一遍流程


剛開始的時候,注意觀察eax:





單步往下執行,下面會有個強制性的向上跳轉:





繼續執行走到初始位置:





總結:發現eax由0x400000變成了0x400001,也就是說,它在循環的遞增檢測所有范圍內的內存代碼數據


⒋返回上一層觀查一下函數


通常,大家可能會CTRL+F9返回上一層,或者按如下圖中返回:





這樣做后就發現無論如何都無法返回,那應該怎樣做呢?


很簡單,我們可以從堆棧中返回,堆棧窗口有個神奇的功能就是返回數據:





對著“返回到”敲下回車鍵,抽個煙的時間:






奇跡竟然發生了:





瞧瞧我們看見了什么?

①我們自己寫的CRC檢驗函數
②檢驗函數上面就是我們的參數,起始檢測地址和檢測范圍
③我們自己寫的信息框函數和Sleep函數

這個位置,相當于代碼中的:

[C++] 純文本查看 復制代碼
//初始內存校驗值

unsigned int uMainMoudleSumA = Calc_Crc32(0, (char*)0x400000, 0x1F000);//400000- 41D000

 

 

//while循環開啟CRC檢測

while (1)

{

    //CRC循環檢測內存實時校驗值

    unsigned int TmpCrcSum = Calc_Crc32(0, (char*)0x400000, 0x1F000);

 

    if (TmpCrcSum != uMainMoudleSumA)

    {

        //封號處理-掉線處理

        MessageBoxA(NULL, "CRC代碼校驗檢測到您修改了代碼!", "Caption", MB_OK);

    }

    Sleep(2000);

}



對比圖:







怎么樣,是不是很刺激?





0x05:對自己的CRC程序的攻擊測試


——————————————————————————————————————————————————————————————————


在這里呢,我們簡單的講幾種過掉的姿勢:


⒈跳轉jmp直接Pass





分析:這個位置直接Pass掉下方的CRC校驗函數,直接跳轉到了getchar函數,過于簡單粗暴,僅適用于該程序,不適用于網絡游戲哦~


⒉Nop大法











Nop大法尤其要注意Nop一定要Nop徹底!另外一定要堆棧平衡!否則被檢測或者程序崩潰!

⒊分析代碼更改判斷條件


下斷看eax,eax根據代碼結合內層函數得知,是我們的CRC校驗值:


內層函數:










單步執行,根據我們觀察eax,發現該處是初始校驗值和實時校驗值的比較處:





那么我們干脆一不做二不休,直接cmp ecx,ecx,讓他跳轉永遠相等,就永遠不檢測了:




當然還有其他的一些方法,在這里大家可以開動想象力,自行實踐哦~

總結:

①要充分觀察寄存器窗口數據的變化
②注意疑似校驗值的數據以及校驗值的判斷和計算
③Nop要徹底,并且保證堆棧平衡
④大家自由發揮






0x06:對某廠商的網絡FPS游戲實戰CRC對抗測試


——————————————————————————————————————————————————————————————————



⒈看一下游戲的樣子:









該游戲可實現除草功能,地圖除草方法:


CheatEngine工具搜索字節數組:55 8B EC 8B 45 08 83 EC 08 8B 48 10 8B 01,找到的地址減去0x22,對該地址nop即可實現除草











⒉分析一下除草地址的檢測


由于我們是搜索特征得到的,該游戲的除草功能也是通過修改代碼段nop實現的,所以觸發了代碼的CRC校驗檢測,符合我們今天講的知識


查找訪問,發現四條訪問地址,這個即為我們的CRC檢測的訪問:





查看相關的匯編代碼:





發現:

①疑似加密密匙的東西
②所有的四條訪問均來源于同一個代碼段,觀看代碼得知屬于同一個Call,也就是檢測Call
③由于該檢測Call被廠商修改過,所以屬于比較特殊的變形CRC

⒊下斷檢測的代碼,觀察寄存器





只能推斷EAX有可能是校驗的次數,也就校驗的大小,其他的寄存器并無法得知是否是校驗值


⒋去函數的頭部看一看

頭部下斷:eax疑似校驗值,edx疑似校驗大小,也就是循環的次數




繼續運行,發現eax和edx同時變化:





edx在這里變化了兩次,第一次為我們的計次,第二次為edi的數據,我們嘗試修改頭部的數據進行攻擊測試:

[由于涉及游戲安全和平衡,在這里,我不將寫入的數據進行公開,大家有興趣的可以自行研究實踐]

下hook處理:

①分配內存寫數據

因為是jmp 5字節hook,所以要注意寫法






②跳轉至hook位置





OK,接下來就是漫長的等待~

只要CheatEngine工具的訪問不出現新的訪問,那么檢測就過掉了

北京時間比較準確:





CRC一直沒有訪問,嘗試開啟除草功能:





開啟后效果:





幾分鐘過去了,CRC依然沒有訪問,玩家死亡依然沒有訪問:





繼續開一局游戲:









蹲個坑的時間~







然后就被人打死了~




至此,該功能檢測被過掉,檢測穩定了.





0x07:總結

⒈外x掛和反外x掛的斗爭依然在繼續,各大游戲廠商必須加強游戲的檢測防護,避免外x掛產業泛濫!
2.多層嵌套的檢測是必須的,在嵌套的同時,還應該注意代碼混淆的程度也要加大!
3.務必加強對CheatEngine等工具的檢測,一旦發現,就封號處理,提高逆向難度!


0x08:聲明

1.游戲逆向僅限于技術交流,切勿用于違法犯罪,切勿開發違法犯罪的相關外x掛、輔x助等工具!
2.本文章由個人原創作品,如需轉載,請務必帶上出處!
3.如果本人中有疏漏和錯誤,請及時提醒我更正,萬分感激!

0x09:參考文獻

《加密與解密第四版》——段鋼
《百度百科》—— https://baike.baidu.com/item/crc%E6%A0%A1%E9%AA%8C
《維基百科》—— https://zh.wikipedia.org/wiki/%E ... 8%E6%A0%A1%E9%A9%97


0x10:最后要說的話


1.逆向一時爽,一直逆向一直爽,爽的同時千萬千萬不要誤入歧途,違反法律,不然警察叔叔上門送溫暖了~




2.感謝吾愛破解論壇和看雪論壇這兩個平臺,大佬云集,受益匪淺





3.八月份,新的月份,祝大家順順利利,萬事如意,七夕快到了,做人不缺愛,做x不缺人,團團圓圓,心想事成







后來的測試圖,檢測不跑了,沒了,死的透透的,睡覺睡覺去了
























Crc檢測源碼打包.zip

744.21 KB, 下載次數: 50, 下載積分: 吾愛幣 -1 CB

CRC源碼打包

點評

敲門送溫暖那圖太特么嚇人了...嚇得我被子外面的腳都縮回來了...  發表于 2019-8-4 05:47

免費評分

參與人數 131吾愛幣 +130 熱心值 +120 收起 理由
隨風潛入夜者 + 1 熱心回復!
mscsky + 1 + 1 我很贊同!
gds雪狼 + 1 + 1 鼓勵轉貼優秀軟件安全工具和文檔!
macsun + 1 用心討論,共獲提升!
skuld + 1 + 1 用心討論,共獲提升!
404_undefined + 1 + 1 我很贊同!
在無世界 + 1 + 1 我很贊同!
cuishihui + 1 + 1 熱心回復!
Waki + 1 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
不諳世事的騷年 + 1 + 1 [email protected]
敘隱微覺 + 1 + 1 鼓勵轉貼優秀軟件安全工具和文檔!
~vision~ + 1 [email protected]
yinjipingaijs + 1 + 1 鼓勵轉貼優秀軟件安全工具和文檔!
飛機不會飛 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
wws天池 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
LASTandGAME + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
gaosld + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
itmaple + 1 + 1 [email protected]
無名i + 1 熱心回復!
日落繁星 + 1 + 1 熱心回復!
Zephyrus + 1 + 1 我很贊同!
Towneast + 1 + 1 [email protected]
soloeco + 1 + 1 [email protected]
kale07256 + 1 講的很清晰
給我兩根蔥 + 1 我很贊同!
內瑟斯 + 1 + 1 我很贊同!
AGby-DT + 1 + 1 我很贊同!
強迫癥╯ + 1 + 1 逆向一直爽啊
網癮大哥 + 1 + 1 辛苦了 逆向一直爽
楓溪逸 + 1 + 1 [email protected]
寶寶噠277 + 1 + 1 寫得好,很有用
Zaniel_chen + 1 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
WD丶活著 + 1 + 1 用心討論,共獲提升!
Crisu + 1 + 1 我很贊同!
大將軍 + 2 + 1 用心討論,共獲提升!
全場最佳趙山河 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
請不要和我互動 + 1 + 1 表情到位
哈哈呵 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
Mino + 1 + 1 我很贊同!
sedo + 1 + 1 我很贊同!
xp9477 + 2 + 1 nb
ol416 + 1 [email protected]
一夜夢驚人 + 1 + 1 [email protected]
1188 + 1 + 1 NB![破音],又淺到深,一步到胃,
我的房間有點暗 + 1 + 1 像這樣的大佬不多了,趕緊保護好
lstar + 1 + 1 熱心回復!
jnez112358 + 1 + 1 [email protected]
吾愛Code + 1 熱心回復!
lvbuqing + 1 + 1 熱心回復!
tudouer7800 + 1 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
吾愛牛逼 + 1 + 1 [email protected]
明仁 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
niuzepeng + 1 + 1 [email protected]
hellozhanghe + 1 + 1 熱心回復!
a2693848417 + 1 + 1 學習了
a739504 + 1 + 1 我很贊同!
天空藍 + 1 + 1 用心討論,共獲提升!
tuoluo348 + 1 + 1 用心討論,共獲提升!
ar_omg + 1 + 1 我很贊同!
daniel7785 + 1 [email protected]
愛生活愛拉芳 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
ikea + 1 + 1 用心討論,共獲提升!
CWJYBB + 1 + 1 我很贊同!
Blank空白 + 1 + 1 膜拜大佬
N0LL + 1 + 1 [email protected]
這是一場戰爭 + 1 + 1 感謝樓主分享,珍愛生命,遠離熬夜
bp946 + 1 + 1 用心討論,共獲提升!
demo886 + 1 感謝大佬分享
tzblue + 2 + 1 [email protected]
siuhoapdou + 1 + 1 [email protected]
Minesa + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
korzhao + 1 + 1 0x開頭是16進制的意思,0x10應該寫成0xa
k2002008 + 1 + 1 [email protected]
四公子丶 + 1 + 1 原來是GK老師
小添 + 1 + 1 慢慢看完的都來報道
zy92691 + 1 我很贊同!
cs0208 + 1 + 1 剛剛接觸到CRC,還看不太懂樓主的帖子,不過最后那張圖,天秀。
yppsniper + 1 + 1 [email protected]
yirank8 + 1 + 1 我很贊同!
萌噠噠小樂天 + 1 + 1 開門,社區送溫暖
LOLQAQ + 1 + 1 我很贊同!
lickety + 1 + 1 [email protected]
3xec3r + 1 + 1 熱心回復!
xdans0n + 1 [email protected]
katkat + 1 + 1 [email protected]
shisuan + 1 + 1 我很贊同!
韜. + 1 + 1 用心討論,共獲提升!
gky86886 + 1 + 1 用心討論,共獲提升!
qwe30245868913 + 1 我很贊同!
xh15159080185 + 1 + 1 用心討論,共獲提升!
Oohuo + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
DOUDOUZXL + 1 + 1 [email protected]
zy1234 + 1 + 1 鼓勵轉貼優秀軟件安全工具和文檔!
Calmer + 1 + 1 用心討論,共獲提升!
RyanEdward + 1 我很贊同!
Sharonring + 1 + 1 后面那句祝福太亮了
vizardtdst + 1 + 1 用心討論,共獲提升!
smile1110 + 3 + 1 滑稽樹上滑稽果
qaz003 + 1 + 1 看到了JMP5字節...滿滿的回憶呀...
九猛龍剎秦 + 1 52注冊到現在第一個讓我用心評論的,樓主很仔細,小白也看懂了,非常感謝,.

查看全部評分

本帖被以下淘專輯推薦:

發帖前要善用論壇搜索功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

推薦
qaz003 發表于 2019-8-4 05:43
大半夜的,看得我熱血澎湃,感覺我這抖如帕金森般的鼠標手又能吃雞了...
直到后面看到你那張圖...
沒錯, 就是這張


嚇得我一激靈,把CE OD 全關了...繼續煲美劇去....
(太特么嚇人了, 發貼不帶這么玩的呀,大哥....)
推薦
笑給風聽 發表于 2019-8-3 13:16
推薦
超正義的小煌 發表于 2019-8-3 13:54
我是真小白,但是我覺得我看得很清晰,謝謝樓主分享
5#
久樂 發表于 2019-8-3 13:17
謝謝分享優質文章!!
6#
記得の忘記 發表于 2019-8-3 13:25
有點意思,謝謝分享
7#
bianqi 發表于 2019-8-3 13:57
太優秀了!
8#
w159874 發表于 2019-8-3 14:05
外掛孤兒太多,樓主是一股清流。
9#
mack 發表于 2019-8-3 14:13
期待其他教程
10#
lludcmmcdull 發表于 2019-8-3 14:14
這也太厲害了。。。這方面感覺很難
11#
tangfangxi 發表于 2019-8-3 14:47
很厲害的教程,學習了
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:禁止回復與主題無關內容,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|聯系我們|吾愛破解 - LCG - LSG ( 京ICP備16042023號 | 京公網安備 11010502030087號 )

GMT+8, 2019-10-17 15:05

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表
现在靠网络挣钱的方法