吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 8005|回复: 135

[游戏安全] [原创]网络游戏安全之实战某游戏厂商FPS游戏CRC检测的对抗与防护

    [复制链接]
机智聪明的小迪 发表于 2019-8-3 12:46
本帖最后由 机智聪明的小迪 于 2019-8-8 08:45 编辑

网络游戏安全之实战某游戏厂商FPS游戏CRC检测的对抗与防护


0x00:简介

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


不得不说,随着时代的发展,游戏产业在近几年的互联网潮流中越来越扮演者重要的地位,与之而来的不仅有网络游戏公司的春天,还有游戏灰色产业的暗流涌动。在游戏产业的发展中,诞生了一大批所谓的“外x挂”开发人员,他们不断的利用游戏的漏洞,在违法牟利的同时,也促进了游戏安全行业的进步。


1.jpg






同时,在游戏安全的对抗中,诞生了以下几种技术以防止游戏作弊的发生:


⒈数据检测:对基础的游戏数据进行校验,例如坐标是否违规越界地图(坐标瞬移功能),人物短时间位移距离是否过大(人物加速功能)等等


⒉CRC检测:基于游戏程序代码的检验,例如将人物移动中判断障碍物的je条件跳转修改为jmp强制跳转(人物穿墙功能)等等


⒊封包检测:将游戏数据封包进行校验,防止利用封包漏洞实现违规操作,例如之前的穿X火线强登(可以登录任意账号)等等


⒋机器检测:现在鹅厂 安全组好像换人了 ,游戏机器码封的都挺狠,一封就十年,不过道高一尺,魔高一丈,目前依然不够完善,很多朋友还是可以Pass


⒌Call检测:非法调用Call导致校验值非法,例如攻击Call的严格校验(角色扮演游戏自动打怪脚本都是调用Call的)等等


⒍堆栈检测:该检测归于调用Call过程中产生的问题


⒎文件检测:对于游戏本地文件的检测,例如之前穿X火线几年前风靡一时的REZ文件(快刀秒杀,穿墙,遁地,飞天)等等


⒏模块检测:很多外x挂采用“注入”的形式,所以模块检测在游戏安全对抗中也扮演着极其重要的作用


⒐特征检测:这个主要检测典型的使用“易语言”开发的程序,或者部分外x挂市场比较大的毒瘤程序,或者菜单绘制(imgui绘制)等等


⒑调试检测:针对调试器和调试行为的检测,对OllyDbg,CheatEngine等调试器特征和调试行为的检测等。


⒒游戏保护:主要是利用R3各种反调试技术以及驱动层的HOOK等技术实现的游戏保护,例如鹅厂的TP等等


可能还有一些我暂时还没想到的,哥哥们可以在下方补充~


2.jpg




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页,看一下其中的解释:


3.jpg

4.jpg


通过翻阅书籍,我们发现实际上CRC算法有很多种,而我们运用在软件加密中的CRC算法为CRC32算法。


哇,这本书,兄弟萌,你们看,这本书,简直就是逆向界的圣经啊,别犹豫了!买他!书本有价!知识无价!


哈哈,开个玩笑,在这里对所有参与《加密与解密》书籍工作的朋友致敬!


8.jpg





0x02:手写一个CRC检测


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




参考《加密与解密》书籍,我们便写如下代码,实现我们的CRC检测:


9.jpg



首先,为了方便我们进行学习,我们将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;
}



最后,我们在生成文件的时候,要注意以下几个问题:


⒈静态编译和去除优化等的设置




10.jpg
11.jpg
12.jpg
13.jpg






⒉CRC校验函数传入参数的设置:


代码处:


[C++] 纯文本查看 复制代码
//计算内存校验值

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



在这里尤其要注意传入的第三个参数,他代表了一个校验的范围,那么这个位置,我们如何确定呢?


①:先编译生成文件,我生成的是Release版本:


14.jpg


②:用PE相关的工具确定程序主模块镜像的大小,在这里我使用的是PEID v0.95工具:




15.jpg

16.jpg




复制粘贴一下镜像大小,传入一下就可以了,这个参数不可以乱填,否则会造成数据溢出,导致程序崩溃。


0x03:对自己的CRC程序的防护测试


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


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


17.jpg


