re的刷题1

day51 9.16

[watevrCTF2019]Repyc

uncompyle6 -o 3nohtyp.py 3nohtyp.pyc

乱码

佤 = 0
侰 = ~佤 * ~佤
俴 = 侰 + 侰

def 䯂(䵦):
    굴 = 佤
    굿 = 佤
    괠 = [佤] * 俴 ** (俴 * 俴)
    궓 = [佤] * 100
    괣 = []

运行

D:\re\[watevrCTF2019]Repyc>python3 3nohtyp.py
Authentication token: 123
Thanks.

python3可以有非ascii字符

替换

# uncompyle6 version 3.7.1
# Python bytecode 3.6 (3379)
# Decompiled from: Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)]
# Embedded file name: circ.py
# Compiled at: 2019-12-14 02:29:55
# Size of source mod 2**32: 5146 bytes
g1 = 0
g2 = ~g1 * ~g1
g3 = g2 + g2

def fun1(p):
    l1 = g1
    l2 = g1
    l3 = [g1] * g3 ** (g3 * g3)
    l4 = [g1] * 100
    l5 = []
    while p[l1][g1] != '1':
        a = p[l1][g1].lower()
        b = p[l1][g2:]
        if a == '2':
            l3[b[g1]] = l3[b[g2]] + l3[b[g3]]
        else:
            if a == '3':
                l3[b[g1]] = l3[b[g2]] ^ l3[b[g3]]
            else:
                if a == '4':
                    l3[b[g1]] = l3[b[g2]] - l3[b[g3]]
                else:
                    if a == '5':
                        l3[b[g1]] = l3[b[g2]] * l3[b[g3]]
                    else:
                        if a == '6':
                            l3[b[g1]] = l3[b[g2]] / l3[b[g3]]
                        else:
                            if a == '7':
                                l3[b[g1]] = l3[b[g2]] & l3[b[g3]]
                            else:
                                if a == '8':
                                    l3[b[g1]] = l3[b[g2]] | l3[b[g3]]
                                else:
                                    if a == '9':
                                        l3[b[g1]] = l3[b[g1]]
                                    else:
                                        if a == '10':
                                            l3[b[g1]] = l3[b[g2]]
                                        else:
                                            if a == '11':
                                                l3[b[g1]] = b[g2]
                                            else:
                                                if a == '12':
                                                    l4[b[g1]] = l3[b[g2]]
                                                else:
                                                    if a == '13':
                                                        l3[b[g1]] = l4[b[g2]]
                                                    else:
                                                        if a == '14':
                                                            l3[b[g1]] = g1
                                                        else:
                                                            if a == '15':
                                                                l4[b[g1]] = g1
                                                            else:
                                                                if a == '16':
                                                                    l3[b[g1]] = input(l3[b[g2]])
                                                                else:
                                                                    if a == '17':
                                                                        l4[b[g1]] = input(l3[b[g2]])
                                                                    else:
                                                                        if a == '18':
                                                                            print(l3[b[g1]])
                                                                        else:
                                                                            if a == '19':
                                                                                print(l4[b[g1]])
                                                                            else:
                                                                                if a == '20':
                                                                                    l1 = l3[b[g1]]
                                                                                else:
                                                                                    if a == '21':
                                                                                        l1 = l4[b[g1]]
                                                                                    else:
                                                                                        if a == '22':
                                                                                            l1 = l5.pop()
                                                                                        else:
                                                                                            if a == '23':
                                                                                                if l3[b[g2]] > l3[b[g3]]:
                                                                                                    l1 = b[g1]
                                                                                                    l5.append(l1)
                                                                                                    continue
                                                                                            else:
                                                                                                if a == '24':
                                                                                                    l3[7] = g1
                                                                                                    for i in range(len(l3[b[g1]])):
                                                                                                        if l3[b[g1]] != l3[b[g2]]:
                                                                                                            l3[7] = g2
                                                                                                            l1 = l3[b[g3]]
                                                                                                            l5.append(l1)

                                                                                                else:
                                                                                                    if a == '25':
                                                                                                        string = ''
                                                                                                        for i in range(len(l3[b[g1]])):
                                                                                                            string += chr(ord(l3[b[g1]][i]) ^ l3[b[g2]])

                                                                                                        l3[b[g1]] = string
                                                                                                    else:
                                                                                                        if a == '26':
                                                                                                            string = ''
                                                                                                            for i in range(len(l3[b[g1]])):
                                                                                                                string += chr(ord(l3[b[g1]][i]) - l3[b[g2]])

                                                                                                            l3[b[g1]] = string
                                                                                                        else:
                                                                                                            if a == '27':
                                                                                                                if l3[b[g2]] > l3[b[g3]]:
                                                                                                                    l1 = l3[b[g1]]
                                                                                                                    l5.append(l1)
                                                                                                                    continue
                                                                                                            else:
                                                                                                                if a == '28':
                                                                                                                    if l3[b[g2]] > l3[b[g3]]:
                                                                                                                        l1 = l4[b[g1]]
                                                                                                                        l5.append(l1)
                                                                                                                        continue
                                                                                                                else:
                                                                                                                    if a == '29':
                                                                                                                        if l3[b[g2]] == l3[b[g3]]:
                                                                                                                            l1 = b[g1]
                                                                                                                            l5.append(l1)
                                                                                                                            continue
                                                                                                                    else:
                                                                                                                        if a == '30':
                                                                                                                            if l3[b[g2]] == l3[b[g3]]:
                                                                                                                                l1 = l3[b[g1]]
                                                                                                                                l5.append(l1)
                                                                                                                                continue
                                                                                                                        else:
                                                                                                                            if a == '31':
                                                                                                                                if l3[b[g2]] == l3[b[g3]]:
                                                                                                                                    l1 = l4[b[g1]]
                                                                                                                                    l5.append(l1)
                                                                                                                                    continue
        l1 += g2


