搜索
bottom↓
12
返回列表 发新帖
楼主: zhang_mike2000

介绍一种便宜,易用的MCU加密方法

  [复制链接]

出0入0汤圆

 楼主| 发表于 2009-11-11 13:31:17 | 显示全部楼层
【93楼】 zhxzhx 一丁
前几天,这个论坛有一个帖子,说出1万找个对一个MCU反汇编破解,这个case你接了?

出0入0汤圆

发表于 2009-11-11 14:13:44 | 显示全部楼层
虽然不是很懂 还是学习下

出0入0汤圆

发表于 2009-11-11 14:27:09 | 显示全部楼层
这个片子单纯监视I2C的数据是不能破解的,访问这个片子要经过双向认证和加密,我们用了好几年了,不过听我们做硬件的同事说现在这个片子也能被破解了。

出0入0汤圆

发表于 2009-11-11 23:56:24 | 显示全部楼层
【105楼】 zhang_mike2000
在哪?有人接没?

出0入0汤圆

 楼主| 发表于 2009-11-12 08:00:26 | 显示全部楼层
to:LS

你既然是汇编高手,希望下面的事能成,并与大家分享经验。

大家好,10000元寻ATMEGA128反汇编高手,急,联系电话:13711522312,陈先生
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3595849&bbs_page_no=1&search_mode=4&search_text=zhang_mike2000&bbs_id=9999

出0入0汤圆

发表于 2009-11-12 08:24:09 | 显示全部楼层
【104楼】 zhxzhx 一丁
积分:493
派别:
等级:------
来自:辽宁,沈阳
【94楼】 qianhng  

   看来你是不会汇编的
===================================================
你真是健忘啊,建议你看看
《关于开发产品的一些个人看法,我现在使用51和AVR单片机 》
http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=533488
看看【172楼】到【217楼】我们争论汇编和C效率高低的帖子

出0入0汤圆

发表于 2009-11-16 00:19:30 | 显示全部楼层
我用C语言,并不意味着我不会汇编
那你应该知道,看汇编,也不是很难得,至少不能用汇编的难读来作为加密的手段

出0入0汤圆

发表于 2009-11-16 08:28:03 | 显示全部楼层
我在【94楼】提到““反汇编不难,和看汇编的源程序一样”这个不认同,基本上差别很大,不然那些老板谁会反对用汇编?!”
反汇编出来的汇编是很难读的,特别是用汇编写的为加密绕了几个弯的程序(可不像C写的那样有规律),请看【81楼】,你认为不难是因为你没这么做过或碰到的是不防小人的加密,有的加密是连小人都要阴一把的。^_^

出0入0汤圆

发表于 2009-11-17 22:57:52 | 显示全部楼层
【112楼】 qianhng
那个一万的我看了,不应该是加密,基本就是一个通讯

出0入0汤圆

发表于 2009-11-17 23:15:55 | 显示全部楼层
我倒没去看程序,那是【109楼】 zhang_mike2000 让你看的。

出0入0汤圆

 楼主| 发表于 2009-11-18 08:46:16 | 显示全部楼层
我同意“反汇编出来的汇编是很难读的,特别是用汇编写的为加密绕了几个弯的程序(可不像C写的那样有规律),”
如果zhxzhx 一丁你认为不是这样的话,请用实际案例说明这个过程是如何的“简单”!

出0入0汤圆

发表于 2009-11-18 14:59:19 | 显示全部楼层
本人喜欢反向工程,曾多次调试修改破解x86程序
望寻有51/AVR环境下的爱好者共同交流

^_^

出0入0汤圆

发表于 2009-11-18 17:48:28 | 显示全部楼层
这个其实就是智能卡SAM安全模块了

出0入0汤圆