⒉修改代码测试:


由于0x00402000处于代码段的位置,所以我们修改数值就相当于修改了代码,也就相应的触发了代码CRC的校验


18.jpg




⒊我们将末尾的数字“2”改为“3” ,直接触发了CRC检测:


19.jpg


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


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


①首先,在攻击前,我们要知道代码的CRC检测是针对代码段的


②代码段是用来执行的,正常情况下不会有其他数据访问代码段,被访问的大多是数据段,代码段被访问,很可疑就是CRC检测


③此处说的“访问”的概念,大家可以通过CheatEngine工具中的“找出是什么访问了这个地址”来理解


开干!


21.jpg




⒈针对0x402000这个地址,在CheatEngine工具中鼠标右键,查找访问,操作如下:


22.jpg



2.检测出现了!


23.jpg




我们记录一下该处的访问代码:

[C++] 纯文本查看 复制代码
0040103F - movsx ecx,byte ptr [eax]



因为Ollydbg的调试体验要更好一些,所以我们记录地址:0x40103F,并转到Ollydbg去分析:


24.jpg


Ollydbg舒服就舒服在还能把你的代码分析出来,太强了!


25.jpg


⒊下断走一遍流程


刚开始的时候,注意观察eax:


26.jpg


单步往下执行,下面会有个强制性的向上跳转:


27.jpg


继续执行走到初始位置:


28.jpg


总结:发现eax由0x400000变成了0x400001,也就是说,它在循环的递增检测所有范围内的内存代码数据


⒋返回上一层观查一下函数


通常,大家可能会CTRL+F9返回上一层,或者按如下图中返回:


30.jpg


这样做后就发现无论如何都无法返回,那应该怎样做呢?


很简单,我们可以从堆栈中返回,堆栈窗口有个神奇的功能就是返回数据:


29.jpg


对着“返回到”敲下回车键,抽个烟的时间:


32.jpg



奇迹竟然发生了:


31.jpg


瞧瞧我们看见了什么?

①我们自己写的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);

}



对比图:


33.jpg




怎么样,是不是很刺激?


34.jpg


0x05:对自己的CRC程序的攻击测试


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


在这里呢,我们简单的讲几种过掉的姿势:


⒈跳转jmp直接Pass


35.jpg


分析:这个位置直接Pass掉下方的CRC校验函数,直接跳转到了getchar函数,过于简单粗暴,仅适用于该程序,不适用于网络游戏哦~


⒉Nop大法


36.jpg

37.jpg






Nop大法尤其要注意Nop一定要Nop彻底!另外一定要堆栈平衡!否则被检测或者程序崩溃!

⒊分析代码更改判断条件


下断看eax,eax根据代码结合内层函数得知,是我们的CRC校验值:


内层函数:


43.jpg




41.jpg


单步执行,根据我们观察eax,发现该处是初始校验值和实时校验值的比较处:


42.jpg


那么我们干脆一不做二不休,直接cmp ecx,ecx,让他跳转永远相等,就永远不检测了:


44.jpg

当然还有其他的一些方法,在这里大家可以开动想象力,自行实践哦~

总结:

①要充分观察寄存器窗口数据的变化
②注意疑似校验值的数据以及校验值的判断和计算
③Nop要彻底,并且保证堆栈平衡
④大家自由发挥


45.jpg



0x06:对某厂商的网络FPS游戏实战CRC对抗测试


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



⒈看一下游戏的样子:




46.jpg




该游戏可实现除草功能,地图除草方法:


CheatEngine工具搜索字节数组:55 8B EC 8B 45 08 83 EC 08 8B 48 10 8B 01,找到的地址减去0x22,对该地址nop即可实现除草




47.jpg






⒉分析一下除草地址的检测


由于我们是搜索特征得到的,该游戏的除草功能也是通过修改代码段nop实现的,所以触发了代码的CRC校验检测,符合我们今天讲的知识


查找访问,发现四条访问地址,这个即为我们的CRC检测的访问:


48.jpg


查看相关的汇编代码:


49.jpg


发现:

①疑似加密密匙的东西
②所有的四条访问均来源于同一个代码段,观看代码得知属于同一个Call,也就是检测Call
③由于该检测Call被厂商修改过,所以属于比较特殊的变形CRC