fun1([
 [
  '11', g1, 'Authentication token: '],
 [
  '17', g1, g1],
 [
  '11', 6, 'á×äÓâæíäàßåÉÛãåäÉÖÓÉäàÓÉÖÓåäÉÓÚÕæïèäßÙÚÉÛÓäàÙÔÉÓâæÉàÓÚÕÓÒÙæäàÉäàßåÉßåÉäàÓÉÚÓáÉ·Ôâ×ÚÕÓÔɳÚÕæïèäßÙÚÉÅä×ÚÔ׿ÔÉ×Úïá×ïåÉßÉÔÙÚäÉæÓ×ÜÜïÉà×âÓÉ×ÉÑÙÙÔÉâßÔÉÖãäÉßÉæÓ×ÜÜïÉÓÚÞÙïÉäàßåÉåÙÚÑÉßÉàÙèÓÉïÙãÉáßÜÜÉÓÚÞÙïÉßäÉ×åáÓÜÜ\x97ÉïÙãäãÖÓ\x9aÕÙÛ\x99á×äÕà©â«³£ï²ÕÔÈ·±â¨ë'],
 [
  '11', g3, g3 ** (3 * g3 + g2) - g3 ** (g3 + g2)],
 [
  '11', 4, 15],
 [
  '11', 3, g2],
 [
  '5', g3, g3, 3],
 [
  '2', g3, g3, 4],
 [
  '9', g1, g3],
 [
  '14', 3],
 [
  '25', 6, 3],
 [
  '11', g1, 'Thanks.'],
 [
  '11', g2, 'Authorizing access...'],
 [
  '18', g1],
 [
  '13', g1, g1],
 [
  '25', g1, g3],
 [
  '26', g1, 4],
 [
  '11', 5, 19],
 [
  '24', g1, 6, 5],
 [
  '18', g2],
 [
  '1'],
 [
  '11', g2, 'Access denied!'],
 [
  '18', g2],
 [
  '1']])

芜湖!

