亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? decompiler.cpp

?? 一個反匯編器源碼 一個反匯編器源碼
?? CPP
字號:
#include "stdafx.h"
#include <winsock.h>
#include "decompiler.h"

#pragma comment(lib,"wsock32")
CArray<Constant,Constant &> g_ConstTable;
CArray<Function,Function &> g_FuncTable;

char *ConstantType[] =
{
	"char8","short16","int32","float32","UTF-8_Str","\"\"","OtherCharsetStr"
};

static char tmp[128];

char * make_call_name(int lindex,int findex)
{
	static char buf[256];
	static char *lib_name[6] = {"Lang","Float","String","URL","WMLBrowser","Dialogs"};
	static char *lib_func_table[6][16] = 
	{
		{"abs","min","max","parseInt","parseFloat","isInt","isFloat","maxInt","minInt","float","exit","abort","random","seed","characterSet"},
		{"int","floor","ceil","pow","round","sqrt","maxFloat","minFloat","*","*","*","*","*","*","*"},
		{"length","isEmpty","charAt","subString","find","replace","elements","elementAt","removeAt","replaceAt","insertAt","squeeze","trim","compare","toString","format"},
		{"isValid","getScheme","getHost","getPort","getPath","getParameters","getQuery","getFragment","getBase","getReferer","resolve","escapeString","unescapeString","loadString","*","*"},
		{"getVer","setVer","go","prev","newContext","getCurrentCard","refresh","*","*","*","*","*","*","*","*","*"},
		{"prompt","confirm","alert","*","*","*","*","*","*","*","*","*","*","*","*","*"}
	};

	if(lindex == -1)	//local func
	{
		Function &f = g_FuncTable.ElementAt(findex);
		strcpy(buf,f.func_name);
	}
	else if(lindex < 6)
	{
		if(lib_func_table[lindex][findex][0] == '*')
		{
			throw "function not found";
		}
		sprintf(buf,"%s.%s()",lib_name[lindex],lib_func_table[lindex][findex]);
	}
	else
	{
		sprintf(buf,"lib_%d.func_%d()",lindex,findex);
	}
	return buf;
}

//local var's index >= arg_num
char *make_var_name(int vindex,int arg_num)
{
	static char buf[32];
	if(vindex >= arg_num)
	{
		sprintf(buf,"var_%d",vindex-arg_num);
	}
	else
	{
		sprintf(buf,"arg_%d",vindex);
	}
	return buf;
}

int JUMP_FW(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	int offset = data[1];
	sprintf(tmp,"JUMP_FW %04X",addr + 2 + offset);
	return 2;
}

int JUMP_FW_W(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	int offset = htons(*(unsigned short*)(data+1));
	sprintf(tmp,"JUMP_FW_W %04X",addr + 3 + offset);
	return 3;
}

int JUMP_BW(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	BYTE offset = data[1];
	sprintf(tmp,"JUMP_FW_W %04X",addr - offset);
	return 2;
}

int JUMP_BW_W(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	int offset = htons(*(unsigned short*)(data+1));
	sprintf(tmp,"JUMP_BW_W %04X",addr - offset);
	return 3;
}

int TJUMP_FW(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	BYTE offset = data[1];
	sprintf(tmp,"TJUMP_FW %04X",addr + 2 + offset);
	return 2;
}

int TJUMP_FW_W(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	int offset = htons(*(unsigned short*)(data+1));
	sprintf(tmp,"TJUMP_FW_W %04X",addr + 3 + offset);
	return 3;
}

int TJUMP_BW(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	BYTE offset = data[1];
	sprintf(tmp,"TJUMP_BW %04X",addr - offset);
	return 2;
}

int TJUMP_BW_W(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	int offset = htons(*(unsigned short*)(data+1));
	sprintf(tmp,"TJUMP_BW_W %04X",addr - offset);
	return 3;
}

int CALL(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	int findex = data[1];
	sprintf(tmp,"CALL %s",make_call_name(-1,findex));
	return 2;
}

int CALL_LIB(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	int findex = data[1];
	int lindex = data[2];
	sprintf(tmp,"CALL %s",make_call_name(lindex,findex));
	return 3;
}

int CALL_LIB_W(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	int findex = data[1];
	int lindex = htons(*(unsigned short *)(data+1));
	sprintf(tmp,"CALL %s",make_call_name(lindex,findex));
	return 4;
}