发表于 2009-11-18 18:27:53 | 显示全部楼层
【115楼】 zhang_mike2000

    你看病毒,都是看反汇编分析出来的,而且PC的程序在RAM里运行,可以一边解密,一边运行,相对于在ROM里运行的静态程序,这个复杂多了,而且在DOS时代,MSDOS,的资料全是靠反汇编分析出来的,有一本书,叫PC中断调用大全就是在反汇编的基础上写的

    AVR的反汇编,简单的可以用reAVR,复杂的可以利用IDA,我现在就使用IDA5.0

出0入0汤圆

 楼主| 发表于 2009-11-18 20:31:27 | 显示全部楼层
to:【118楼】 zhxzhx 一丁
反汇编原理很简单,这是地球人都知道的,现在的问题是,客户愿意为这个工作花多少钱?

愿意花的多,说明这件事难度大,愿意花的少,说明这事难度小。我们只能以货币的多少来量化此工作的难度。否则没办法量化呀。

出0入0汤圆

发表于 2009-11-18 22:10:04 | 显示全部楼层
问题是,这个的代价没有你想象的高,难度也没有你想象的大
    比如IDA,可以把C的数据结构分析出来,同时,还能区分出功能模块,形成流程图,加上对功能的了解,很快就能了解大致的处理思路,然后针对特定的部分修改,因为你是在ROM里的静态代码,是不能隐藏程序的分支的,而在pC上,你可以把程序代码伪装成数据,也可以动态调整段,即便是这样还有softICE可用,他可以设定条件断点,比如修改某个数据,就产生断点.这样和你说吧,解一个PC机上的加密狗,和你的原理是一样的东西,几乎就是0 DAY.其实我们身边有很多解密的东西,比如盗版,我们用的破解软件,都是这样来的,你可以感觉一下从新版本出来到有破解补丁,需要多长时间.
    我认为.单片机的加密,要从防止破解的人得到BIN代码入手,我遇到过一个软件,只要你把她从设备上取下来,一通电,它就自己把自己的代码清除,你解出来也是不完整的代码,即便是这样,我认识的一帮人也能得到BIN文件,他们可以不给芯片加电而得到二进制代码

出0入0汤圆

发表于 2009-11-18 22:19:03 | 显示全部楼层
搜索了一下,网站上就有介绍IDA反汇编的

http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=842197&bbs_page_no=1&search_mode=1&search_text=反汇编&bbs_id=9999

出0入0汤圆

发表于 2009-11-19 08:32:03 | 显示全部楼层
【120楼】“比如IDA,可以把C的数据结构分析出来,同时,还能区分出功能模块”
=====================================================================
问题是:有的整个程序都不是用C而是用汇编写的呀!“很快就能了解大致的处理思路”这一点不成立。

出0入0汤圆

发表于 2009-11-26 21:40:01 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-12-8 19:53:59 | 显示全部楼层
保护知识产权,与国于民是有利的,从长远来说也是必须的,看过CCTV大国崛起中"英国"这一篇,就有这个感觉。


该芯片用于AVR加密:
CryptoMemory Development Library for AVR core (WinAVR-20090313) (2 MB)
For AVR core (WinAVR-20090313).

下载
http://www.atmel.com/dyn/resources/prod_documents/lib_CM-WinAVR20090313-090513.exe


安装后的文件列表
C:\Atmel\EmbeddedCrypto\DevLib\AVR\WinAVR-20090313 的目录

2009-12-08  16:39    <DIR>          .
2009-12-08  16:39    <DIR>          ..
2007-12-04  10:33           300,318 Cmem.ico
2009-05-12  10:07             3,406 Example.c
2009-12-08  16:39    <DIR>          libref
2009-05-13  09:40            25,050 lib_CM.a
2009-05-12  09:02            56,791 lib_Crypto.h
2009-05-12  09:02            19,397 lib_Support.c
2008-12-19  15:50             8,821 ll_port.c
2008-12-19  15:49             2,826 ll_port.h
2009-05-13  11:22             1,263 README-AVR.txt
               8 个文件        417,872 字节

这是其中的Example.c
#include <stdio.h>

#include "ll_port.h"
#include <lib_Crypto.h>