化简

    while p[l1][g1] != '1':
        a = p[l1][g1].lower()
        b = p[l1][g2:]
        if a == '2':
            l3[b[g1]] = l3[b[g2]] + l3[b[g3]]
        
		if a == '5':
			l3[b[g1]] = l3[b[g2]] * l3[b[g3]]
		if a == '9':
			l3[b[g1]] = l3[b[g1]]
		if a == '11':
			l3[b[g1]] = b[g2]
		if a == '13':
			l3[b[g1]] = l4[b[g2]]
		if a == '14':
			l3[b[g1]] = g1
		if a == '17':
			l4[b[g1]] = input(l3[b[g2]])
		if a == '18':
			print(l3[b[g1]])
		if l3[b[g2]] > l3[b[g3]]:
			l1 = b[g1]
			l5.append(l1)
			continue
		if a == '24':
			l3[7] = g1
			for i in range(len(l3[b[g1]])):
			if l3[b[g1]] != l3[b[g2]]:
				l3[7] = g2
				l1 = l3[b[g3]]
				l5.append(l1)
		if a == '25':
			string = ''
			for i in range(len(l3[b[g1]])):
				string += chr(ord(l3[b[g1]][i]) ^ l3[b[g2]])
			l3[b[g1]] = string
		if a == '26':
			string = ''
			for i in range(len(l3[b[g1]])):
				string += chr(ord(l3[b[g1]][i]) - l3[b[g2]])
			l3[b[g1]] = string
			if l3[b[g2]] == l3[b[g3]]:
				l1 = l4[b[g1]]
				l5.append(l1)
			continue
        l1 += g2

简单的加减和异或

flag=''
enflag='á×äÓâæíäàßåÉÛãåäÉÖÓÉäàÓÉÖÓåäÉÓÚÕæïèäßÙÚÉÛÓäàÙÔÉÓâæÉàÓÚÕÓÒÙæäàÉäàßåÉßåÉäàÓÉÚÓáÉ·Ôâ×ÚÕÓÔɳÚÕæïèäßÙÚÉÅä×ÚÔ׿ÔÉ×Úïá×ïåÉßÉÔÙÚäÉæÓ×ÜÜïÉà×âÓÉ×ÉÑÙÙÔÉâßÔÉÖãäÉßÉæÓ×ÜÜïÉÓÚÞÙïÉäàßåÉåÙÚÑÉßÉàÙèÓÉïÙãÉáßÜÜÉÓÚÞÙïÉßäÉ×åáÓÜÜ\x97ÉïÙãäãÖÓ\x9aÕÙÛ\x99á×äÕà©â«³£ï²ÕÔÈ·±â¨ë'
for i in enflag:
    flag+=chr((ord(i)+15)^135)
print(flag)

flag:

watevr{this_must_be_the_best_encryption_method_evr_henceforth_this_is_the_new_Advanced_Encryption_Standard_anyways_i_dont_really_have_a_good_vid_but_i_really_enjoy_this_song_i_hope_you_will_enjoy_it_aswell!_youtube.com/watch?v=E5yFcdPAGv0}
typedef struct {
    PyObject_HEAD
    int co_argcount;        /* 位置参数个数 */
    int co_nlocals;         /* 局部变量个数 */
    int co_stacksize;       /* 栈大小 */
    int co_flags;   
    PyObject *co_code;      /* 字节码指令序列 */
    PyObject *co_consts;    /* 所有常量集合 */
    PyObject *co_names;     /* 所有符号名称集合 */
    PyObject *co_varnames;  /* 局部变量名称集合 */
    PyObject *co_freevars;  /* 闭包用的的变量名集合 */
    PyObject *co_cellvars;  /* 内部嵌套函数引用的变量名集合 */
    /* The rest doesn’t count for hash/cmp */
    PyObject *co_filename;  /* 代码所在文件名 */
    PyObject *co_name;      /* 模块名|函数名|类名 */
    int co_firstlineno;     /* 代码块在文件中的起始行号 */
    PyObject *co_lnotab;    /* 字节码指令和行号的对应关系 */
    void *co_zombieframe;   /* for optimization only (see frameobject.c) */
} PyCodeObject;

pyc文件头部:前4个字节:03f3 0d0a,表示python版本

day52 9.19

[De1CTF2019]Re_Sign

upx壳,upx -d 不行,esp手动脱壳,注意修复一下程序的输入表

通过success定位到sub_401000

sub_402BA0中

ReadConsoleA:从控制台缓冲区中读取输入字符

day53 9.27

[HDCTF2019]MFC

MFC (微软基础类库)
微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

xspy看一下

0kDNo4.png

看到OnMsg

发送消息

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