int CALL_URL(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	int url_index = data[1];
	BYTE findex = data[2];
	BYTE args = data[3];

	Constant c = g_ConstTable.ElementAt(url_index);

	sprintf(tmp,"CALL_URL con_%d.func_%d args_num=%d ;url=%s",url_index,findex,args,c.toStr);
	return 4;
}

int CALL_URL_W(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	int uindex = htons(*(unsigned short*)(data+1));
	int findex = htons(*(unsigned short*)(data+3));
	BYTE args = data[5];
	sprintf(tmp,"CALL_URL_W url_%d.func_%d argc_%d",addr,op_code,uindex,findex,args);
	return 6;
}

int LOAD_VAR(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	int vindex = data[1];
	sprintf(tmp,"LOAD_VAR %s",make_var_name(vindex,arg_num));
	return 2;
}

int STORE_VAR(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	int vindex = data[1];
	sprintf(tmp,"STORE_VAR %s",make_var_name(vindex,arg_num));
	return 2;
}

int INCR_VAR(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	int vindex = data[1];
	sprintf(tmp,"INCR_VAR %s",make_var_name(vindex,arg_num));
	return 2;
}

int DECR_VAR(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	int vindex = data[1];
	sprintf(tmp,"DECR_VAR %s",make_var_name(vindex,arg_num));
	return 2;
}

int LOAD_CONST(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	int cindex = data[1];
	Constant c = g_ConstTable.ElementAt(cindex);
	sprintf(tmp,"LOAD_CONST con_%d	;TYPE:%s,[%s]",cindex,ConstantType[c.type],c.toStr);
	return 2;
}

int LOAD_CONST_W(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	int cindex = htons(*(unsigned short *)(data+1));
	Constant c = g_ConstTable.ElementAt(cindex);
	sprintf(tmp,"LOAD_CONST_W con_%d  ;TYPE:%s,[%s]",cindex,ConstantType[c.type],c.toStr);
	return 3;
}

int ADD_ASG(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	BYTE vindex = data[1];
	sprintf(tmp,"ADD_ASG %s",make_var_name(vindex,arg_num));
	return 2;
}

int SUB_ASG(BYTE *data,int addr,int arg_num)
{
	BYTE op_code = data[0];
	BYTE vindex = data[1];
	sprintf(tmp,"SUB_ASG %s",make_var_name(vindex,arg_num));
	return 2;
}

Instruction InArray[] =
{
	{"",NULL},	//0
	{"JUMP_FW", JUMP_FW},	//1
	{"JUMP_FW_W", JUMP_FW_W},	//2
	{"JUMP_BW", JUMP_BW},	//3
	{"JUMP_BW_W", JUMP_BW_W},	//4
	{"TJUMP_FW", TJUMP_FW},	//5
	{"TJUMP_FW_W", TJUMP_FW_W},	//6
	{"TJUMP_BW", TJUMP_BW},	//7
	{"TJUMP_BW_W",TJUMP_BW_W},	//8
	{"CALL", CALL},	//9
	{"CALL_LIB", CALL_LIB},	//10
	{"CALL_LIB_W", CALL_LIB_W},	//11
	{"CALL_URL", CALL_URL},	//12
	{"CALL_URL_W", CALL_URL_W},	//13
	{"LOAD_VAR", LOAD_VAR},	//14
	{"STORE_VAR", STORE_VAR},	//15
	{"INCR_VAR", INCR_VAR},	//16
	{"DECR_VAR", DECR_VAR},	//17
	{"LOAD_CONST", LOAD_CONST},	//18
	{"LOAD_CONST_W",LOAD_CONST_W},	//19
	{"CONST_0",NULL},	//20
	{"CONST_1",NULL},	//21
	{"CONST_M1",NULL},	//22
	{"CONST_ES",NULL},	//23
	{"CONST_INVALID",NULL},	//24
	{"CONST_TRUE",NULL},	//25
	{"CONST_FALSE",NULL},	//26
	{"INCR",NULL},	//27
	{"DECR",NULL},	//28
	{"ADD_ASG",ADD_ASG},	//29
	{"SUB_ASG",SUB_ASG},	//30
	{"UMINUS",NULL},	//31
	{"ADD",NULL},	//32
	{"SUB",NULL},	//33
	{"MUL",NULL},	//34
	{"DIV",NULL},	//35
	{"IDIV",NULL},	//36
	{"REM",NULL},	//37
	{"B_AND",NULL},	//38
	{"B_OR",NULL},	//39
	{"B_XOR",NULL},	//40
	{"B_NOT",NULL},	//41
	{"B_LSHIFT",NULL},	//42
	{"B_RSSHIFT",NULL},	//43
	{"B_RSZSHIFT",NULL},	//44
	{"EQ",NULL},	//45
	{"LE",NULL},	//46
	{"LT",NULL},	//47
	{"GE",NULL},	//48
	{"GT",NULL},	//49
	{"NE",NULL},	//50
	{"NOT",NULL},	//51
	{"SCAND",NULL},	//52
	{"SCOR",NULL},	//53
	{"TOBOOL",NULL},//54
	{"POP",NULL},	//55
	{"TYPEOF",NULL},//56
	{"ISVALID",NULL},//57
	{"RETURN",NULL},//58
	{"RETURN_ES",NULL},//59
	{"DEBUG",NULL},	//60
};