#define DEFAULT_ADDRESS 0xb ///< Default address for CryptoMemory devices

void main(void){

     unsigned char ucData[16], ucG[8];
     unsigned char i;
     RETURN_CODE ucReturn;

     ll_PowerOn();

     if( cm_Init() == SUCCESS) // Initialize the CM
        printf("CM Init Success...\n");
     else
        printf("CM Init Failed !!!\n");

     printf("Library Version is:  %s\n", getLibVersNum());
     printf("\n");

     // Test write config zone
     ucData[0] = 0x5A;
     ucData[1] = 0xA5;
     printf("Write MTZ\n");
     ucReturn = cm_WriteConfigZone(DEFAULT_ADDRESS, 0x0A, ucData, 2, FALSE);
     if (ucReturn != SUCCESS) printf("fail\n");
                                                                                
     // Test Read config zone
     ucData[0] = 0x00;
     ucData[1] = 0x00;
     printf("Read MTZ\n");
     ucReturn = cm_ReadConfigZone(DEFAULT_ADDRESS, 0x0A, ucData, 2);
     if (ucReturn != SUCCESS) printf("fail\n");
     
     // Test write config zone w/a-t
     ucData[0] = 0x5A;
     ucData[1] = 0xA5;
     printf("Write MTZ w/a-t\n");
     ucReturn = cm_WriteConfigZone(DEFAULT_ADDRESS, 0x0A, ucData, 2, TRUE);
     if (ucReturn != SUCCESS) printf("fail\n");

     // Verify Read password 0
     for (i = 0; i < 3; ++i) ucData = 0xFF;
     ucReturn = cm_VerifyPassword(DEFAULT_ADDRESS, ucData,0, 1);
     if (ucReturn != SUCCESS) printf("fail\n");
                                                                                                                                                               
     // Verify Write password 0
     ucData[0] = 0xFF;
     ucData[1] = 0xFF;
     ucData[2] = 0xFF;
     ucReturn = cm_VerifyPassword(DEFAULT_ADDRESS, ucData,0, 0);
     if (ucReturn != SUCCESS) printf("fail\n");
     
     // Set User Zone
     ucReturn = cm_SetUserZone(DEFAULT_ADDRESS, 3, FALSE);
     if (ucReturn != SUCCESS) printf("fail\n");
     
     // Write data to user zone
     for (i = 0; i < 16; ++i) ucData = 0xEE;
     ucReturn = cm_WriteUserZone(DEFAULT_ADDRESS, 0, ucData, 16);
     if (ucReturn != SUCCESS) printf("fail\n");
     
     // Read user zone
     for (i = 0; i < 16; ++i) ucData = 0x00;
     ucReturn = cm_ReadUserZone(DEFAULT_ADDRESS, 0, ucData, 16);
     if (ucReturn != SUCCESS) printf("fail\n");
     
     // Read Device Fuse Register
     ucReturn = cm_ReadFuse(DEFAULT_ADDRESS, ucData);
     if (ucReturn != SUCCESS) printf("fail\n");

     // Verify authentication
     for (i = 0; i < 8; ++i) ucG = 0xFF;
     ucReturn = cm_VerifyCrypto(DEFAULT_ADDRESS, 1, ucG, NULL, FALSE);
     if (ucReturn != SUCCESS) printf("fail\n");
     
     // Verify encryption
     for (i = 0; i < 8; ++i) ucG = 0xFF;
     ucReturn = cm_VerifyCrypto(DEFAULT_ADDRESS, 1, ucG, NULL, TRUE);
     if (ucReturn != SUCCESS) printf("fail\n");

     // Test ReadChecksum
     ucReturn = cm_ReadChecksum(DEFAULT_ADDRESS, ucData);
     if (ucReturn != SUCCESS) printf("fail\n");

     // Set User Zone w/a-t
     ucReturn = cm_SetUserZone(DEFAULT_ADDRESS, 3, TRUE);
     if (ucReturn != SUCCESS) printf("fail\n");

     // Try to deactivate security
     ucReturn = cm_ResetCrypto(DEFAULT_ADDRESS);
     if (ucReturn != SUCCESS) printf("fail\n");

     while(1);

}