int main()
{
	HWND h = FindWindowA(NULL, "Flag就在控件里");
	if (h)
	{
		SendMessage(h, 0x464, NULL, NULL);
	}
	else{
		printf("false");
	}

	system("pause");
	return 0;
}

0kD5lt.png

句柄里944c8d100f82f0c18b682f63e4dbaa207a2f1e72581c2f1b应该就是密文,密钥为{I am a Des key}

0ksax1.png

day54 10.7

[GXYCTF2019]minecraft

Recently i learned a method of string to number ,using boost hash< std::string > .Can you figure it out?
PLZ input the flag:

找字符串,改名字

  scanf(&flag);
  LODWORD(v0) = printf(
                  printf_kj,
                  "Recently i learned a method of string to number ,using boost  hash<std::string> .Can you figure it out?");
  printff(v0, sub_1400042A0);
  LODWORD(v1) = printf(printf_kj, "PLZ input the flag:");
  printff(v1, sub_1400042A0);
  sub_1400042F0(&qword_14003D4A0, &flag);
  if ( length(&flag) > 0x20 || length(&flag) < 5 )
  {
    printf(printf_kj, "SORRY,your flag is obviously not correct");
    exit(0);
  }
  if ( String_to_long(&flag) != 1 )
  {
    LODWORD(v4) = printf(printf_kj, "Your flag is not correct,try again!");
    printff(v4, sub_1400042A0);
    system("pause");
    exit(0);
  }
  LODWORD(v2) = printf(printf_kj, "well done! This is flag:");

整个程序就是要注意String_to_long,去dll找String_to_long

额,,,

动调试试

0123456789abcdefghij

signed __int64 __fastcall sub_40002D30(signed __int64 *a1, __int64 a2)
{
  signed __int64 result; // rax

  *a1 ^= 0xC6A4A7935BD1E995i64 * (((unsigned __int64)(0xC6A4A7935BD1E995i64 * a2) >> 47) ^ 0xC6A4A7935BD1E995i64 * a2);
  *a1 *= 0xC6A4A7935BD1E995i64;
  result = *a1 + 0xE6546B64i64;
  *a1 = result;
  return result;
}

通过函数中的值找到

https://zjhdc.com/back/other/consistency-hash.html#简介

MurmurHash算法:高运算性能,低碰撞率,由Austin Appleby创建于2008年,现已应用到Hadoop、libstdc++、nginx、libmemcached等开源系统。2011年Appleby被Google雇佣,随后Google推出其变种的CityHash算法。

官方网站:https://sites.google.com/site/murmurhash/

MurmurHash算法,自称超级快的hash算法,是FNV的4-5倍。

	public static long hash64A(ByteBuffer buf, int seed) {
		ByteOrder byteOrder = buf.order();
		buf.order(ByteOrder.LITTLE_ENDIAN);

		long m = 0xc6a4a7935bd1e995L;
		int r = 47;

		long h = seed ^ (buf.remaining() * m);

		long k;
		while (buf.remaining() >= 8) {
			k = buf.getLong();

			k *= m;
			k ^= k >>> r;
			k *= m;

			h ^= k;
			h *= m;
		}

		if (buf.remaining() > 0) {
			ByteBuffer finish = ByteBuffer.allocate(8).order(ByteOrder.LITTLE_ENDIAN);
			// for big-endian version, do this first:
			// finish.position(8-buf.remaining());
			finish.put(buf).rewind();
			h ^= finish.getLong();
			h *= m;
		}

		h ^= h >>> r;
		h *= m;
		h ^= h >>> r;

		buf.order(byteOrder);
		return h;
	}

python有溢出,开始写的是hash 4字符,但是不对,看了wp后知道逐字符hash。

https://www.cnblogs.com/lxy8584099/p/13725754.html

#include <cstdio>

