摘要: 转自:[已完工][经典文章翻译]A Crash Course on the Depths of Win32 Structured Exception Handling原文题目: >原文地址: http://www.microsoft.com/msj/0197/Exception/Exception.... 阅读全文
posted @ 2015-02-02 21:48 Acg!Check 阅读(517) 评论(0) 推荐(0)
摘要: 转自:http://blog.chinaunix.net/uid-20384269-id-1954602.html首先,内存访问和管理是一个跨越应用程序,操作系统,硬件平台的一个复杂过程,不能单纯的讲32bit系统就支持4G内存,从而认为这个过程只是OS和内存两者之间的关系理论上:32位系统,32b... 阅读全文
posted @ 2015-02-02 21:45 Acg!Check 阅读(1277) 评论(0) 推荐(0)
摘要: 转自:http://user.qzone.qq.com/31731705/blog/1324046552 文章PAE下的虚拟内存映射 分析(http://user.qzone.qq.com/31731705/blog/1323414733)和PAE下的虚拟内存映射 实践(http://user.... 阅读全文
posted @ 2015-02-02 21:44 Acg!Check 阅读(683) 评论(0) 推荐(0)
摘要: 转自:http://user.qzone.qq.com/31731705/blog/1323426728 前文是理论分析,在此:PAE下的虚拟内存映射 分析(http://user.qzone.qq.com/31731705/blog/1323414733),理论需要结合实际,现在来实际体验一下。... 阅读全文
posted @ 2015-02-02 21:43 Acg!Check 阅读(674) 评论(0) 推荐(0)
摘要: 标 题:【原创】Windows下的分页模式- 页目录和页表从物理内存到虚拟映射求值作 者:hrpirip 时 间:2012-12-06,12:45:36 链 接:http://bbs.pediy.com/showthread.php?t=159554 昨天在网上看到一段代码令大为不解,大家都知道一个... 阅读全文
posted @ 2015-02-02 21:43 Acg!Check 阅读(672) 评论(0) 推荐(0)
摘要: 转自:http://user.qzone.qq.com/31731705/blog/1323414733 PAE 即为物理地址扩展(Physical Address Extension),详细的内容请Google。 我的电脑是Win7,CPU是双核处理器,信息如下,0: kd> !sysinfo... 阅读全文
posted @ 2015-02-02 21:41 Acg!Check 阅读(488) 评论(0) 推荐(0)
摘要: 转自: http://www.pediy.com/kssd/pediy10/62497.html在《JIURL玩玩Win2k内存篇分页机制(三)》中提到计算虚拟地址对应PTE地址的公式,如下:代码:PTE_Addr=(VirtualAddr>>12)*4+0xC0000000从虚拟地址转换到物理地址... 阅读全文
posted @ 2015-02-02 21:39 Acg!Check 阅读(2623) 评论(0) 推荐(0)
摘要: 文章链接:1> Windows内核情景分析 3.4.1 Windows 进程的句柄表2> Windows 句柄表格式3> Windows句柄表分配算法分析4> 浅谈Windows句柄表5> 句柄啊,3层表啊,ExpLookupHandleTableEntry啊... 5楼-----------... 阅读全文
posted @ 2015-02-02 21:38 Acg!Check 阅读(527) 评论(0) 推荐(0)
摘要: 转载: http://bbs.pediy.com/showthread.php?t=89407在XP系统中,系统服务在内核的入口是KiFastCallEntry,我们从该入口开始,分析这一段代码都做了什么工作。 由于水平有限和背景知识不够,本人没有完全读懂它们,作为抛砖引玉,我先将我所看懂的和大家分... 阅读全文
posted @ 2015-02-02 21:35 Acg!Check 阅读(589) 评论(0) 推荐(0)
摘要: 概要本章介绍AVL树。和前面介绍"二叉查找树"的流程一样,本章先对AVL树的理论知识进行简单介绍,然后给出C语言的实现。本篇实现的二叉查找树是C语言版的,后面章节再分别给出C++和Java版本的实现。 建议:若您对"二叉查找树"不熟悉,建议先学完"二叉查找树"再来学习AVL树。目录1.AVL树的介绍... 阅读全文
posted @ 2015-02-02 21:32 Acg!Check 阅读(200) 评论(0) 推荐(0)
摘要: 概要本章介绍伸展树。它和"二叉查找树"和"AVL树"一样,都是特殊的二叉树。在了解了"二叉查找树"和"AVL树"之后,学习伸展树是一件相当容易的事情。和以往一样,本文会先对伸展树的理论知识进行简单介绍,然后给出C语言的实现。后序再分别给出C++和Java版本的实现;这3种实现方式的原理都一样,选择其... 阅读全文
posted @ 2015-02-02 21:30 Acg!Check 阅读(215) 评论(0) 推荐(0)
摘要: (转载于breaksoftware的csdn博客)之前几篇文章主要介绍和分析了为什么会在DllMain做出一些不当操作导致死锁的原因。本文将总结以前文章的结论,并介绍些DllMain中还有哪些操作会导致死锁等问题。 DllMain的相关特性 首先列出《DllMain中不当操作导致死锁问题的... 阅读全文
posted @ 2015-02-02 21:27 Acg!Check 阅读(263) 评论(0) 推荐(0)
摘要: (转载于breaksoftware的csdn博客)之前的几篇文章已经讲解了在DllMain中创建并等待线程导致的死锁的原因。是否还记得,我们分析了半天汇编才知道在线程中的死锁位置。如果对于缺乏调试经验的同学来说,可能发现这个位置有点麻烦。那么本文就介绍几个例子,它们会在线程明显的位置死锁掉。 ... 阅读全文
posted @ 2015-02-02 21:26 Acg!Check 阅读(614) 评论(0) 推荐(1)
摘要: (转载于breaksoftware的csdn博客)我们回顾下之前举得例子caseDLL_PROCESS_ATTACH:{printf("DLLDllWithoutDisableThreadLibraryCalls_A:\tProcessattach(tid=%d)\n",tid);HANDLEhTh... 阅读全文
posted @ 2015-02-02 21:22 Acg!Check 阅读(439) 评论(0) 推荐(0)
摘要: (转载于breaksoftware的csdn博客)前几篇文章一直没有在源码级证明:DllMain在收到DLL_PROCESS_ATTACH和DLL_PROCESS_DETACH时会进入临界区。这个论证非常重要,因为它是使其他线程不能进入临界区从而导致死锁的关键。我构造了在DLL被映射到进程地址空间的... 阅读全文
posted @ 2015-02-02 21:21 Acg!Check 阅读(826) 评论(0) 推荐(0)
摘要: (转载于breaksoftware的csdn博客)《windows核心编程》作者在讨论DllMain执行序列化的时候,曾说过一个他的故事:他试图通过调用DisableThreadLibraryCalls以使得新线程不在调用DllMain从而解决死锁问题。但是该方案最后失败了。思考作者的思路,他可能一... 阅读全文
posted @ 2015-02-02 21:20 Acg!Check 阅读(853) 评论(0) 推荐(0)
摘要: (转载于breaksoftware的csdn博客)本文介绍使用Windbg去验证《DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子》中的结论,调试对象是文中刚开始那个例子。 1 g 让程序运行起来 2 ctrl+break 中断程序 3 ~ 查看... 阅读全文
posted @ 2015-02-02 21:16 Acg!Check 阅读(290) 评论(0) 推荐(0)
摘要: (转载于breaksoftware的csdn博客)有了前面两节的基础,我们现在切入正题:研究下DllMain为什么会因为不当操作导致死锁的问题。首先我们看一段比较经典的“DllMain中死锁”代码。//主线程中HMODULEh=LoadLibraryA(strDllName.c_str());//D... 阅读全文
posted @ 2015-02-02 21:15 Acg!Check 阅读(397) 评论(0) 推荐(0)
摘要: (转载于breaksoftware的csdn博客)不知道大家是否思考过一个过程:系统试图运行我们写的程序,它是怎么知道程序起始位置的?很多同学想到,我们在编写程序时有个函数,类似Main这样的名字。是的!这就是系统给我们提供的控制程序最开始的地方(注意这儿是提供给我们的,而实际有比这个还要靠前的ma... 阅读全文
posted @ 2015-02-02 21:14 Acg!Check 阅读(333) 评论(0) 推荐(0)
摘要: (转载于breaksoftware的csdn博客)最近在网上看到一些关于在DllMain中不当操作导致死锁的问题,也没找到比较确切的解答,这极大吸引了我研究这个问题的兴趣。我花了一点时间研究了下,正好也趁机研究了下进程对DllMain的调用规律。因为整个研究篇幅比较长,我觉得还是分开写比较能突出重点... 阅读全文
posted @ 2015-02-02 21:13 Acg!Check 阅读(220) 评论(0) 推荐(0)
摘要: 转自:黑客反病毒DLL注入技术之输入法注入 输入法注入原理是利用Windows系统中在切换输入法需要输入字符时,系统就会把这个输入法需要的ime文件装载到当前进程中,而由于这个Ime文件本质上只是个存放在C:\WINDOWS\system32目录下的特殊的DLL文件,因此我们可以利用这个特性,在Im... 阅读全文
posted @ 2015-02-02 21:10 Acg!Check 阅读(1279) 评论(0) 推荐(0)
摘要: 转自:黑客反病毒APC注入的原理是利用当线程被唤醒时APC中的注册函数会被执行的机制,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的,其具体流程如下: 1)当EXE里某个线程执行到SleepEx()或者WaitForSingleObjectEx()时,系统就会产生一个软中断。 2... 阅读全文
posted @ 2015-02-02 21:09 Acg!Check 阅读(359) 评论(0) 推荐(0)
摘要: 转自:黑客反病毒DLL注入技术之依赖可信进程注入 依赖可信进程注入原理是利用Windows 系统中Services.exe这个权限较高的进程,首先将a.dll远线程注入到Services.exe中,再利用a.dll将b.dll远线程注入到待注入进程中。具体过程如下图所示:这里提供一个小技巧,当注入到... 阅读全文
posted @ 2015-02-02 21:07 Acg!Check 阅读(478) 评论(0) 推荐(0)
摘要: 转自:黑客反病毒DLL注入技术之远线程注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EXE文件中的API),或以被注入EXE的身份去执行一些操作等等。 远线程注入原理是... 阅读全文
posted @ 2015-02-02 21:06 Acg!Check 阅读(279) 评论(0) 推荐(0)
摘要: 转自:黑客反病毒DLL注入技术之劫持进程创建注入 劫持进程创建注入原理是利用Windows系统中CreateProcess()这个API创建一个进程,并将第6个参数设为CREATE_SUSPENDED,进而创建一个挂起状态的进程,利用这个进程状态进行远程线程注入DLL,然后用ResumeThread... 阅读全文
posted @ 2015-02-02 21:05 Acg!Check 阅读(1091) 评论(0) 推荐(0)
摘要: 转自:黑客反病毒DLL注入技术之消息钩子注入 消息钩子注入原理是利用Windows 系统中SetWindowsHookEx()这个API,他可以拦截目标进程的消息到指定的DLL中导出的函数,利用这个特性,我们可以将DLL注入到指定进程中。主要流程如下图所示1.准备阶段 需要编写一个DLL,并且显... 阅读全文
posted @ 2015-02-02 21:04 Acg!Check 阅读(623) 评论(0) 推荐(0)
摘要: 转自:黑客反病毒DLL注入技术之ComRes注入 ComRes注入的原理是利用Windows 系统中C:\WINDOWS\system32目录下的ComRes.dll这个文件,当待注入EXE如果使用CoCreateInstance()这个API时,COM服务器会加载ComRes.dll到EXE中... 阅读全文
posted @ 2015-02-02 21:03 Acg!Check 阅读(487) 评论(0) 推荐(0)
摘要: 转自:黑客反病毒论坛DLL注入技术之REG注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EXE文件中的API),或以被注入EXE的身份去执行一些操作等等。 REG注入... 阅读全文
posted @ 2015-02-02 21:02 Acg!Check 阅读(365) 评论(0) 推荐(1)
摘要: 原文地址:点击打开链接 为什么要写这篇文章 1.因为最近在学习《软件调试》这本书,看到书中的某个调试历程中讲了Windows的系统调用的实现机制,其中讲到了从Ring3跳转到Ring0之后直接进入了KiFastCallEntry这个函数。 2.碰巧前天又在网上看到了一篇老文章介绍xxx安全卫士对W... 阅读全文
posted @ 2015-02-02 20:59 Acg!Check 阅读(407) 评论(0) 推荐(0)
摘要: ===========================================原文地址:点击打开链接最近读到windows核心编程 作者制作的chHANDLE_DLGMSG 对话框消息处理宏#definechHANDLE_DLGMSG(hWnd,message,fn)/case(messag... 阅读全文
posted @ 2015-02-02 20:56 Acg!Check 阅读(560) 评论(0) 推荐(0)
摘要: 1. 概述windows 提供了一种基于 lookaside list 的快速内存分配方案,区别于一般的使用 ExAllocatePoolWithTag() 系列函数的内存分配方式。每次从 lookaside list 里分配 fixed size 的内存。 系统构建两个条 lookaside 链表... 阅读全文
posted @ 2015-02-02 18:44 Acg!Check 阅读(677) 评论(0) 推荐(0)
摘要: 1. 栈结构设备栈(Device Stack)结构与内存中的栈类似,但是 device stack 中的 entry 由 device object 中的 AttachedDevice 值的连接。如下图所示:并且由每个 device 的 DeviceExtension.AttachedTo 值指向下... 阅读全文
posted @ 2015-02-02 18:43 Acg!Check 阅读(1227) 评论(0) 推荐(0)
摘要: 在分析代码混淆时,一般的指令是比较好分析的,但对于利用栈进行混淆处理这类代码是比较头痛的,编写对付这类代码的自动分析模块是比较麻烦的,恐怕得追踪记录栈的使用情况。例如,请分析下面10条代码,并将它的混淆部分去除,得到最简化代码。这是比较常见的一类混淆形式,实际上它只是一个混淆块的一部分: ..... 阅读全文
posted @ 2015-02-02 18:41 Acg!Check 阅读(888) 评论(0) 推荐(0)
摘要: 这里实现一个 LoadImage() 函数,用来加载目标 image 文件。如下面的用法: 1 ... ... 2 3 4 RtlInitUnicodeString(&ImageFile, L"\\??\\C:\\windows\\system32\\ntkrn... 阅读全文
posted @ 2015-02-02 18:39 Acg!Check 阅读(1038) 评论(0) 推荐(0)
摘要: 源自:http://bjwf.cndev.org/2004/06/03/559/http://bbs.csdn.net/topics/40214261======================================今天老玉米提了一个问题问为什么dll里malloc的内存如果在exe里fr... 阅读全文
posted @ 2015-02-02 17:17 Acg!Check 阅读(646) 评论(0) 推荐(0)
摘要: 10.对话框管理器的内部工作 我认为许多对于对话框管理器的困惑,来自没有真正的理解它是怎么工作的.没有那么糟糕.在一些热身讨论之后,我走进对话框模板的历史,把它作为一个基础来理解对话框时怎么建立的,然后跟踪对话框消息循环,分成几个章节以便浏览.关于对话框过程 一个对话框过程真的没有多少东西.对于每条... 阅读全文
posted @ 2015-02-02 17:16 Acg!Check 阅读(494) 评论(0) 推荐(0)
摘要: #definechSTR2(x) #x这个是串化,chSTR2(1+1==2)替换成"1+1==2"其他的都是M$的扩展,不需要搞明白..#pragmawarning(push,3)//3级警告设置入栈#pragmawarning(pop)//警告设置出栈#pragmawarning(push,4)... 阅读全文
posted @ 2015-02-02 17:15 Acg!Check 阅读(285) 评论(0) 推荐(0)
摘要: Windows API 函数 GetProcAddress 被广泛用于取得函数指针地址。 例如:typedef BOOL (WINAPI*pfnGetProductInfo)(DWORD, DWORD, DWORD, DWORD, PDWORD);pGPI = (pfnGetProductInfo)... 阅读全文
posted @ 2015-02-02 17:11 Acg!Check 阅读(2467) 评论(0) 推荐(0)
摘要: 科学记数法: 在科学记数法中,一个数被写成一个1与10之间的实数与一个10的n次幂的积 782300=7.823×105 0.00012=1.2×10−4 10000=1×104在电脑或计算器中一般用E或e(英语Exponential)来表示10的幂: 7.823E5=782300 1.2e−4=0... 阅读全文
posted @ 2015-02-02 17:10 Acg!Check 阅读(454) 评论(0) 推荐(0)
摘要: RVA = 虚拟地址 - 基址 如: 00423562 - 00400000 = 23562 -------------------------------------------------- 作 者: LeoF时 间: 2010-03-23,17:53:48 链 接: http://bbs.pe... 阅读全文
posted @ 2015-02-02 17:09 Acg!Check 阅读(503) 评论(0) 推荐(0)
摘要: 很多C++的教材中都讲:“如果一个定义一个类,并且不提供任何构造函数的话,那么编译器将会隐式的提供一个缺省构造函数”。以下节录ISO C++ 99的文档的原文:The default constructor (12.1), copy constructor and copy assignment o... 阅读全文
posted @ 2015-02-02 17:05 Acg!Check 阅读(394) 评论(0) 推荐(0)
摘要: 转自:http://www.cppblog.com/custa/archive/2010/08/15/123491.html 今天看《C++ Primer》的成员访问操作符。看重载箭头操作符部分,刚开始有点迷茫,看了两遍总算有点理解,把心得写在这,与各位分享,如果有错误欢迎指正。箭头操作符(->)的... 阅读全文
posted @ 2015-02-02 17:03 Acg!Check 阅读(241) 评论(0) 推荐(0)
摘要: 目录(?)[+]Tab ControlList ControlTab ControlTCITEM tci;tci.mask = TCIF_TEXT;tci.pszText = TEXT("Tab1");TabCtrl_InsertItem(hTab, 0, &tci); // 其中0为第几个Tab页... 阅读全文
posted @ 2015-02-02 16:59 Acg!Check 阅读(482) 评论(0) 推荐(0)
摘要: 转自:http://www.cnblogs.com/coderlee/archive/2010/01/06/1640783.html使用列表控制的步骤如下:1. 调用CreateWindowEx函数来创建一个列表控件,指定它的类名为SysListView32。您还可以在此处指定控件初次显示... 阅读全文
posted @ 2015-02-02 16:58 Acg!Check 阅读(2214) 评论(0) 推荐(1)
摘要: 本文出自程序人生>>SysListView32控件响应鼠标单击消息作者:代码疯子SysListView32控件就是列表视图控件(MFC里面的CListCtrl就是对SysListView32进行的封装)。如果想知道用户选择了哪个元素,可以这么响应消息(注意,这里是Report风格): 1 // Co... 阅读全文
posted @ 2015-02-02 16:56 Acg!Check 阅读(910) 评论(0) 推荐(0)
摘要: 今天学习的时候发现SetWindowText设置编辑框的文本后光标位置不变,还是在开头,没到结尾,下面说个改变光标位置的方法SetWindowText后,用GetWindowTextLength或发送WM_GETTEXTLENGTH消息获取文本的长度(或先获得文本,然后再量长度),然后发送EM_SE... 阅读全文
posted @ 2015-02-02 16:50 Acg!Check 阅读(375) 评论(0) 推荐(0)
摘要: 今天用SendMessage(hwnd, WM_SETICON, ICON_BIG, hIcon );改图标的时候,看到点问题,记录下ICON_BIG大图标所说的是Alt+Tab后的显示图标ICON_SMALL小图标是标题栏的图标和任务栏里显示的图标如果没有设置小图标,那么以后只设大图标,Alt+T... 阅读全文
posted @ 2015-02-02 16:49 Acg!Check 阅读(687) 评论(0) 推荐(0)
摘要: ■ 数据访问时的权限check 一、 访问data segment时(ds、es、fs 及gs)1、 程序指令要访问数据时,data segment selector 被加载进 data segment register(ds、es、fs 和 gs)前,处理器会进行一系列的权限检查,通过了才能被加载... 阅读全文
posted @ 2015-02-02 16:48 Acg!Check 阅读(586) 评论(1) 推荐(0)
摘要: 一、 直接转移(far call及 far jmp)直接转移通过执行一条 call 或 jmp指令,在段内转移不需selector近跳转,段间转移通过selector(不带gate或 tss)远跳转,CPL不改变。权限检查的4个要素:★ CPL:当前运行级别(也就是CS.CPL)★ RPL:门符选择... 阅读全文
posted @ 2015-02-02 16:47 Acg!Check 阅读(351) 评论(0) 推荐(0)
摘要: 操作系统必须至少建立一个TSS,4个权限级别的堆栈结构(stack segment selector及stack pointer)必须被定义。一、 堆栈及栈指针的权限级别:★ 3 级:stack selector及stack pointer存储在SS寄存器及 ESP 寄存器中★ 0、1及2级:相应的... 阅读全文
posted @ 2015-02-02 16:46 Acg!Check 阅读(331) 评论(0) 推荐(0)
摘要: 一、页的三种保护措施:★ 两种权限保护:supervisor(0、1及2级)和user(3级)★ 两种访问限制:read-only 及 read/write★ PAE 下的 No Exceute 属性保护二、supervisor/user保护措施★ PDE/PTE 的 U/S域,0时:supervi... 阅读全文
posted @ 2015-02-02 16:45 Acg!Check 阅读(422) 评论(0) 推荐(0)
摘要: 看一个实际的例子: kd> unt!InitBootProcessor+0x3df:81b3a6de fec8 dec al81b3a6e0 f6d8 neg al81b3a6e2 bfe0df8f81 mov edi,offset nt!ExpBootEnvironmentIn... 阅读全文
posted @ 2015-02-02 16:44 Acg!Check 阅读(313) 评论(0) 推荐(0)
摘要: sub x,y ===> 以此为例一、用于符号数运算的标志: (OF、ZF、SF)1、 (OF = 0) &&(ZF = 0)&&(SF = 0)ZF =0 : 说明两个算术操作数不相等OF = 0 : 说明结果无溢出SF = 0 : 说明结果为正数-------------------------... 阅读全文
posted @ 2015-02-02 16:43 Acg!Check 阅读(346) 评论(0) 推荐(0)
摘要: 物理地址:linear address---->paging----> physical addressSO, 这里主要理解 paging 的来龙去脉。4.1、地址组成physical address = page's base address + offset这个页基址经过几级数据结构(page-... 阅读全文
posted @ 2015-02-02 16:42 Acg!Check 阅读(534) 评论(0) 推荐(0)
摘要: 用户程序 A 君,是某酒店公寓的新住户,该公寓有若干层,每层有若干寓所,还包括公用的日用百货仓库间,会所等公共设施,是一座自助式的电子化的公寓大厦。 这一天是用户程序 A 君,新入住公寓的日子,管理员 OS 交给了 A 君自己寓所的电子门匙,A 君要凭这条电子门匙在公寓的管理系统里找到自己的寓所。5... 阅读全文
posted @ 2015-02-02 16:39 Acg!Check 阅读(380) 评论(0) 推荐(0)
摘要: 使用 bochs 可以很容易很直观地观察调试系统。下面选取一个 xp 启动的实际片断,如下: sregcs:s=0x001b, dl=0x0000ffff, dh=0x00cffa00, valid=1ds:s=0x0023, dl=0x0000ffff, dl=0x00cff300, va... 阅读全文
posted @ 2015-02-02 16:37 Acg!Check 阅读(247) 评论(0) 推荐(0)
摘要: segment descriptors 构建保护模式下的最基本、最根本的执行环境。system descriptors 则构建保护模式下的核心组件:1、TSS descriptor 提供硬件级的进程切换机制 2、LDT descriptor 供进程使用多个 descriptor 3、Gate des... 阅读全文
posted @ 2015-02-02 16:36 Acg!Check 阅读(407) 评论(0) 推荐(0)
摘要: 1、gate descriptor 的 selector 给出目标代码的 code segment descriptor2、由目标代码 code segment descriptor 的 base address 得出代码的 base3、这个 base 加上 gate descriptor 的 of... 阅读全文
posted @ 2015-02-02 16:32 Acg!Check 阅读(429) 评论(0) 推荐(0)
摘要: 显然,GDT(global descriptor table)是系统与所有进程共用的。相对于 LDT(local descriptor table)则是进程独享的。GPRs、selector registers、stack pointers、eflags、LDT descriptor、CR3 构成了... 阅读全文
posted @ 2015-02-02 16:31 Acg!Check 阅读(273) 评论(0) 推荐(0)