int TransCode(BYTE *data,int addr,int arg_num)
{
	int i = 0;
	BYTE op_code = data[i++];
	if((op_code & 0x80) == 0x80)
	{
		//JUMP_FW_S/JUMP_BW_S/TJUMP_FW_S/LOAD_VAR_S
		if(
			(op_code & 0x80) == 0x80 && 
			(op_code & 0x60) == 0)	//JUMP_FW_S 100iiiii
		{
			int offset = (op_code & 0x1F);
			sprintf(tmp,"JUMP_FW_S %04X",addr + 1 + offset);
		}
		else if(
			(op_code & 0xA0) == 0xA0 &&
			(op_code & 0x40) == 0)	//JUMP_BW_S
		{
			int offset = (op_code & 0x1F);
			sprintf(tmp,"JUMP_BW_S %04X",addr + 1 + offset);
		}
		else if(
			(op_code & 0xC0) == 0xC0 &&
			(op_code & 0x20) == 0)	//TJUMP_FW_S
		{
			int offset = (op_code & 0x1F);
			sprintf(tmp,"TJUMP_FW_S %04X",addr + 1 + offset);
		}
		else if(
			(op_code & 0xE0) == 0xE0)	//LOAD_VAR_S
		{
			int vindex = (op_code & 0x1F);
			sprintf(tmp,"LOAD_VAR_S %s",make_var_name(vindex,arg_num));
		}
	}
	else if((op_code & 0x40) == 0x40 && (op_code & 0xA0)==0)
	{
		//STORE_VAR_S/LOAD_CONST_S
		if(
			(op_code & 0x40) == 0x40 &&
			(op_code & 0xB0) == 0)	//STORE_VAR_S
		{
			int vindex = (op_code & 0x0F);
			sprintf(tmp,"STORE_VAR_S %s",make_var_name(vindex,arg_num));
		}
		else if(
			(op_code & 0x40) == 0x40 &&
			(op_code & 0xA0) == 0)	//LOAD_CONST_S
		{
			int cindex = (op_code & 0x0F);
			Constant c = g_ConstTable.ElementAt(cindex);
			sprintf(tmp,"LOAD_CONST_S con_%d  ;TYPE:%s,[%s]",cindex,ConstantType[c.type],c.toStr);
		}
		else
		{
			ASSERT(FALSE);
		}
	}
	else if((op_code & 0x60) == 0x60)
	{
		//CALL_S/CALL_LIB_S/INCR_VAR_S
		if(
			(op_code & 0x60) == 0x60 &&
			(op_code & 0x98) == 0)	//CALL_S
		{
			int findex = (op_code & 0x07);
			sprintf(tmp,"CALL_S %s",make_call_name(-1,findex));
		}
		else if(
			(op_code & 0x68) == 0x68 &&
			(op_code & 0x90) == 0)	//CALL_LIB_S
		{
			int findex = (op_code & 0x07);
			int lindex = data[i++];
			sprintf(tmp,"CALL_LIB_S %s",make_call_name(lindex,findex));
		}
		else if(
			(op_code & 0x70) == 0x70 &&
			(op_code & 0x88) == 0)	//INCR_VAR_S
		{
			int vindex = (op_code & 0x07);
			sprintf(tmp,"INCR_VAR_S %s",make_var_name(vindex,arg_num));
		}
		else
		{
			ASSERT(FALSE);
		}
	}
	else
	{
		const ins_count = sizeof(InArray)/sizeof(InArray[0]);
		if(op_code >= ins_count)
		{
			return -1;
		}

		Instruction *ip = InArray + op_code;
		if(ip->parser == NULL)
		{
			sprintf(tmp,"%s",ip->ins_name);
		}
		else
		{
			int n = ip->parser(data,addr,arg_num);
			i = i + n - 1;
		}
	}

	return i;
}