unsigned int goal[10] = {0x6C43B2A7,0x7954FD91,0xA3E9532,0xB87B5156,0xDA847742,0x2395E7F3,0xA679D954,0xE1FAAFF7};
unsigned int flag[10];
char table[100];
using namespace std;
int main()
{
    int num = 0;
    for(int i='a';i<='z';i++)
    {
        table[num++] = i;
    }
    for(int i='A';i<='Z';i++)
    {
        table[num++] = i;
    }
    for(int i='0';i<='9';i++)
    {
        table[num++] = i;
    }
    table[num++] = '{';
    table[num++] = '}';
    table[num++] = '_';
    table[num++] = '-';
    for(int i=0;i<8;i++)
    {
        bool vis = 1;
        for(int n1=0;n1<num&&vis;n1++)
            for(int n2=0;n2<num&&vis;n2++)
                for(int n3=0;n3<num&&vis;n3++)
                    for(int n4=0;n4<num&&vis;n4++)
                    {
                        unsigned long long res = 0;
                        res ^= 0xC6A4A7935BD1E995LL * (((unsigned long long)(0xC6A4A7935BD1E995LL * table[n1]) >> 47) ^ 0xC6A4A7935BD1E995LL * table[n1]);
                        res *= 0xC6A4A7935BD1E995LL;
                        res += 0xE6546B64;
                        
                        res ^= 0xC6A4A7935BD1E995LL * (((unsigned long long)(0xC6A4A7935BD1E995LL * table[n2]) >> 47) ^ 0xC6A4A7935BD1E995LL * table[n2]);
                        res *= 0xC6A4A7935BD1E995LL;
                        res += 0xE6546B64;
                        
                        res ^= 0xC6A4A7935BD1E995LL * (((unsigned long long)(0xC6A4A7935BD1E995LL * table[n3]) >> 47) ^ 0xC6A4A7935BD1E995LL * table[n3]);
                        res *= 0xC6A4A7935BD1E995LL;
                        res += 0xE6546B64;
                        
                        res ^= 0xC6A4A7935BD1E995LL * (((unsigned long long)(0xC6A4A7935BD1E995LL * table[n4]) >> 47) ^ 0xC6A4A7935BD1E995LL * table[n4]);
                        res *= 0xC6A4A7935BD1E995LL;
                        res += 0xE6546B64;
                        unsigned int res2 = (int)res;
                        if(res2 == goal[i])
                        {
                            vis = 0;
                            //printf("%d\n",i);
                            printf("%c%c%c%c",table[n1],table[n2],table[n3],table[n4]);
                        }
                    }
    }
    return 0;
}
/*

*a1 ^= 0xC6A4A7935BD1E995i64 * (((unsigned __int64)(0xC6A4A7935BD1E995i64 * a2) >> 47) ^ 0xC6A4A7935BD1E995i64 * a2);
  *a1 *= 0xC6A4A7935BD1E995i64;
  result = *a1 + 0xE6546B64i64;
  *a1 = result;

*/

malware

day55 10.25

最近大了很多比赛,涨了见识tcl

互联网工业比赛

RE_hardxsd

mips,ghidra反编译,脚本findtext查找flag

湖湘杯

easyre

ida打开找不到check函数。只有一个判断长度。

与 flag[0] & 0xE0

image-20201108232104966

循环0x17

image-20201108235044749

循环结构体

image-20201108235654542

实现

for i in range(0x17):
	a = shl flag[i],0x3
	b = sar flag[i+1],0x5
	c = (a|b)&0xff
	flag[i] = c^i

image-20201109001032956

实现上个循环,但是没有flag[0x18],用 flag[17]、flag[0] & 0xE0

image-20201109002106796

check

image-20201109002624530

祥云杯

apk1

  1. 找到check

![image-20201129160554510](/Users/aris/Library/Application Support/typora-user-images/image-20201129160554510.png)

JNI,Java Native Interface

凡是一种语言,都希望是纯。比如解决某一个方案都喜欢就单单这个语言来写即可。Java平台有个用户和本地C代码进行互操作的API,称为Java Native Interface (Java本地接口)。

  1. 找native-lib

image-20201129161033390

​ ida 32位

  1. 找到可能的check函数,里面有一个可疑的函数