⒊下断检测的代码,观察寄存器


50.jpg


只能推断EAX有可能是校验的次数,也就校验的大小,其他的寄存器并无法得知是否是校验值


⒋去函数的头部看一看

头部下断:eax疑似校验值,edx疑似校验大小,也就是循环的次数


51.jpg

继续运行,发现eax和edx同时变化:


52.jpg


edx在这里变化了两次,第一次为我们的计次,第二次为edi的数据,我们尝试修改头部的数据进行攻击测试:

[由于涉及游戏安全和平衡,在这里,我不将写入的数据进行公开,大家有兴趣的可以自行研究实践]

下hook处理:

①分配内存写数据

因为是jmp 5字节hook,所以要注意写法

53.jpg




②跳转至hook位置


54.jpg


OK,接下来就是漫长的等待~

只要CheatEngine工具的访问不出现新的访问,那么检测就过掉了

北京时间比较准确:


55.jpg


CRC一直没有访问,尝试开启除草功能:


56.jpg


开启后效果:


57.jpg


几分钟过去了,CRC依然没有访问,玩家死亡依然没有访问:


62.jpg


继续开一局游戏:


59.jpg




60.jpg

蹲个坑的时间~


61.jpg




然后就被人打死了~

62.jpg


至此,该功能检测被过掉,检测稳定了.


63.jpg


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.逆向一时爽,一直逆向一直爽,爽的同时千万千万不要误入歧途,违反法律,不然警察叔叔上门送温暖了~


7.jpg

2.感谢吾爱破解论坛和看雪论坛这两个平台,大佬云集,受益匪浅


64.jpg


3.八月份,新的月份,祝大家顺顺利利,万事如意,七夕快到了,做人不缺爱,做x不缺人,团团圆圆,心想事成




67.jpg


后来的测试图,检测不跑了,没了,死的透透的,睡觉睡觉去了


65.jpg

68.jpg



















Crc检测源码打包.zip

744.21 KB, 下载次数: 17, 下载积分: 吾爱币 -1 CB

CRC源码打包

点评

敲门送温暖那图太特么吓人了...吓得我被子外面的脚都缩回来了...  发表于 2019-8-4 05:47

免费评分