出0入0汤圆

发表于 2009-12-9 21:41:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-12-9 23:00:48 | 显示全部楼层
mark

出0入4汤圆

发表于 2009-12-12 09:53:40 | 显示全部楼层
""""我遇到过一个软件,只要你把她从设备上取下来,一通电,它就自己把自己的代码清除,你解出来也是不完整的代码,""'
这个思路好,靠检测原电路中的信号来自动清除代码,再作成SMD的。那还是不错的好方法哟

出0入0汤圆

发表于 2010-4-8 19:52:54 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-27 14:33:00 | 显示全部楼层
参考参考。。。

出0入0汤圆

发表于 2010-7-26 16:16:54 | 显示全部楼层
谁有at88sc104Linux下的驱动

出0入0汤圆

发表于 2010-11-9 19:58:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-16 10:18:39 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-16 12:37:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-17 11:35:41 | 显示全部楼层
EEPROM加密码

出0入0汤圆

发表于 2010-11-17 12:32:33 | 显示全部楼层
学习学习

出0入0汤圆

发表于 2010-11-17 16:15:25 | 显示全部楼层
AT88SC系列的API是要跟ATMEL签协议的,开发也比较难。现在新产品设计的话,可以考虑用AT88SA系列,源码和算法都是公开的。

出0入0汤圆

发表于 2010-11-19 19:37:02 | 显示全部楼层
mark  学习了

出0入0汤圆

发表于 2010-11-19 20:25:18 | 显示全部楼层
记号了迟些再看

出0入0汤圆

发表于 2011-2-13 17:57:08 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-2-13 20:44:06 | 显示全部楼层
最好的加密就是让解密者觉得已解密,实际随机的出点问题,找不到头.

出0入0汤圆

发表于 2011-2-14 17:21:40 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-2-14 21:34:04 | 显示全部楼层
jh

出0入0汤圆

发表于 2011-2-14 22:24:48 | 显示全部楼层
我也介绍一个方法,凑凑热闹。
找人把IC打磨掉,然后重新打字。题外话,这个方法汉芯用过,不过教授不懂,走了不少弯路,最后还是要请民工才搞定。实际一颗IC打磨重新刻字只需不到一毛钱即可。
这个方法其实也不保险,但是可以迷惑敌人,重新打的字要打一个似是而非的型号,封装要相同(电源、晶振等管脚排列相同就更妙),要很冷门的,却又真实存在的型号。

出0入0汤圆

发表于 2011-2-19 20:11:19 | 显示全部楼层
我觉得11楼的办法不错。
能不能这样,让MCU每次根据时间计算出一个索引号,这样的索引号每秒变化一次,要跟踪IIC就很难了。如果是用在电力上,利用过零检测,10ms就能变化一次,这个破_解难度就更大了。

出0入0汤圆

发表于 2011-2-26 20:46:52 | 显示全部楼层
HCS301简单便宜

出0入0汤圆

发表于 2011-6-20 11:12:13 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-20 16:15:21 | 显示全部楼层
flow chart
MCU                       read --->    EEPROM code
MCU                       <----return  EEPROM code
if match than pass
if not match than do something else


我有一种想改成

if not match then pass 的感脚。

出0入0汤圆

发表于 2011-6-29 10:09:12 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-4 21:43:00 | 显示全部楼层
学习!

出0入0汤圆

发表于 2011-7-5 15:27:07 | 显示全部楼层
MCU部分要加自宫程序,检测不到就自宫了事,保密性还是有保证。抗干扰不够的话,怕误伤。

出0入0汤圆

发表于 2011-7-5 19:50:38 | 显示全部楼层
nark

出0入0汤圆

发表于 2011-7-12 15:24:32 | 显示全部楼层
现在Atmel有新的ATSHA204加密芯片来替代AT88SC0104了..  加密强度更高

出0入0汤圆

发表于 2011-8-21 16:09:53 | 显示全部楼层
ATSHA204
http://www.dzsc.com/news/html/2011-3-8/125438.html

出0入0汤圆

发表于 2011-8-24 14:26:45 | 显示全部楼层
原来AT88SC还是这么受关注。。。。

曾经有个时间段研究过这个,写过其烧写器。
此种方法防止在线监听破_解关键数据是非常不错的选择。
但是如果只是存储密钥之类,读到单片机内比对的话,还是会存在以下的问题:如果别人把你的单片机程序完全反汇编过来,那么程序内容,密钥内容也就都一目了然了。

出0入0汤圆

发表于 2011-8-25 10:20:01 | 显示全部楼层
不错

出0入0汤圆

发表于 2011-8-26 11:51:56 | 显示全部楼层
加密和破_解都是可以实现的,关键是他用不着破_解,他直接破_解编程的那个人就行了!

出0入0汤圆

发表于 2011-12-23 11:23:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-24 13:35:49 | 显示全部楼层
我用AD的

出0入0汤圆

发表于 2011-12-24 16:27:34 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-3-3 21:35:39 | 显示全部楼层
顶!

出0入0汤圆

发表于 2012-5-12 14:34:54 | 显示全部楼层
加密方法,mark

出0入0汤圆

发表于 2012-5-26 16:51:07 | 显示全部楼层
呵呵     厉害                                 

出0入0汤圆

发表于 2012-8-15 15:40:03 | 显示全部楼层
plank 发表于 2009-6-8 13:55
我觉得用处不大,mcu中的代码都读出来了,程序改一下就可以跳过eeprom中的密码,这样连eeprom的成本都省了 ...

这兄弟说的深刻,希望国人好好思考,为什么你用着破解的win系统,而微软并没有死掉。

出0入0汤圆

发表于 2012-8-18 09:11:39 | 显示全部楼层
不错不错 学习啦!

出0入0汤圆

发表于 2012-8-31 10:18:18 | 显示全部楼层
mark


出0入0汤圆

发表于 2012-9-27 21:57:42 | 显示全部楼层
zhang_mike2000 发表于 2009-6-13 17:00
又找到一种东东,ISL9206 & ISL9206A SOT-23 封装, 1-wire通讯

国内成交价在4RMB左右。

哪里有购买的?

出0入0汤圆

发表于 2012-9-28 09:10:55 | 显示全部楼层
关注  有时间学下。

出0入0汤圆

发表于 2013-8-15 16:50:15 | 显示全部楼层

最好的加密就是让解密者觉得已解密,实际随机的出点问题,找不到头.

出0入0汤圆

发表于 2013-8-15 17:01:58 | 显示全部楼层
mark 学习学习

出0入0汤圆

发表于 2013-9-17 13:53:50 | 显示全部楼层
plank 发表于 2009-6-8 13:55
我觉得用处不大,mcu中的代码都读出来了,程序改一下就可以跳过eeprom中的密码,这样连eeprom的成本都省了 ...

别人都能研究你的反汇编码了,绝大多数情况下也没必要去破解你的了。  大部分的破解是取出HEX然后烧写,不做修改。

出0入0汤圆

发表于 2013-9-17 13:58:16 | 显示全部楼层
通过CPU的ID号经过某种算法算出来的密钥,拿这个密钥加密通信协议
还是感觉这样的加密最可靠

出0入0汤圆

发表于 2013-9-17 17:25:34 | 显示全部楼层
如果是低档产品,对成本敏感的,这些都不适合,我有个方法,应该还行的,但是不能说。

出0入0汤圆

发表于 2013-9-17 23:10:37 | 显示全部楼层

出0入0汤圆

发表于 2013-9-18 02:11:53 | 显示全部楼层
长见识了,谢谢楼主

出0入0汤圆

发表于 2013-9-22 23:52:37 来自手机 | 显示全部楼层
没有接触过     

出0入8汤圆

发表于 2013-9-23 08:17:28 | 显示全部楼层
MARK,值得研究!

出0入4汤圆

发表于 2013-9-23 08:22:26 | 显示全部楼层
直接拿cpld模拟一个一模一样的时序就好了。。。

出0入0汤圆

发表于 2013-11-18 17:08:38 | 显示全部楼层
ATSC88用密文传输?这种密文 你都识别不了 让单片机如何识别?

出0入0汤圆

发表于 2014-7-9 13:58:58 | 显示全部楼层
想怎么玩就怎么玩

出0入0汤圆

发表于 2014-7-10 10:21:00 | 显示全部楼层
mark,好资料,顶,学习中

出0入0汤圆

发表于 2015-1-27 18:16:43 | 显示全部楼层
这个值得研究下,最近在搞atsha204

出0入0汤圆

发表于 2015-1-27 18:47:08 | 显示全部楼层
这个可以有,觉得前面一位网友好,发送索引数据,而不是明码不错

出0入0汤圆

发表于 2015-1-27 23:02:54 | 显示全部楼层
如果芯片具备非对称加密的话,基本上破解是无望的,但是这个非对称加密很贵

出0入0汤圆

发表于 2015-1-28 01:03:31 | 显示全部楼层
谢谢分享!

出0入0汤圆

发表于 2015-1-28 09:16:00 | 显示全部楼层
以前还真没关注过这一块,不知道楼主方法到底怎么样

出0入0汤圆

发表于 2015-1-28 10:53:54 | 显示全部楼层
有机会试试!mark

出0入0汤圆

发表于 2015-1-28 11:52:23 | 显示全部楼层
外接EEPROm加密,时序破解不难

出0入0汤圆

发表于 2015-1-28 12:40:58 | 显示全部楼层
加密的最高境界--不加密

出0入0汤圆

发表于 2015-1-29 20:47:17 | 显示全部楼层
我只是一个便宜的STC芯片,跟FPGA通讯,FPGA主动发起对话,发送一串随机生成的数,MCU收到后返回运算结果,FPGA收不到数或者数据错误就罢工。
一直在使用这个思路保护FPGA板子被抄。这个方法简单,但是破解难度肯定不如LZ提到的器件。
如果FPGA里面有DNA号的话,只要外接一个EEPROM就行,DNA和EEPROM 存在换算关系,这个关系难一些,别人只要琢磨不出这个关系,就抄不了板子。因为DNA号唯一。

出0入0汤圆

发表于 2015-1-29 23:35:01 | 显示全部楼层
单片机加密一直是一个值得探讨的问题!

出0入0汤圆

发表于 2015-1-30 01:11:54 | 显示全部楼层
谢谢分享 !! 加密很重要。

出0入0汤圆

发表于 2015-1-30 04:32:52 | 显示全部楼层
楼主的想法,值得研究

出0入0汤圆

发表于 2015-1-30 12:17:57 | 显示全部楼层
见过以前以为是EEPROM

出0入0汤圆

发表于 2015-1-30 12:27:54 | 显示全部楼层
思路也挺好的………………

出0入0汤圆

发表于 2015-1-30 12:40:57 | 显示全部楼层
zhang_mike2000 发表于 2009-6-8 14:06
我会试着写一下程序,如果成功了。会放到这里与大家分享。
AT88SC功能很多,对MCU加密只是其功能的一部分。 ...

5K USD可以不?如果可以吗,你加密有意义?

出0入0汤圆

发表于 2015-2-2 16:35:44 | 显示全部楼层
值得关注

出0入0汤圆

发表于 2015-2-2 21:12:41 | 显示全部楼层
cicnx 发表于 2009-6-8 17:29
在两边放一张密码表. 读取的时候只发送索引号, 每次的索引号不一样..这样分析I2C的难度加大... ...

这个想法不错,不知道有没有用在实际产品中呢?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-8 14:32

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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