sub_7724((int)"Y29tL3Rlc3QvdGhpcmQvTWFpbkFjdGl2aXR5", (int)&v4);
signed int __fastcall sub_7724(int a1, int a2)
{
  int v2; // r5
  int v3; // r4
  int v4; // r0
  int i; // r1
  signed int result; // r0
  _BYTE *v7; // r1
  unsigned __int8 *v8; // r2
  int v9; // r4
  int v10; // r5

  v2 = a2;
  v3 = a1;
  v4 = sub_74F0();
  for ( i = 0; i < v4; ++i )
  {
    if ( *(_BYTE *)(v3 + i) == 42 )
      v4 = i;
  }
  if ( v4 % 4 == 1 )
    return 2;
  v7 = (_BYTE *)(v2 + 2);
  v8 = (unsigned __int8 *)(v3 + 1);
  while ( v4 >= 4 )
  {
    v4 -= 4;
    *(v7 - 2) = (byte_14BA8[*v8] >> 4) & 3 | 4 * byte_14BA8[*(v8 - 1)];
    *(v7 - 1) = (byte_14BA8[v8[1]] >> 2) & 0xF | 16 * byte_14BA8[*v8];
    v9 = v8[1];
    v10 = v8[2];
    v8 += 4;
    *v7 = byte_14BA8[v10] | (byte_14BA8[v9] << 6);
    v7 += 3;
  }
  if ( v4 < 2 )
  {
    v7 -= 2;
  }
  else
  {
    *(v7 - 2) = (byte_14BA8[*v8] >> 4) & 3 | 4 * byte_14BA8[*(v8 - 1)];
    if ( v4 == 2 )
      --v7;
    else
      *(v7 - 1) = (byte_14BA8[v8[1]] >> 2) & 0xF | 16 * byte_14BA8[*v8];
  }
  result = 0;
  *v7 = 0;
  return result;
}

​ 感觉是一种固定加密方式,其中byte_14BA8

image-20201129161833230

​ 当时没有查到,断了。

  1. 回头看check的引用

image-20201129163750009

sub_82e4

int __fastcall sub_82E4(int a1)
{
  _BOOL4 v1; // r5
  int v2; // r4
  char *v3; // r6
  void *v4; // r8
  int v5; // r6
  int v6; // r6
  __int64 v7; // r0
  int v8; // r2
  int v9; // r3
  int result; // r0
  char v11; // [sp+1h] [bp-4Fh]
  char v12[8]; // [sp+6h] [bp-4Ah]
  char v13; // [sp+Eh] [bp-42h]
  char dest; // [sp+17h] [bp-39h]
  char v15; // [sp+20h] [bp-30h]
  int v16; // [sp+34h] [bp-1Ch]

  v1 = 0;
  v2 = (*(int (**)(void))(*(_DWORD *)a1 + 676))();
  if ( sub_74F0(v2) == 22 )
  {
    v1 = 0;
    sub_77E8(&v11, v2, 0, 4);
    if ( *(_BYTE *)(v2 + 4) == '{' )
    {
      sub_77E8(&v15, v2, 5, 21);
      v3 = (char *)malloc(8u);
      *((_DWORD *)v3 + 1) = 0;
      *(_DWORD *)v3 = 0;
      if ( sub_7826(&v15, v3, 8) != -1 )
      {
        v4 = (void *)operator new(1u);
        strcpy(&dest, v3);
        v5 = -1;
        do
          ++v5;
        while ( v5 < sub_74F0((int)&dest) );
        sub_799C(v4, &v11, &dest);
        v6 = -1;
        do
          ++v6;
        while ( v6 < sub_74F0((int)&dest) );
        operator delete(v4);
        sub_7894(&v11, &v13);
        sub_8294(v12, &v13, &dest);
        v7 = 0LL;
        v8 = 0;
        while ( v8 != 8 )
        {
          v9 = (unsigned __int8)v12[v8];
          LODWORD(v7) = ((_DWORD)v7 << 8) | (HIDWORD(v7) >> 24);
          ++v8;
          HIDWORD(v7) = v9 | (HIDWORD(v7) << 8);
        }
        if ( v7 == 0x41316EEA99EDA1D9LL )
          v1 = *(unsigned __int8 *)(v2 + 21) == '}';
        else
          v1 = 0;
      }
    }
  }
  result = _stack_chk_guard - v16;
  if ( _stack_chk_guard == v16 )
    result = v1;
  return result;
}

sub_74F0判断长度

sub_77E8(a,b,c,d) a=b的c到d位

*ctf2021

stream

安装Rust开发环境

Rust中的rng中rand_chacha是通过流密码实现

posted @ 2021-04-27 23:59  best0st  阅读(315)  评论(0)    收藏  举报