参与人数 114吾爱币 +116 热心值 +104 收起 理由
itmaple + 1 + 1 谢谢@Thanks!
无名i + 1 热心回复!
日落繁星 + 1 + 1 热心回复!
Zephyrus + 1 + 1 我很赞同!
Towneast + 1 + 1 谢谢@Thanks!
soloeco + 1 + 1 谢谢@Thanks!
kale07256 + 1 讲的很清晰
给我两根葱 + 1 我很赞同!
内瑟斯 + 1 + 1 我很赞同!
AGby-DT + 1 + 1 我很赞同!
強迫症╯ + 1 + 1 逆向一直爽啊
网瘾大哥 + 1 + 1 辛苦了 逆向一直爽
枫溪逸 + 1 + 1 谢谢@Thanks!
宝宝哒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 谢谢@Thanks!
一夜梦惊人 + 1 + 1 谢谢@Thanks!
1188 + 1 + 1 NB![破音],又浅到深,一步到胃,
我的房间有点暗 + 1 + 1 像这样的大佬不多了,赶紧保护好
lstar + 1 + 1 热心回复!
jnez112358 + 1 + 1 谢谢@Thanks!
吾爱Code + 1 热心回复!
lvbuqing + 1 + 1 热心回复!
tudouer7800 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
吾爱牛逼 + 1 + 1 谢谢@Thanks!
明仁 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
niuzepeng + 1 + 1 谢谢@Thanks!
hellozhanghe + 1 + 1 热心回复!
a2693848417 + 1 + 1 学习了
a739504 + 1 + 1 我很赞同!
天空藍 + 1 + 1 用心讨论,共获提升!
tuoluo348 + 1 + 1 用心讨论,共获提升!
ar_omg + 1 + 1 我很赞同!
daniel7785 + 1 谢谢@Thanks!
爱生活爱拉芳 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
ikea + 1 + 1 用心讨论,共获提升!
CWJYBB + 1 + 1 我很赞同!
Blank空白 + 1 + 1 膜拜大佬
N0LL + 1 + 1 谢谢@Thanks!
这是一场战争 + 1 + 1 感谢楼主分享,珍爱生命,远离熬夜
bp946 + 1 + 1 用心讨论,共获提升!
demo886 + 1 感谢大佬分享
tzblue + 2 + 1 谢谢@Thanks!
siuhoapdou + 1 + 1 谢谢@Thanks!
Minesa + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
korzhao + 1 + 1 0x开头是16进制的意思,0x10应该写成0xa
k2002008 + 1 + 1 谢谢@Thanks!
四公子丶 + 1 + 1 原来是GK老师
小添 + 1 + 1 慢慢看完的都来报道
zy92691 + 1 我很赞同!
cs0208 + 1 + 1 刚刚接触到CRC,还看不太懂楼主的帖子,不过最后那张图,天秀。
yppsniper + 1 + 1 谢谢@Thanks!
yirank8 + 1 + 1 我很赞同!
萌哒哒小乐天 + 1 + 1 开门,社区送温暖
LOLQAQ + 1 + 1 我很赞同!
lickety + 1 + 1 谢谢@Thanks!
3xec3r + 1 + 1 热心回复!
xdans0n + 1 谢谢@Thanks!
katkat + 1 + 1 谢谢@Thanks!
shisuan + 1 + 1 我很赞同!
韬. + 1 + 1 用心讨论,共获提升!
gky86886 + 1 + 1 用心讨论,共获提升!
qwe30245868913 + 1 我很赞同!
xh15159080185 + 1 + 1 用心讨论,共获提升!
Oohuo + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
DOUDOUZXL + 1 + 1 谢谢@Thanks!
zy1234 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
Calmer + 1 + 1 用心讨论,共获提升!
RyanEdward + 1 我很赞同!
Sharonring + 1 + 1 后面那句祝福太亮了
vizardtdst + 1 + 1 用心讨论,共获提升!
smile1110 + 3 + 1 滑稽树上滑稽果
qaz003 + 1 + 1 看到了JMP5字节...满满的回忆呀...
九猛龙刹秦 + 1 + 1 52注册到现在第一个让我用心评论的,楼主很仔细,小白也看懂了,非常感谢,.
jiushig1120 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
氓之嗤嗤 + 1 + 1 稳呐!
柑桔 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
zHiHz + 1 + 1 谢谢@Thanks!
lsrh2000 + 1 + 1 热心回复!
kang1314 + 1 + 1 谢谢@Thanks!
aishuining + 1 + 1 热心回复!
Nicer98 + 1 + 1 我很赞同!
wangyeyu2015 + 1 + 1 我很赞同!
schoolyears + 1 + 1 回报献给有付出的人。
bch + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Wtulip + 1 + 1 我很赞同!
fajia_1986 + 1 + 1 捕捉大神一枚
xiangjing1324 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
稣兰 + 1 + 1 秀啊 老哥
liuxing70 + 1 转载请注明出处
紫阳. + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

qaz003 发表于 2019-8-4 05:43
大半夜的,看得我热血澎湃,感觉我这抖如帕金森般的鼠标手又能吃鸡了...
直到后面看到你那张图...
没错, 就是这张


吓得我一激灵,把CE OD 全关了...继续煲美剧去....
(太特么吓人了, 发贴不带这么玩的呀,大哥....)
笑给风听 发表于 2019-8-3 13:16
超正义的小煌 发表于 2019-8-3 13:54
我是真小白,但是我觉得我看得很清晰,谢谢楼主分享
久乐 发表于 2019-8-3 13:17
谢谢分享优质文章!!
记得の忘记 发表于 2019-8-3 13:25
有点意思,谢谢分享
bianqi 发表于 2019-8-3 13:57
太优秀了!
w159874 发表于 2019-8-3 14:05
外挂孤儿太多,楼主是一股清流。
mack 发表于 2019-8-3 14:13
期待其他教程
lludcmmcdull 发表于 2019-8-3 14:14
这也太厉害了。。。这方面感觉很难
tangfangxi 发表于 2019-8-3 14:47
很厉害的教程,学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:禁止回复与主题无关内容,违者重罚!

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

RSS订阅|小黑屋|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2019-8-25 01:55

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表