unsigned int get_mb_uint(BYTE *data,int len,int &k)
{
	unsigned int r = 0;
	int i = 0;
	for(i=0;i<len;i++)
	{
		BYTE b = data[i];
		r = (r << 7) | (b & 0x7F);
		if( (b & 0x80)==0 )
		{
			break;
		}
	}

	k = k + i + 1;

	return r;
}

bool DeCompile(BYTE *bin_code,int len,CList<CString,CString&> &result)
{
	int i = 0;
	int k = 0;

	g_ConstTable.RemoveAll();

	//version
	BYTE ver = bin_code[k++];
	if(ver != 1)
	{
		return false;
	}
	//code_size
	unsigned int code_size = get_mb_uint(bin_code + k,4,k);

	///////////////////////////////////////////////
	//ConstantPool
	///////////////////////////////////////////////
	unsigned short cont_num = get_mb_uint(bin_code + k,2,k);
	unsigned short charset = get_mb_uint(bin_code + k,2,k);
	for(i=0;i<cont_num;i++)
	{
		Constant c;

		BYTE cons_type = bin_code[k++];
		c.type = cons_type;
		switch(cons_type)
		{
		case 0:	//char
			c.size = 1;
			c.toStr.Format("%d",bin_code[k]);
			break;
		case 1:	//short
			{
				c.size = 2;
				short v = htons(*(short *)(bin_code + k));
				c.toStr.Format("%d",v);
			}
			break;
		case 2:	//int
			{
				c.size = 4;
				int v = htonl(*(int *)(bin_code + k));
				c.toStr.Format("%d",v);
			}
			break;
		case 3:
			{
				c.size = 4;
				int tv = htonl(*(int *)(bin_code + k));
				float v = *(float*)&tv;
				c.toStr.Format("%f",v);
			}
			break;
		case 4:	//UTF-8
			{
				c.size = get_mb_uint(bin_code+k,4,k);
				for(unsigned j=0;j<c.size;j++)
				{
					CString uc;
					uc.Format("%c",bin_code[k+j]);
					c.toStr += uc;
				}
			}
			break;
		case 5:	//EMPTY STR
			c.size = 0;
			c.toStr = "EMPTY_STR";
			break;
		case 6:
			{
				c.size = get_mb_uint(bin_code+k,4,k);
				c.toStr = "...(can't display)";
			}
			break;
		default:
			return false;
			break;
		}

		k+=c.size;

		g_ConstTable.Add(c);
	}

	///////////////////////////////////////////////
	//PragmaPool
	///////////////////////////////////////////////
	BYTE prama_num = get_mb_uint(bin_code+k,2,k);
	for(i=0;i<prama_num;i++)
	{
		BYTE ptype = bin_code[k++];
		switch(ptype)
		{
		case 0://access domain
			{
				unsigned p_index = get_mb_uint(bin_code+k,2,k);
			}
			break;
		case 1:	//access path
			{
				unsigned p_index = get_mb_uint(bin_code+k,2,k);
			}
			break;
		case 2:
			{
				unsigned prop_name_index = get_mb_uint(bin_code+k,2,k);
				unsigned content_index = get_mb_uint(bin_code+k,2,k);
			}
			break;
		case 3:
			{
				unsigned prop_name_index = get_mb_uint(bin_code+k,2,k);
				unsigned content_index = get_mb_uint(bin_code+k,2,k);
				unsigned scheme_index = get_mb_uint(bin_code+k,2,k);
			}
			break;
		default:
			return false;
		}
	}

	///////////////////////////////////////////////
	//FunctionPool
	///////////////////////////////////////////////
	g_FuncTable.RemoveAll();

	BYTE func_num = bin_code[k++];

	int num_func_names = bin_code[k++];
	
	for(int j=0;j<num_func_names;j++)
	{
		Function f;
		f.findex = bin_code[k++];
		int func_name_size = bin_code[k++];
		CString uc;
		for(int m=0;m<func_name_size;m++)
		{
			uc.Format("%c",bin_code[k++]);
			f.func_name += uc;
		}

		g_FuncTable.Add(f);
	}

	for(i=0;i<g_FuncTable.GetSize();i++)
	{
		Function &f = g_FuncTable.ElementAt(i);

		f.arg_num = bin_code[k++];
		f.lvar_num = bin_code[k++];
		f.func_size = get_mb_uint(bin_code+k,4,k);
		f.CodeArray = new BYTE[f.func_size];
		memcpy(f.CodeArray,bin_code+k,f.func_size);
		k+=f.func_size;
	}

	for(int f=0;f<g_FuncTable.GetSize();f++)
	{
		CString str,arg_str,local_var_str = "var ";
		Function func = g_FuncTable.ElementAt(f);
		for(int j=0;j<func.arg_num;j++)
		{
			CString arg;
			arg.Format("arg_%d",j);
			if(j != func.arg_num-1)
			{
				arg += ",";
			}
			arg_str += arg;
		}

		for(j=0;j<func.lvar_num;j++)
		{
			CString lvar;
			lvar.Format("var_%d",j);
			if(j != func.lvar_num-1)
			{
				lvar += ",";
			}
			else
			{
				lvar += ";";
			}
			local_var_str += lvar;
		}

		str.Format("function %s(%s)",func.func_name,arg_str);
		result.AddTail(str);
		if(local_var_str.GetLength() > 4)
		{
			result.AddTail(local_var_str);
		}

		i = 0;
		while(i < (int)func.func_size)
		{
			int n = TransCode(func.CodeArray + i, i,func.arg_num);
			if(n < 0)
			{
				return false;
			}

			CString code;

			CString byte_code;
			for(int j=0;j<n;j++)
			{
				char tmp_str[128];
				sprintf(tmp_str,"%02X",func.CodeArray[i + j]);
				if(j != n-1)
				{
					strcat(tmp_str," ");
				}
				byte_code += tmp_str;
			}

			code.Format("%04X    %-12s    %s",i,byte_code, tmp);
			result.AddTail(code);

			i += n;
		}
	}

	return true;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品自拍毛片| 麻豆一区二区三| 色先锋久久av资源部| 国产精品系列在线| eeuss国产一区二区三区| 欧美激情一区二区三区全黄| 粉嫩av一区二区三区粉嫩| 国产精品天天看| 色综合欧美在线视频区| 亚洲高清不卡在线观看| 欧美一区三区四区| 精久久久久久久久久久| 26uuu国产电影一区二区| 国产成人av一区| 亚洲欧美影音先锋| 欧美日韩一区二区不卡| 日本中文字幕一区| 久久久五月婷婷| 成人av资源网站| 亚洲午夜在线观看视频在线| 制服丝袜成人动漫| 国产精品一区二区x88av| 国产精品久久久久7777按摩| 欧美系列一区二区| 狠狠色综合播放一区二区| 国产精品日韩成人| 欧美高清你懂得| 国产成人精品免费视频网站| 亚洲综合在线观看视频| 日韩一二在线观看| 9i在线看片成人免费| 亚洲va韩国va欧美va| 久久亚洲一区二区三区四区| 99久精品国产| 久久er精品视频| 亚洲欧美日韩国产一区二区三区| 欧美精品日韩综合在线| 国产精品一区专区| 亚洲一级电影视频| 久久久av毛片精品| 欧美人与禽zozo性伦| 成人午夜在线免费| 免费看欧美美女黄的网站| 国产精品乱码人人做人人爱| 7777精品伊人久久久大香线蕉最新版| 国内久久精品视频| 五月激情综合色| 亚洲欧洲精品一区二区三区 | 欧美精品一区二区三区蜜桃视频 | 玖玖九九国产精品| 亚洲精品日日夜夜| 国产精品网友自拍| 欧美精品一区二区三区久久久| 在线观看91视频| 成人免费的视频| 久久99久久精品| 日本vs亚洲vs韩国一区三区二区 | 国产aⅴ综合色| 毛片av一区二区三区| 亚洲美女视频一区| 久久嫩草精品久久久精品一| 94色蜜桃网一区二区三区| 久久精品国产免费| 日韩一区二区三区免费观看| 成人一区二区视频| 久久国产生活片100| 亚洲乱码日产精品bd| 久久日一线二线三线suv| 欧美日韩一级黄| www.亚洲在线| 国产一区二区在线观看视频| 亚洲不卡一区二区三区| 国产精品天美传媒沈樵| 在线播放中文一区| 欧美日本在线一区| 91偷拍与自偷拍精品| 国产在线不卡视频| 日韩二区三区在线观看| 一区二区三区日韩欧美精品| 国产精品乱码妇女bbbb| 26uuu国产日韩综合| 日韩午夜精品视频| 91成人免费在线| 欧美午夜电影网| 一本到三区不卡视频| 国产69精品久久777的优势| 久久99国产精品免费| 日本少妇一区二区| 无码av免费一区二区三区试看| 一区二区三区欧美亚洲| 综合激情成人伊人| 久久久不卡网国产精品一区| 国产精品美女久久久久久久 | 亚洲综合色在线| 综合色中文字幕| 久久婷婷色综合| 日韩精品专区在线影院重磅| 欧美丰满少妇xxxxx高潮对白| 欧美日韩国产中文| 在线看不卡av| 一道本成人在线| 91精品福利在线| 欧美日韩午夜影院| 欧美区视频在线观看| 欧美日韩免费观看一区二区三区| 在线亚洲人成电影网站色www| 99久久精品费精品国产一区二区| 成人av网址在线观看| av动漫一区二区| 国产一区二区三区香蕉| 99久久精品国产一区| 粉嫩久久99精品久久久久久夜| 国产剧情一区二区| 高清在线成人网| 91在线你懂得| 色狠狠一区二区三区香蕉| 成人18视频在线播放| 欧美日韩精品一区二区三区四区| 欧美高清视频不卡网| 欧美r级在线观看| 欧美精彩视频一区二区三区| 中文字幕一区在线| 亚洲成av人片| 亚洲成av人片| 日本成人中文字幕在线视频 | 在线精品亚洲一区二区不卡| 欧美日韩黄色影视| 欧美精品一区二区三区一线天视频| 国产欧美日产一区| 国产精品久久二区二区| 免费在线观看成人| 不卡视频免费播放| 欧美欧美午夜aⅴ在线观看| 91精品国产一区二区| 亚洲国产精品av| 亚洲成人黄色小说| 国内久久精品视频| 欧美日韩综合色| 久久久久久99久久久精品网站| 国产精品视频一二三区| 捆绑变态av一区二区三区| 成人高清免费观看| 欧美日韩午夜影院| 国产精品视频一区二区三区不卡| 亚洲一区成人在线| 国产成人免费网站| 欧美日韩免费不卡视频一区二区三区| 国产人久久人人人人爽| 亚洲国产aⅴ成人精品无吗| 国内精品视频一区二区三区八戒| 一本大道久久精品懂色aⅴ| 日韩欧美高清在线| 尤物在线观看一区| 国产伦精品一区二区三区视频青涩| 99久久99久久精品国产片果冻| 日韩一级欧美一级| 亚洲欧美一区二区三区极速播放 | www.综合网.com| 日韩欧美中文字幕精品| 一区二区三区毛片| 国产成人精品亚洲777人妖| 欧美三级视频在线| 亚洲成人动漫精品| 91视频.com| 国产精品午夜在线观看| 国产自产2019最新不卡| 欧美精品在线一区二区三区| 中文字幕亚洲成人| 国产成人一级电影| 日韩欧美激情在线| 麻豆视频一区二区| 欧美日韩国产成人在线91| 自拍偷在线精品自拍偷无码专区 | 99久久精品免费| 国产欧美日韩另类视频免费观看| 美女精品自拍一二三四| 欧美三级在线视频| 亚洲成a人片综合在线| 99久久99久久久精品齐齐| 尤物在线观看一区| 91年精品国产| 欧美日韩一区中文字幕| 国产午夜精品一区二区三区嫩草 | 久久综合久久综合亚洲| 久久久久久黄色| 一区二区欧美在线观看| 奇米精品一区二区三区在线观看| 国产精品一卡二| 欧美日韩二区三区| 国产日韩成人精品| 日韩av电影天堂| a美女胸又www黄视频久久| 日韩欧美国产一二三区| 一区二区三区四区激情| 日韩高清不卡一区二区三区| 欧美三级蜜桃2在线观看| 国产精品欧美精品| 极品少妇xxxx精品少妇| 欧美日韩精品免费| 亚洲欧美激情在线|