欧美日韩亚-欧美日韩亚州在线-欧美日韩亚洲-欧美日韩亚洲第一区-欧美日韩亚洲二区在线-欧美日韩亚洲高清精品

金喜正规买球

加密解密軟件VMProtect教程:將許可制度集成到應(yīng)用程序

翻譯|使用教程|編輯:安雯斯|2023-05-23 14:26:24.093|閱讀 329 次

概述:VMProtect是新一代軟件保護(hù)實(shí)用程序。本文分享VMProtect入門使用教程許可證部分,歡迎查閱~

# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>

相關(guān)鏈接:

VMProtect是新一代軟件保護(hù)實(shí)用程序。VMProtect支持德爾菲、Borland C Builder、Visual C/C++、Visual Basic(本機(jī))、Virtual Pascal和XCode編譯器。

 同時(shí),VMProtect有一個(gè)內(nèi)置的反匯編程序,可以與Windows和Mac OS X可執(zhí)行文件一起使用,并且還可以鏈接編譯器創(chuàng)建的MAP文件,以快速選擇要保護(hù)的代碼片段。

為了輕松實(shí)現(xiàn)應(yīng)用程序保護(hù)任務(wù)的自動(dòng)化,VMProtect實(shí)現(xiàn)了內(nèi)置腳本語(yǔ)言。VMProtect完全支持Windows系列的32/64位操作系統(tǒng)(從Windows 2000開始)和Mac OSX(從版本10.6開始)。重要的是,無論目標(biāo)平臺(tái)如何,VMProtect都支持所有范圍的可執(zhí)行文件,即Windows版本可以處理Mac OS X版本的文件,反之亦然。有其他問題請(qǐng)咨詢加密解密技術(shù)QQ群:766135708

VMProtect最新版下載

VMProtect 是保護(hù)應(yīng)用程序代碼免遭分析和破解的可靠工具,但只有在正確構(gòu)建應(yīng)用程序內(nèi)保護(hù)機(jī)制并且沒有可能破壞整個(gè)保護(hù)的典型錯(cuò)誤的情況下才能最有效地使用。

許可制度

“許可制度”包含以下小節(jié):

許可系統(tǒng)功能
許可系統(tǒng)如何運(yùn)作
管理許可證
如何將系統(tǒng)集成到您的應(yīng)用程序的示例
自動(dòng)序列號(hào)生成

集成到應(yīng)用程序

 在下面描述的幾個(gè)步驟中,我們將創(chuàng)建一個(gè)查詢?cè)S可系統(tǒng)的測(cè)試應(yīng)用程序:向其提供序列號(hào),接收序列號(hào)的狀態(tài)及其內(nèi)容。第一階段,我們?cè)跍y(cè)試模式下使用許可系統(tǒng);第二階段我們使用它,因?yàn)樗鼤?huì)在實(shí)際實(shí)踐中使用。

許可制度的工作模式

 建筑保護(hù)總是經(jīng)歷兩個(gè)主要步驟:開發(fā)和發(fā)布。至于許可,首先您創(chuàng)建一個(gè)應(yīng)用程序,將保護(hù)集成到其中,然后添加檢查和功能限制。只有經(jīng)過全面測(cè)試,您才能將產(chǎn)品提供給用戶并開始第二階段。受保護(hù)應(yīng)用程序的測(cè)試是一個(gè)復(fù)雜的過程,因?yàn)槟枰_保所有檢查和條件跳轉(zhuǎn)都正確運(yùn)行。為所有可能的測(cè)試用例制作“真實(shí)的”序列號(hào)是不方便的。這就是許可系統(tǒng)也提供“開發(fā)者模式”(又名“測(cè)試模式”)的原因。在這種工作模式下,不對(duì)應(yīng)用程序進(jìn)行保護(hù),系統(tǒng)對(duì)提供的序列號(hào)的反應(yīng)在配置文件中進(jìn)行調(diào)整。當(dāng)應(yīng)用程序沒有錯(cuò)誤并且可以正確地與許可系統(tǒng)一起工作時(shí),VMProtect 將“測(cè)試”許可模塊替換為執(zhí)行真實(shí)序列號(hào)檢查的真實(shí)許可模塊。這是在應(yīng)用程序受到保護(hù)時(shí)完成的,因此您不能錯(cuò)誤地避免這一步。

第一階段:測(cè)試模式

 在測(cè)試模式下,許可系統(tǒng)(狀態(tài)和它返回的數(shù)據(jù))對(duì)提供的序列號(hào)的所有反應(yīng)都在配置文件中描述。該文件名為 VMPLicense.ini,應(yīng)位于應(yīng)用程序的工作文件夾中。在下面提供的 10 個(gè)步驟中,我們將從創(chuàng)建最簡(jiǎn)單的應(yīng)用程序到在具有硬件鎖定和限制免費(fèi)升級(jí)期限的測(cè)試模式下使用許可系統(tǒng)的全功能。

  • 步驟 1.1:創(chuàng)建受保護(hù)的應(yīng)用程序

 第一步是創(chuàng)建一個(gè)應(yīng)用程序。這將是一個(gè)簡(jiǎn)單的應(yīng)用程序,沒有任何用戶界面,也沒有重要的功能。我們的目標(biāo)是將序列號(hào)傳遞給許可系統(tǒng)并接收其答案。

#include <windows.h>
#include <stdio.h>
bool is_registered(const char *serial)
{
return serial && serial[0] == 'X';
}
int main(int argc, char **argv)
{
char *serial = "Xserialnumber"; // we set the serial number directly in the code, for simplicity
if (!is_registered(serial))
{
printf("please register!\n");
return 0;
}
printf("We are registered.\n");
return 0;
}

該程序使用一種非常簡(jiǎn)單的方法來檢查序列號(hào)。is_registered ()函數(shù)將序列號(hào)的第一個(gè)符號(hào)與“X”進(jìn)行比較,如果它們匹配則認(rèn)為該數(shù)字是正確的。對(duì)于錯(cuò)誤的序列號(hào),會(huì)顯示一條注冊(cè)消息,而如果用戶輸入正確的密鑰,則會(huì)顯示“我們已注冊(cè)”。改為顯示

下一步是添加代碼以使用 VMProtect 的許可系統(tǒng)檢查序列號(hào)

  • 步驟 1.2:添加許可證檢查代碼

 如果您以前沒有這樣做,是時(shí)候?qū)?VMProtect SDK 包含到您的項(xiàng)目中了。SDK包含三個(gè)文件:頭文件(VMProtectSDK.h)、庫(kù)文件(VMProtectSDK32.lib)和帶實(shí)現(xiàn)的dll文件(VMProtectSDK32.dll)。對(duì)于 64 位系統(tǒng),庫(kù)和 dll 文件有單獨(dú)的實(shí)現(xiàn)。

 將 dll 文件、頭文件和庫(kù)文件放入我們應(yīng)用程序的工作文件夾中,源文件所在的位置,并將頭文件包含到主文件中:

#include <windows.h>
#include <stdio.h>
#include "VMProtectSDK.h"

構(gòu)建項(xiàng)目并確保它像以前一樣編譯和運(yùn)行。許可系統(tǒng)尚未激活。

將序列號(hào)發(fā)送到許可系統(tǒng)

現(xiàn)在,在序列號(hào)行的正下方,我們添加對(duì)許可系統(tǒng)的 SDK 函數(shù)的調(diào)用:

char *serial = "Xserialnumber"; // we set the serial number directly in the code, for simplicity
int res = VMProtectSetSerialNumber(serial);
printf("res = 0x%08X\n", res);

 如果執(zhí)行此操作后程序停止并提示缺少所需的 dll 文件,請(qǐng)確保將相應(yīng)的 DLL 文件放入我們應(yīng)用程序的工作文件夾中。如果執(zhí)行成功,您應(yīng)該會(huì)看到以下消息:

 2 對(duì)應(yīng)于API 中描述的SERIAL_STATE_FLAG_INVALID 標(biāo)志。這意味著許可系統(tǒng)認(rèn)為我們的密鑰不正確,這是真的,因?yàn)槲覀儧]有向系統(tǒng)“解釋”哪些密鑰是正確的,哪些不是。

[TestLicense] AcceptedSerialNumber=Xserialnumber

 現(xiàn)在,再次運(yùn)行我們的程序。如果您仍然收到“2”錯(cuò)誤代碼,請(qǐng)確保 ini 文件位于應(yīng)用程序的工作文件夾中。這次我們應(yīng)該收到“0”。這是許可系統(tǒng)接受并批準(zhǔn)序列號(hào)的標(biāo)志?,F(xiàn)在我們可以從代碼中刪除is_registered()函數(shù)——許可系統(tǒng)現(xiàn)在負(fù)責(zé)檢查序列號(hào):

#include <windows.h>
#include <stdio.h>
#include "VMProtectSDK.h"

int main(int argc, char **argv)
{
char *serial = "Xserialnumber"; // we set the serial number directly in the code, for simplicity
int res = VMProtectSetSerialNumber(serial);
printf("res = 0x%08X\n", res);
if (res)
{
printf("please register!\n");
return 0;
}
printf("We are registered.\n");
return 0;
}
  • 步驟 1.3:檢索序列號(hào)狀態(tài)標(biāo)志

打印標(biāo)志的便捷功能

首先,我們需要一個(gè)方便的函數(shù)來將標(biāo)志的數(shù)值轉(zhuǎn)換為序列號(hào)的可理解狀態(tài)。下面是這個(gè)函數(shù)的代碼:

#define PRINT_HELPER(state, flag) if (state & flag) printf("%s ", #flag)
void print_state(INT state)
{
if (state == 0)
{
printf("state = 0\n");
return;
}
printf("state = ");
PRINT_HELPER(state, SERIAL_STATE_FLAG_CORRUPTED);
PRINT_HELPER(state, SERIAL_STATE_FLAG_INVALID);
PRINT_HELPER(state, SERIAL_STATE_FLAG_BLACKLISTED);
PRINT_HELPER(state, SERIAL_STATE_FLAG_DATE_EXPIRED);
PRINT_HELPER(state, SERIAL_STATE_FLAG_RUNNING_TIME_OVER);
PRINT_HELPER(state, SERIAL_STATE_FLAG_BAD_HWID);
PRINT_HELPER(state, SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED);
printf("\n");
}

 盡管大小不一,但功能非常簡(jiǎn)單——一一檢查所有位標(biāo)志并打印狀態(tài)變量中存在的所有內(nèi)容。在檢查調(diào)用print_state的序列號(hào)后替換代碼中的printf,并更改我們傳遞給許可系統(tǒng)的序列號(hào):

char *serial = "Xserialnumber1"; // we set the serial number directly in the code, for simplicity
int res = VMProtectSetSerialNumber(serial);
print_state(res);

現(xiàn)在,如果我們運(yùn)行這個(gè)程序,下面的消息將被打印到控制臺(tái):

state = SERIAL_STATE_FLAG_INVALID
please register!

現(xiàn)在,我們通過刪除“1”放回舊密鑰并再次運(yùn)行程序:

state = 0 We are registered.

現(xiàn)在,我們可以看到序列號(hào)的狀態(tài)標(biāo)志,讓我們開始從序列號(hào)中檢索標(biāo)志和數(shù)據(jù)。

檢索序列號(hào)狀態(tài)

 您可以通過三種方式獲取序列號(hào)的狀態(tài):通過調(diào)用VMProtectSetSerialNumber()、通過調(diào)用VMProtectGetSerialNumberState()或通過調(diào)用VMProtectGetSerialNumberData() – 狀態(tài)標(biāo)志被放入結(jié)構(gòu)的字段之一。每種方法都旨在在特定時(shí)間使用。第一次檢查序列號(hào)是在安裝期間執(zhí)行的。此時(shí)應(yīng)拒絕錯(cuò)誤號(hào)碼、過期號(hào)碼、黑名單號(hào)碼等。一些限制,例如,程序的最長(zhǎng)運(yùn)行時(shí)間或序列號(hào)到期日期也應(yīng)在運(yùn)行時(shí)檢查。和VMProtectGetSerialNumberState()方法是這里最快和最方便的方法。如果您需要接收有關(guān)序列號(hào)的完整信息,您可以使用更強(qiáng)大的VMProtectGetSerialNumberData()函數(shù)。

  • 步驟 1.4:檢索用戶的姓名和電子郵件

 讓我們從簡(jiǎn)單的事情開始。我們想從序列號(hào)中獲取用戶的姓名和電子郵件,以便在“關(guān)于”窗口(或其他任何地方)中顯示它們。為此,我們必須在 ini 文件中再添加兩行:

[TestLicense]
AcceptedSerialNumber=Xserialnumber
UserName=John Doe
EMail=john@doe.com

而在程序中,如果注冊(cè)成功,我們獲取這些數(shù)據(jù)并輸出到屏幕:

VMProtectSerialNumberData sd = {0};
VMProtectGetSerialNumberData(&sd, sizeof(sd));
printf("name = %ls,\ne-mail = %ls\n", sd.wUserName, sd.wEMail);

該結(jié)構(gòu)包含 UNICODE 數(shù)據(jù),因此printf()使用 %ls 說明符而不是 %s。該程序應(yīng)在屏幕上打印以下文本:

state = 0
We are registered.
name = John Doe,
e-mail = john@doe.com
  • 步驟 1.5:檢查序列號(hào)的到期日期

現(xiàn)在按照以下格式在 ini 文件中添加一個(gè)新行:ExpDate=YYYYMMDD。例如:

ExpDate=20000101

此行中指定的日期必須已經(jīng)過去,即最大日期是昨天。當(dāng)我們運(yùn)行程序時(shí),我們應(yīng)該看到以下內(nèi)容:

state = SERIAL_STATE_FLAG_DATE_EXPIRED please register!

現(xiàn)在讓我們?cè)陲@示“請(qǐng)注冊(cè)”消息和程序存在之前獲取更多信息:

if (res)
{
VMProtectSerialNumberData sd = {0};
VMProtectGetSerialNumberData(&sd, sizeof(sd));
printf("exp. date: y = %d, m = %d, d = %d\n", sd.dtExpire.wYear, sd.dtExpire.bMonth, sd.dtExpire.bDay);
printf("please register!\n");
return 0;
}

該應(yīng)用程序的第二次運(yùn)行現(xiàn)在為我們提供了更多詳細(xì)信息:

state = SERIAL_STATE_FLAG_DATE_EXPIRED
exp. date: y = 2000, m = 1, d = 1
please register!

 好的,現(xiàn)在從 ini 文件中刪除 ExpDate=… 行,這樣它就不會(huì)影響我們要做的其他事情。

  • 步驟1.6:限制程序的運(yùn)行時(shí)間

 您可以限制程序從啟動(dòng)的那一刻開始運(yùn)行。這對(duì)于演示目的很有用:您向用戶提供了一個(gè)真實(shí)的序列號(hào),但該程序的運(yùn)行時(shí)間不超過 5 分鐘。許可系統(tǒng)不會(huì)強(qiáng)制關(guān)閉此類程序,而只是設(shè)置狀態(tài)標(biāo)志。因此,讓我們通過將以下行添加到 ini 文件來將最長(zhǎng)工作時(shí)間設(shè)置為一分鐘:

TimeLimit=1

并修改程序如下:

int main(int argc, char **argv)
{
char *serial = "Xserialnumber"; // we set the serial number directly in the code, for simplicity
int res = VMProtectSetSerialNumber(serial);
print_state(res);
if (res) return 0;
VMProtectSerialNumberData sd = {0};
VMProtectGetSerialNumberData(&sd, sizeof(sd));
printf("I will run for %d minute(s)\n", sd.bRunningTime);
print_state(VMProtectGetSerialNumberState());
Sleep(60 * 1000 * sd.bRunningTime);
printf("After %d minute(s):\n", sd.bRunningTime);
print_state(VMProtectGetSerialNumberState());
return 0;
}

 該程序在啟動(dòng)時(shí)打印序列號(hào)的狀態(tài),然后計(jì)算最長(zhǎng)運(yùn)行時(shí)間并等待其到期。然后再次打印序列號(hào)狀態(tài)。將最大操作時(shí)間設(shè)置為一分鐘后,我們應(yīng)該會(huì)收到以下結(jié)果:

state = 0
I will run for 1 minute(s)
state = 0
After 1 minute(s):
state = SERIAL_STATE_FLAG_RUNNING_TIME_OVER

 受保護(hù)程序應(yīng)定期分析序列號(hào)的狀態(tài),并在設(shè)置標(biāo)志時(shí)關(guān)閉。許可系統(tǒng)不會(huì)自動(dòng)執(zhí)行此操作,因?yàn)槌绦蚩赡苄枰尫艃?nèi)存、將數(shù)據(jù)保存到文件等。此外,您可能希望程序在操作時(shí)間到期后不要停止,而是切換到更受限制的模式。許可系統(tǒng)將此留給開發(fā)人員。

  • 步驟 1.7:限制免費(fèi)升級(jí)期限

怎么運(yùn)行的

 當(dāng) VMProtect 保護(hù)應(yīng)用程序時(shí),它會(huì)記錄日期。許可系統(tǒng)將此日期視為應(yīng)用程序的構(gòu)建日期。您可以將此序列號(hào)可以使用的最大構(gòu)建日期放入序列號(hào)中。因此,如果您將當(dāng)前日期加上一年作為序列號(hào),它將適用于您將在一年內(nèi)發(fā)布的所有程序版本。一年零一天后發(fā)布的版本將無法使用此序列號(hào),用戶可以選擇:使用舊版本的程序或購(gòu)買新密鑰以使用最新版本的程序再使用一年.

讓我們?cè)囋?/strong>

將格式為 MaxBuildDate=YYYYMMDD 的行放入 ini 文件中:

MaxBuildDate=20000101

 在測(cè)試模式下,許可系統(tǒng)將今天視為構(gòu)建日期,因此這一行中指定的日期已經(jīng)過去很重要。也就是說,最大日期是昨天。修改main()函數(shù)的代碼,使其看起來像這樣:

int main(int argc, char **argv)
{
char *serial = "Xserialnumber"; // we set the serial number directly in the code, for simplicity
int res = VMProtectSetSerialNumber(serial);
print_state(res);
if (res)
{
VMProtectSerialNumberData sd = {0};
VMProtectGetSerialNumberData(&sd, sizeof(sd));
printf("max. build date: y = %d, m = %d, d = %d\n", sd.dtMaxBuild.wYear, sd.dtMaxBuild.bMonth, sd.dtMaxBuild.bDay);
printf("please register!\n");
return 0;
}
printf("I'm registered\n");
return 0;
}

然后,在程序運(yùn)行時(shí),您應(yīng)該看到以下內(nèi)容:

state = SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED
max. build date: y = 2000, m = 1, d = 1
please register!

通過將 ini 文件中的日期替換為今天或明天,我們最終得到了“工作”程序:

state = 0
I'm registered

從 ini 文件中刪除 MaxBuildDate=… 行,這樣它就不會(huì)影響我們的進(jìn)一步步驟。

  • 步驟 1.8:黑名單中的序列號(hào)

 許可系統(tǒng)不應(yīng)接受在 VMProtect 中標(biāo)記為“已阻止”的序列號(hào)。當(dāng)您下次重建您的應(yīng)用程序時(shí),VMProtect 會(huì)將黑名單序列號(hào)的哈希值添加到受保護(hù)的應(yīng)用程序中。因此,應(yīng)用程序的許可系統(tǒng)將來會(huì)拒絕這些序列號(hào)。

首先,讓我們最小化main()函數(shù)的內(nèi)容:

int main(int argc, char **argv)
{
char *serial = "Xserialnumber"; // we set the serial number directly in the code, for simplicity
int res = VMProtectSetSerialNumber(serial);
print_state(res);
return 0;
}

現(xiàn)在,運(yùn)行程序并確保許可系統(tǒng)接受我們的序列號(hào):

int main(int argc, char **argv)
{
char *serial = "Xserialnumber"; // we set the serial number directly in the code, for simplicity
int res = VMProtectSetSerialNumber(serial);
print_state(res);
return 0;
}

現(xiàn)在,將這個(gè)序列號(hào)添加到許可系統(tǒng)的黑名單中。將以下行添加到 ini 文件中:

BlackListedSerialNumber=Xserialnumber

并再次運(yùn)行程序:

state = SERIAL_STATE_FLAG_BLACKLISTED

 我們是否應(yīng)該通知用戶他或她輸入的序列號(hào)被列入黑名單?它是由你決定。您可以簡(jiǎn)單地告訴序列號(hào)不正確或通知用戶密鑰已泄露。許可系統(tǒng)只是通知程序有關(guān)使用黑名單序列號(hào)的事實(shí)。

  • 步驟 1.9:硬件鎖

接收硬件標(biāo)識(shí)符

 在我們鎖定硬件之前,我們必須收到一個(gè)硬件標(biāo)識(shí)符。標(biāo)識(shí)符被放入序列號(hào)中,當(dāng)序列號(hào)傳遞給許可系統(tǒng)時(shí),它會(huì)檢查標(biāo)識(shí)符是否匹配。因此,首先我們需要接收硬件的標(biāo)識(shí)符。讓我們將main()函數(shù)減少到最低限度:

int main(int argc, char **argv)
{
int nSize = VMProtectGetCurrentHWID(NULL, 0);
char *buf = new char[nSize];
VMProtectGetCurrentHWID(buf, nSize);
printf("HWID: %s\n", buf);
delete [] buf;
return 0;
}

通過運(yùn)行該程序,我們會(huì)收到一個(gè)默認(rèn)的測(cè)試硬件標(biāo)識(shí)符:

HWID:myhwid

要更改標(biāo)識(shí)符,請(qǐng)將以下行添加到 ini 文件中:

MyHWID=test

如果我們之后運(yùn)行程序,我們可以看到系統(tǒng)認(rèn)為“test”是我們 PC 的硬件標(biāo)識(shí)符:

HWID: test

重要的!只有經(jīng)過 VMProtect 處理后,程序才會(huì)顯示真實(shí)的硬件標(biāo)識(shí)符。

硬件鎖定序列號(hào)

 要將我們的測(cè)試序列號(hào)鎖定到硬件,我們應(yīng)該在 ini 文件中再添加一行。這次我們定義“放入”序列號(hào)的標(biāo)識(shí)符:

KeyHWID=test

然后我們將main()復(fù)雜化一點(diǎn)。現(xiàn)在它將傳遞一個(gè)序列號(hào)并分析它得到的結(jié)果:

int main(int argc, char **argv)
{
int nSize = VMProtectGetCurrentHWID(NULL, 0);
char *buf = new char[nSize];
VMProtectGetCurrentHWID(buf, nSize);
printf("HWID: %s\n", buf);
delete [] buf;
char *serial = "Xserialnumber";
int res = VMProtectSetSerialNumber(serial);
print_state(res);
return 0;
}

運(yùn)行代碼后我們會(huì)看到如下結(jié)果:

HWID: test
state = 0

 許可系統(tǒng)已將當(dāng)前硬件標(biāo)識(shí)符與序列號(hào)中寫入的標(biāo)識(shí)符進(jìn)行比較。標(biāo)識(shí)符相等,因此VMProtectSetSerialNumber()函數(shù)返回 0——序列號(hào)匹配。

 現(xiàn)在讓我們嘗試在另一個(gè)硬件上“運(yùn)行”我們的程序。我們只需將 ini 文件中 MyHWID 參數(shù)的值從“test”更改為“new test”。再次運(yùn)行程序:

HWID: new test
state = SERIAL_STATE_FLAG_BAD_HWID

 這次許可系統(tǒng)返回了 SERIAL_STATE_FLAG_BAD_HWID 標(biāo)志,這意味著真實(shí)的硬件標(biāo)識(shí)符與存儲(chǔ)在序列號(hào)中的不匹配。我們?cè)谄聊簧峡吹降漠?dāng)前標(biāo)識(shí)符是“new test”,而序列號(hào)是“test”。如果我們將 ini 文件中的 KeyHWID 參數(shù)更改為“new test”,我們也可以讓我們的序列號(hào)在這個(gè)“硬件”上工作。

  • 步驟 1.10:用戶數(shù)據(jù)

序列號(hào)最多可容納 255 個(gè)字節(jié)的任意數(shù)據(jù),許可系統(tǒng)按原樣傳遞給程序。數(shù)據(jù)可以包含有關(guān)銷售的任何其他信息、完整版操作所需的數(shù)據(jù)或其他內(nèi)容。讓我們修改我們的main()函數(shù),讓它從序列號(hào)中讀取數(shù)據(jù)并將它們顯示在屏幕上:

int main(int argc, char **argv)
{
char *serial = "Xserialnumber";
int res = VMProtectSetSerialNumber(serial);
print_state(res);
if (res) return 0;
VMProtectSerialNumberData sd = {0};
VMProtectGetSerialNumberData(&sd, sizeof(sd));
printf("Serial number has %d byte(s) of data\n", sd.nUserDataLength);
for (int i = 0; i < sd.nUserDataLength; i++)
printf("%02X ", sd.bUserData[i]);
printf("\n");
return 0;
}

我們還將 Ini 文件縮減為:

[TestLicense]
AcceptedSerialNumber=Xserialnumber

現(xiàn)在,我們運(yùn)行程序并確保我們的序列號(hào)正常工作,但不包含任何數(shù)據(jù):

state = 0
Serial number has 0 byte(s) of data

 要將新的用戶數(shù)據(jù)添加到序列號(hào)中,我們需要在 ini 文件中創(chuàng)建 UserData 變量,并以 HEX 格式為其分配數(shù)據(jù)。符號(hào)必須成對(duì)出現(xiàn),即一行的長(zhǎng)度必須是 2 的倍數(shù)。像這樣:

UserData=010203A0B0C0D0E0

在這種情況下,如果我們運(yùn)行該程序,我們將收到以下結(jié)果:

state = 0
Serial number has 8 byte(s) of data
01 02 03 A0 B0 C0 D0 E0

第二階段:實(shí)模式

 在實(shí)模式下,VMProtect 許可系統(tǒng)為受保護(hù)的應(yīng)用程序放置了一個(gè)特殊的許可模塊。該模塊執(zhí)行與 SDK 中的測(cè)試模塊相同的功能,但使用序列號(hào)的內(nèi)容而不是配置 ini 文件。接下來的五個(gè)步驟說明了使用基于 VMProtect 和許可系統(tǒng)的全功能保護(hù)來保護(hù)簡(jiǎn)單應(yīng)用程序的過程。

  • 步驟 2.1:創(chuàng)建新的受保護(hù)應(yīng)用程序

在第一階段,我們制作了幾個(gè)簡(jiǎn)單的應(yīng)用程序來測(cè)試許可系統(tǒng)的 API?,F(xiàn)在,在第二階段,我們將只創(chuàng)建一個(gè)應(yīng)用程序。它還將是一個(gè)控制臺(tái)應(yīng)用程序,其foo()函數(shù)僅在注冊(cè)版本中有效。這是我們的測(cè)試應(yīng)用程序的代碼:

#include <windows.h>
#include <stdio.h>
#include "VMProtectSDK.h"
#define PRINT_HELPER(state, flag) if (state & flag) printf("%s ", #flag)
void print_state(INT state)
{
if (state == 0)
{
printf("state = 0\n");
return;
}
printf("state = ");
PRINT_HELPER(state, SERIAL_STATE_FLAG_CORRUPTED);
PRINT_HELPER(state, SERIAL_STATE_FLAG_INVALID);
PRINT_HELPER(state, SERIAL_STATE_FLAG_BLACKLISTED);
PRINT_HELPER(state, SERIAL_STATE_FLAG_DATE_EXPIRED);
PRINT_HELPER(state, SERIAL_STATE_FLAG_RUNNING_TIME_OVER);
PRINT_HELPER(state, SERIAL_STATE_FLAG_BAD_HWID);
PRINT_HELPER(state, SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED);
printf("\n");
}
char *read_serial(const char *fname)
{
FILE *f;
if (0 != fopen_s(&f, fname, "rb")) return NULL;
fseek(f, 0, SEEK_END);
int s = ftell(f);
fseek(f, 0, SEEK_SET);
char *buf = new char[s + 1];
fread(buf, s, 1, f);
buf[s] = 0;
fclose(f);
return buf;
}
// The foo() method is very short, but we need it to be an individual function
// so we asked the compiler to not compile it inline
__declspec(noinline) void foo()
{
printf("I'm foo!\n");
}
int main(int argc, char **argv)
{
char *serial = read_serial("serial.txt");
int res = VMProtectSetSerialNumber(serial);
delete [] serial;
if (res)
{
printf("serial number is bad\n");
print_state(res);
return 0;
}
printf("serial number is correct, calling foo()\n");
foo();
printf("done\n");
return 0;
}

 在沒有調(diào)試信息的情況下編譯程序,但在鏈接器設(shè)置中我們啟用了 MAP 文件的創(chuàng)建——我們將需要它與 VMProtect 一起工作。運(yùn)行程序后,我們應(yīng)該看到以下文本:

serial number is bad
state = SERIAL_STATE_FLAG_INVALID

 目前,許可系統(tǒng)仍在測(cè)試模式下運(yùn)行,因?yàn)樵撐募唇?jīng)過 VMProtect 處理,并且其中不包含許可模塊。在下一步中,我們將創(chuàng)建一個(gè) VMProtect 項(xiàng)目并嘗試保護(hù)我們的應(yīng)用程序。

  • 步驟 2.2:創(chuàng)建 VMProtect 保護(hù)項(xiàng)目

 現(xiàn)在,當(dāng)我們的測(cè)試應(yīng)用程序準(zhǔn)備就緒、編譯并在同一文件夾中分配了一個(gè) MAP 文件時(shí),我們可以運(yùn)行 VMProtect Ultimate 并打開可執(zhí)行文件。我們需要向項(xiàng)目添加兩個(gè)函數(shù):_main(這是 Visual Studio 重命名我們的 main() 的方式)和 foo()。這兩個(gè)函數(shù)都可以在 VMProtect 的“函數(shù)”部分的函數(shù)列表中看到。

  • 步驟 2.3:受保護(hù)產(chǎn)品的首次啟動(dòng)

 許可系統(tǒng)已初始化,讓我們嘗試編譯 VMProtect 項(xiàng)目并運(yùn)行受保護(hù)的文件。從命令行運(yùn)行它后,我們將收到以下消息:

C:\test>dummy_app.vmp.exe
serial number is bad
state = SERIAL_STATE_FLAG_INVALID

 如果你運(yùn)行 depends.exe 可以看到我們受保護(hù)的可執(zhí)行文件不再使用 VMProtectSDK.dll。這意味著許可模塊已經(jīng)內(nèi)置到程序中。您還可以從 VMProtect 查看已用 DLL 的列表,在“詳細(xì)信息 | 進(jìn)口”部分。

1

 我們的受保護(hù)程序從 serial.txt 文件中讀取序列號(hào)。由于還沒有這樣的文件,許可模塊收到一個(gè)被解釋為不正確的空序列號(hào)?,F(xiàn)在我們切換到“許可證”部分并生成一個(gè)序列號(hào)。此處詳細(xì)描述了此過程,現(xiàn)在我們僅創(chuàng)建一個(gè)簡(jiǎn)單的序列號(hào),沒有任何限制。

1然后,我們復(fù)制序列號(hào)(在許可證屬性中選擇“序列號(hào)”字段并按下 Ctrl+C),在與受保護(hù)應(yīng)用程序相同的文件夾中創(chuàng)建一個(gè)名為 serial.txt 的文件,并將復(fù)制的序列號(hào)粘貼到那里?,F(xiàn)在,如果我們運(yùn)行我們的應(yīng)用程序,我們將看到:

C:\test>dummy_app.vmp.exe
serial number is correct, calling foo()
I'm foo
done


許可系統(tǒng)檢查了序列號(hào)并發(fā)現(xiàn)它是正確的。在下一步中,我們將嘗試應(yīng)用一些限制并觀察結(jié)果。

  • 步驟 2.4:測(cè)試結(jié)果

序列號(hào)有效期

 讓我們創(chuàng)建另一個(gè)具有特定到期日期的序列號(hào)。例如,2005。這個(gè)日期已經(jīng)過去了,因此我們的序列號(hào)一定是不正確的。切換到“許可證”部分,然后單擊工具欄上的“添加許可證”按鈕。在“Add license”對(duì)話框窗口中啟用“Expiration date”選項(xiàng)并指定 2005 年 9 月 30 日。創(chuàng)建序列號(hào),將其復(fù)制并粘貼到 serial.txt,然后運(yùn)行程序:

C:\test>dummy_app.vmp.exe
serial number is bad
state = SERIAL_STATE_FLAG_DATE_EXPIRED

 許可模塊返回“序列號(hào)已過期”標(biāo)志?,F(xiàn)在,將工作序列號(hào)放回 serial.txt 文件并確保許可模塊完全接受它。

C:\test>dummy_app.vmp.exe
serial number is correct, calling foo()
I'm foo
done

將序列號(hào)加入黑名單

 讓我們想象一下,我們的“好”序列號(hào)已經(jīng)泄露到 Internet 并且現(xiàn)在已被泄露。我們需要阻止它,以便它在程序的未來版本中不起作用。為此,請(qǐng)?jiān)诹斜碇羞x擇序列號(hào)并將主面板中的“已阻止”屬性設(shè)置為“是”。目前序列號(hào)還沒有被屏蔽,但是當(dāng)你再次保護(hù)文件時(shí),應(yīng)用程序?qū)⒉辉俳邮苓@個(gè)序列號(hào)。讓我們確保這是真的。如果我們現(xiàn)在運(yùn)行我們的程序,它應(yīng)該毫無問題地接受被阻止的序列號(hào),因?yàn)檫@是對(duì)被阻止的號(hào)碼一無所知的舊版本:

C:\test>dummy_app.vmp.exe
serial number is correct, calling foo()
I'm foo
done

 現(xiàn)在我們復(fù)制我們的程序并將其命名為“dummy_app1.vmp.exe”,然后打開 VMProtect 并再次保護(hù)應(yīng)用程序。然后運(yùn)行這個(gè)新版本:

C:\test>dummy_app.vmp.exe
serial number is bad
state = SERIAL_STATE_FLAG_BLACKLISTED

又是舊版本,為了比較:

C:\test>dummy_app1.vmp.exe
serial number is correct, calling foo()
I'm foo
done

舊版本不知道被阻止的序列號(hào)并且像以前一樣工作。

 在下一步中,我們將嘗試將代碼鎖定到序列號(hào)。但在我們繼續(xù)之前,取消阻止序列號(hào)并在 VMProtect 中重新對(duì)應(yīng)用程序應(yīng)用保護(hù),使其再次接受該序列號(hào)。或者只是創(chuàng)建一個(gè)新的許可證。

  • 步驟 2.5:將代碼鎖定為序列號(hào)

 破解程序最常見的方法之一是定位檢查序列號(hào)的地方和緊隨其后的條件跳轉(zhuǎn)。如果序列號(hào)是正確的,程序?qū)⒁砸环N方式執(zhí)行,如果不正確,則以另一種方式執(zhí)行。黑客找到了這個(gè)跳轉(zhuǎn),并將其替換為“正確”方式的跳轉(zhuǎn)。讓我們使用這種技術(shù)“破解”我們的測(cè)試程序。當(dāng)然,直接在源代碼中。讓我們“關(guān)閉”我們的條件跳轉(zhuǎn):

char *serial = read_serial("serial.txt");
int res = VMProtectSetSerialNumber(serial);
delete [] serial;
if (false && res)
{

 現(xiàn)在,我們的程序接受任何序列號(hào)并正常工作。當(dāng)然,如果文件被 VMProtect 保護(hù),即使是經(jīng)驗(yàn)豐富的黑客也會(huì)像我們一樣花費(fèi)數(shù)月的時(shí)間來定位和修改條件跳轉(zhuǎn)。并且考慮到程序會(huì)在不同條件下多次檢查序列號(hào),即使是這種簡(jiǎn)單的檢查也是相當(dāng)安全的。但讓我們更進(jìn)一步。

將代碼鎖定到序列號(hào)

 重要的!VMProtect 的演示版本對(duì)處理函數(shù)的數(shù)量有限制:只處理一個(gè)函數(shù)。所以如果你使用演示版,你應(yīng)該只在項(xiàng)目中包含 foo() 函數(shù),否則 VMProtect 的演示版可以選擇 main() 函數(shù)并且鎖定到序列號(hào)將不起作用。

VMProtect 的許可系統(tǒng)允許您將一個(gè)或多個(gè)功能的代碼鎖定到一個(gè)序列號(hào),這樣,如果沒有提供正確的序列號(hào),它們將無法工作。函數(shù)體被虛擬化,然后加密,只能用正確的序列號(hào)解密。這意味著,即使黑客發(fā)現(xiàn)并修復(fù)了序列號(hào)檢查中的條件跳轉(zhuǎn),鎖定到序列號(hào)的功能仍然無法使用。讓我們?cè)囋囘@個(gè)。在“Functions”部分選擇foo()函數(shù),然后在右側(cè)面板中將“Lock to Serial Number”選項(xiàng)更改為“Yes”。

1

 然后,保護(hù)應(yīng)用程序。因?yàn)?,我們已?jīng)“破解”了它,將任意文本放入 serial.txt 文件并運(yùn)行應(yīng)用程序??刂婆_(tái)中出現(xiàn)以下文本

C:\test>dummy_app.vmp.exe
serial number is correct, calling foo()

這意味著,黑客“修復(fù)”了條件跳轉(zhuǎn),程序以“正確”的方式運(yùn)行。但是當(dāng)調(diào)用foo()時(shí),程序會(huì)顯示一條消息:

1

由于我們將foo()函數(shù)鎖定到序列號(hào),而黑客并沒有它,因此試圖解密該函數(shù)的代碼導(dǎo)致出現(xiàn)故障,無法繼續(xù)執(zhí)行程序。當(dāng)按下“確定”時(shí),程序關(guān)閉并且“完成”消息永遠(yuǎn)不會(huì)顯示在控制臺(tái)中。

什么應(yīng)該鎖定到一個(gè)序列號(hào)?

 將只應(yīng)在程序的注冊(cè)版本中運(yùn)行的功能鎖定到序列號(hào)是有意義的。由于鎖定需要虛擬化,因此您應(yīng)該考慮到一些性能損失。例如,如果文本編輯器不允許在演示版本中保存結(jié)果,則可以將保存文檔功能鎖定為序列號(hào)。如果該函數(shù)在其運(yùn)行期間調(diào)用其他函數(shù),則沒有必要也將它們鎖定,因?yàn)槿绻麤]有 main 函數(shù),它們將沒有任何用處。

 您還應(yīng)該記住,在沒有序列號(hào)的情況下調(diào)用鎖定功能會(huì)導(dǎo)致程序關(guān)閉,并且沒有機(jī)會(huì)保存工作結(jié)果。這就是為什么您應(yīng)該徹底測(cè)試應(yīng)用程序以確保它不會(huì)在試用模式下調(diào)用此類功能。在上面的示例中,文本編輯器必須在演示模式下禁用“保存”命令,并且不響應(yīng) Ctrl+S 快捷鍵。當(dāng)然,它也不應(yīng)該要求在退出時(shí)保存文檔。如果您不注意這一點(diǎn),用戶可能會(huì)對(duì)您的“錯(cuò)誤”演示版本感到失望。

鎖定序列號(hào)和無效序列號(hào)

 調(diào)用VMProtectSetSerialNumber()函數(shù)時(shí),許可模塊會(huì)檢查傳遞給該函數(shù)的序列號(hào)。只有在檢查時(shí)序列號(hào)絕對(duì)正確時(shí),才會(huì)執(zhí)行加密的代碼片段——未列入黑名單、具有正確的硬件標(biāo)識(shí)符、未過期等。在這種情況下,將執(zhí)行所有加密過程,直到應(yīng)用程序關(guān)閉,或再次調(diào)用VMProtectSetSerialNumber() 。

 一些限制可能會(huì)在程序執(zhí)行過程中“觸發(fā)”:例如,程序的運(yùn)行時(shí)間可能到期或序列號(hào)到期日期到來。在這種情況下,許可模塊仍然加密并執(zhí)行鎖定到序列號(hào)的功能。之所以如此,是因?yàn)槭鼙Wo(hù)的應(yīng)用程序很難檢測(cè)到這些限制觸發(fā)的時(shí)刻并相應(yīng)地更改行為(阻止相應(yīng)的菜單項(xiàng)等)。如果許可模塊突然停止執(zhí)行鎖定序列號(hào)的代碼片段,則極有可能導(dǎo)致應(yīng)用程序出現(xiàn)故障。這就是為什么在設(shè)置序列號(hào)時(shí)做出決定,并選擇相應(yīng)的執(zhí)行模式。

附加信息

 所有位標(biāo)志、結(jié)構(gòu)格式和函數(shù)調(diào)用參數(shù)的值都可以在該幫助文件的許可系統(tǒng) API部分找到。使用此部分作為參考,而上面提供的步驟有助于輕松實(shí)現(xiàn)典型的即用型保護(hù)。

 以上便是本篇文章的分享,如果您有任何疑問或者想獲取更多產(chǎn)品試用/授權(quán)/價(jià)格信息,可以咨詢我們的了解~


標(biāo)簽:

本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn


為你推薦

  • 推薦視頻
  • 推薦活動(dòng)
  • 推薦產(chǎn)品
  • 推薦文章
  • 慧都慧問
掃碼咨詢


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
国产亚洲精品aa在线观看 | 亚洲中文字幕在线精品2025 | 91伊人网 | 国产主播精品福利19禁vip | 亚洲成片 | 国产激情 | 偷自拍亚洲视频在 | 亚洲韩精品欧美一区二区三区 | 国产精品亚洲日日摸夜夜添 | 国产亚洲老熟女视频 | 性一交一乱一伦 | 91精品视频在线 | 国产精品黄在线观看免费网站 | 亚洲福利电影在线观看 | 一区二区视频 | 免费人成在线蜜桃视频 | 香蕉在线播放 | 国产午夜亚洲精品不卡在线观看 | 亚洲综合精品 | 亚洲欧美大片在线观看 | 日韩欧美在线中 | 国产在线精 | 亚洲制服丝袜自拍中文字幕 | 一区二区三区免费 | 国产伦精品一区二区三区免 | 首页中文字幕中文字幕 | 91精品专区国产盗摄 | 午夜视频在线观看国产 | 亚洲а∨精品天堂在线 | 秋霞人成在线观看免费视频 | 老熟女重囗味 | 日韩一区二区三区在线观看 | 欧美特黄a级 | 大伊香蕉精品一区在线 | 亚洲人成网站在线观看 | 中文综合第二页 | 国产精品日韩欧 | 国产日韩欧美911在线观看 | 加勒比综合免费不卡在线观看 | 好吊妞在线视频免费观看综合网 | 91大神在线资源观看无广告 | 国产精品区在 | 亚洲国产精品va在线播放 | 欧美日韩在线视频制服 | 欧洲中文日韩亚洲精品视频 | 精品国精品 | 色久悠悠色久在线观看 | 精品国产污 | 国产在线拍揄自揄拍免费下 | 中文字幕在线亚洲二区 | 成人āv专区精 | 亚洲欧美中日韩中文字幕 | 国产国产人免费人成免费视频 | 亚洲愉拍自拍欧美精品app | 91视频盛宴| 亚洲欧美激情精品一 | 国产性生大 | 亚洲mv大片欧洲mv大片入口 | 91精品免费国产高清在线 | 亚洲精品视频免费观看 | 亚洲精品一区二区观看 | 国产在线视频在线观看 | 91精品啪国产在线观看 | 欧美亚洲国产经典 | 日本又黄又粗暴的视频 | 免费成年人看的视频品爱网 | 国产美女视频国产视视频 | 欧美激情综合网 | 青青青国产观91 | 蜜臀精品国产高清在线观看 | 欧美午夜在线视频 | 亚洲国产精品va在线播放 | 国产91丝袜在线播放0 | 视频一区二区在线 | 中文字幕亚洲综合小综合在线 | 日韩视频中文 | 韩国福利一区 | 日韩精品视频网站在线 | 亚洲综合色区中文字幕 | 国产日韩在线视 | 天堂mv在线mv免费mv香蕉 | 亚洲国产呦萝小初 | 国产v视频在线亚洲视频 | 婷婷蜜桃国产精品一区 | 中文字幕一区 | 婷婷六月亚洲中文字幕不卡 | 精品一区二区国产 | 亚洲欧美日韩一区超高清 | 精品一区二区视频免费看 | 2025电视剧手机免费在线观看 | 99视频在线精品国自产拍亚瑟 | 成都在线观看免费观看 | 日本一区二区电影 | 污软件不收费软 | 韩国日本免费高清观看 | 国产日韩在线观看一区福利 | 91福利国产在线 | 一级欧美一级日韩片 | 独家高清资源库 | 国产综合色在线视频播放线视 | 国产福利小视 | 欧美日韩国产一区二区三区欧 | 中文字幕国产专区99 | 极速影院| 性情中人中文网 | 中文字幕精品视频第一区第二区 | 亚洲不卡 | 91精品国产91 | 免费手机影院 | 国产一区二区免费视频 | 亚洲精品国产v片 | 国产性色惰视频 | 亚洲男人夜夜精品电影 | 在线观看2025精品 | 欧美日韩一二三区免费性片 | 国产一区欧美亚洲 | 日韩精品大片在线观看 | 欧美一区二区三区激情爽 | 中文字幕在线视频 | 羞羞影视| 国产综合一区二区三区 | 亚洲欧美另类视频小说专区 | 国产探花| 91大神精品在线观看 | 又大又粗又硬又黄的免费视频 | 欧美一级特黄aaa大片在线观看 | 大陆国语自产精品视频在 | 蜜桃传媒视频 | 欧美精品制服 | 国产色系视频免费在线观看 | 字幕一区 | 日韩欧美综合在线制服 | 精品一区二区三区视频免费 | 成人国产亚洲欧美一区 | 国产肥熟 | 夜色在线国产精 | 中文欧美日韩无线码 | 日本亚洲一区二区三区 | 免费电影天堂 | 4日本国产vps私人大片 | 国产精品自拍视频首页 | 精品国产91久 | 日本在线观看中文字幕 | 激情国产精品一区二区 | 国产啪精品视频网站免费尤物 | 国产日韩精品一级二级 | 91精品国产免 | 91热成人精品国产免费 | 草草精品在线视频 | 精品一精品国产一级 | 精品成人一区二区三区免费视频 | 丰满尤物一区二区三区 | 欧美a级毛欧美1级a大片式放 | 免费在线观看a | 久热亚洲 | 最近的中文字幕视频完整 | 国产欧美精品一区二区三区pp | 一本色道| 色琪琪原网站亚洲香蕉 | 2025中文字幕在线观看 | 韩国三级私人教练 | 日本综合欧美一区二区三区 | 中文字幕一区二区三区日韩精品 | 日本视频一区二区三区 | 中文字幕制 | 国产在线精品一区二区三区直播 | 亚洲一区二三区好的精华液 | 亚洲日韩欧美九 | 亚洲一区二区三区精品动漫 | 欧美va亚洲va在 | 又污又爽无| 国产又大又硬又粗 | 免费人成在线观看网站免费观看 | 成年人在线观看 | 国产区成人精品视频 | 一级国产片在线 | 欧美v亚洲v综合ⅴ国产v | 伊伊人成亚洲 | 色欧美老角色 | 国自产精品手机在线观看视 | 在线精品91国产在线观看 | 不卡视频一区二区三区免费观看 | 日韩在线欧美精 | 青苹果乐园影院在线播放 | 亚洲男人的天堂在线观看 | 国产精品亚洲一区二区三区 | 成a人片在线观看手机看 | 国产精品萌白酱永久在线观看 | 最新中文字幕 | 国产一级淫片免费视 | 婷婷开心五月四房播播人 | 超级媚药痉 | 亚洲欧美日韩综合在线丁香 | 国产精品三级在线看免费看 | 综合影视亚洲中文 | 专区在线观看 | 最新国语自产精品视频在 | 视频二区三区国产情侣在线 | 婷婷六月综合缴情在线小蛇 | 欧洲亚洲一区二 | 不用下载播放器的电影网 | 真实国产普通话对白乱子子伦视频 | 亚洲人成影 | 风流老熟女一区二区三区l 国产亚洲精品国产福利 | 国国产乱理伦片在线观看夜 | 国产91在| 日本一卡2卡三卡4卡网站 | 日本视频网站在线w | 成人a级高清视频在线观看 91免费视频网站 | 美女张开让男生桶 | 日韩国产免费一区二区三区 | 亚洲欧美日韩国产精选在线观看 | 成人国产精品一区二区八戒网 | 98视频在线| 亚洲人午夜射精精品日 | 国产又粗又大又长又猛在线视频 | 亚欧洲精品在线入口 | 国产区免| 欧美日韩中文字幕在线 | 免费免费麻辣 | 欧美丝袜自拍制服另类 | 亚洲精品1卡2卡三卡23卡 | 国产狂喷潮在线观看中文 | 99热这里只有 | 最近日本免费观看mv免费版 | 九九在线观看精品视频6 | 国产精品一级在线观看 | 精品国偷自产 | 狂野欧美性猛xxxx乱大交 | 片午夜在线观看 | 日韩精品一区二区三区中文 | 字幕一区精品自拍 | 国产人成精品综 | 中文www新版资源在线天堂√ | 精品中文字幕一区在线 | 国产美女在线精品免费观看 | 亚洲精品动漫免费二区 | 在线中文字幕有码中文 | 日韩亚洲欧洲美三区中文字幕 | 亚洲精品国自产拍在线观看 | 国产欧美日韩一区二区三区 | 文中字幕一区二区 | 国产精品一区二区在线精品 | 欧美日韩一区日本成人一区二区 | 一区二区三区免费在线观看视频 | 欧美一级做a爱高清免费观看 | 国产精品欧美亚洲韩国日 | 国产精品视频一区二区三区 | 国内偷视频在线观看 | 日本一二三区不卡高清区 | 欧美亚日韩一二三四 | 国产在线观看不卡免费高清 | 日韩18未满禁止观看 | 午夜国产福利看片 | 国产馆精品推荐在线观看 | 香港三级澳门三级欧洲三级 | 视频在线观看播放免费 | 国产欧美一区二区综合 | 国产日韩另类视频一区爱 | 国产精品视频免费一区二区 | 国产原创精品在线 | 精品福利一区二区三区免费视频 | 国产乱码高清区二区三区在线 | 精品亚洲国产 | 国产又色又爽又黄又刺激的网站 | 亚洲精品亚洲欧美综合区 | 今日火爆归来! | 国产免费人成视频在线观看播放 | 久热这里只有精品无 | 日韩精品在线看 | 日本不卡一区二区三区 | 国产精品不卡免费视频 | 国产精品永久免费自在线观 | 国产青草视频在线观看 | 欧美亚洲日韩国产网 | 国产精品影院 | 99香蕉国产精品偷在线观看 | 精品三级国产在线看 | 97porm国内自拍视频 | 射射影院 | 国产一区二区三区自产 | 成人性生交大片在线观看 | 成人拍拍拍在线观看 | 亚洲欧美精品变态另类 | 亚洲精品第一国产综合精品5 | 国产精品h片在 | 国产欧美日本不卡 | 91tv官网精品观看 | 欧美一级高清视频在线播放 | 国产91刘玥在线观看 | 国产99日韩精品第一页 | 区三区国产高清视频 | 高清一区二区三区日本久 | 午夜三级a三级 | 欧美一区日韩一区中文字幕页 | 亚洲影院 | 日本大片电影 | 亚洲成在人线在线播放 | 亚洲最大的情人在线 | 伦视频中文字幕亚洲天堂网 | 热门事件黑料不打烊吃瓜 | 国产精品浪潮v一区二区 | 中文天堂www| 国产精品私密保养 | 亚洲日韩欧美在线观看 | 精品亚洲欧美视频在线观看 | 亚洲日本一区二区一本一道 | 日本高清一区免费中文视频 | 99精品国产丝袜在线 | 日韩欧美视频一区二区三区 | 国产精品午夜免费观看网站 | 色综合伊人色综合网站 | 亚洲已满18点击进入在线观看 | 亚洲自偷自偷精品 | 欧美交换配乱 | 日本黄页网址在线看免费不卡 | 国产精品婷婷午夜 | 精品国产电影自在免费观看 | a在线视频播放观看免费观看 | 国产一级一级一级国产片 | 国产午夜亚洲精品不卡电影 | www.尤物在线 | 在线观看亚洲精品专区 | 超刺激高跟鞋脚交视频在线 | 2区3区在线观看 | 中文在线观看 | 国产精品欧美亚洲韩国日 | 女の乳搾りです在线观看 | 国产精品亚洲欧美大片在线看 | 日韩国产欧美在线观 | 国产精品自拍激情性爱 | 国产不卡视频在线观看 | 梦乃爱华作品在线观看播放 | 亚洲清纯自偷自拍另类专区 | 阿v视频国产免在线手机观看 | 福利片午夜免费观着 | 五月丁香六月婷婷综合网缴情 | 巨臀中文字幕一区二区 | 337p亚洲| 日本一区二区三区在线观看网站 | 国内精品尹人香蕉综合在线观看 | 人成精品视频三区二区一区 | 日本在线视频在线 | 日本高清视频一区二区 | 母+子+在线视频 | 国产欧美一区二区精品每日更新 | 999zyz玖玖| 国内揄拍 | 中文字幕日韩一区二区三区不卡 | 亚洲日韩一区二区三区四区高清 | 亚洲欧美国产日产综合不卡 | 国产精品天天看 | 国产日韩欧美一区二区三区精品 | 日韩精品一区二区免费在线观看 | 亚洲一区精品中文字幕 | 国产激情影视综合 | 自拍亚洲免费影视 | 成人免费视频一区二区 | 亚洲大片在线观看网址 | 最好看的高清电影在线观看 | 97国产婷婷综合视 | 欧洲+亚洲+日本+国产 | 国产在线国偷精品免费 | 午夜亚洲国产理论片秋霞 | 午夜影院日韩 | 国产原创露脸视频在线观看 | 国产一区二区三区亚洲 | 日本在线观看中文字幕 | 三级在线观看免费观看电影 | 亚洲人午夜射精 | 成人国内免费精品视频在线观看 | 精品欧美视频第二页在线观看 | 成人午夜视频在线视频 | 日韩成人精品二区 | 精品91自产拍 | 91大神在线精品视频一区 | 成人性午夜视频在线观看 | 国产一级a毛一级a看免费 | 国产精品1024在线永久免费 | 日本护士毛茸茸 | 日本不无在线一区二区三区 | 天天爱天天做天天做天天吃中 | 欧美一级a做片性视频 | 日本高清视频一区二区 | 日本一区二区三区精品 | 国产十欧美 | 国产精品欧美激情 | 国产成本人三级在 | 亚州在线中文字幕经典a | 日韩欧美在线一区二区不卡 | 亚洲视频一区二区在线观看 | 免费午夜伦费影视在线观看 | 亚洲精品自拍视频在线免费 | 在线影视网站 | 97精品国产自在现线免费 | 黑粗硬大欧美 | 国产中文字幕免费不卡 | 精品国产9 | 亚洲经典一区二区三区爱妃记歌词 | 国产又黄又大又粗又硬又猛樱花 | 日韩国产在线观看 | 一区二区三区在线播放 | 美女网站在线免费观看 | 亚洲国产日韩a在线亚洲 | 国产l精品国产亚洲区在线观 | 成人精品一区二区三区电影黑人 | 亚洲欧洲日韩国产aa色大片 | 亚洲区视频在线观看 | 国产人成精品香港三级在线 | 国产在线观看美女福利精 | 国产精品v欧美精品v日韩 | 精品国产免费人成电影在线观 | 91精品国产人成网站 | 日韩精品中文字幕在线 | 米奇欧美777四色影视在线 | 陌陌影视在线观看高清完整版 | 国产日韩a视频在线播放视频 | 91探花国产 | 色偷偷人人澡人人添老妇人 | 亚洲熟女乱色一区二区三区 | 亚洲综合色自拍一区 | 国产a级毛 | 亚洲高清不卡 | 国产视频高清在线观看 | 成人国产亚洲欧美一区 | 99热这里只有精品动漫国产 | 污污污免费视频 | 日本免费一区二区三区最新 | 欧美一区韩国二区老 | 精品国产一区二区三区不卡在 | 欧美欧美日韩综合一区天 | 国产精品男人的天堂 | 日本三级手机在线播放线观看 | 性插爽视频欧 | 国产精品欧美亚洲区 | 国产二区在线播放 | 偷窥清纯综合图区 | 最新手机在线电影 | 国产在线一卡2卡三卡4卡免费 | 日韩精品视频欧美国产 | 中文字幕日韩经典 | 国产在线精品国自产 | 国产精品免费一区二区三区 | 亚洲愉拍99热成人精品 | 精品视频91 | 国产2025精品视频免费播放 | 91国偷自产中文字幕婷婷 | 亚洲影视网 | 国产精品亚洲午夜一区二区三区 | 51精品免费视频国 | 三年片在线观看免费大全电影 | 欧美一区二区在线观看视频 | 日韩一级一欧美一级国产 | 日本三级做a全过程在线观看 | 国产香线| 好吊色永久免费视频在线观看 | 日韩欧美三区免费观看 | 99精品国产丝袜在线拍国语 | 韩国福利影视一区二区三区 | 日韩精品极品视频在线观看免费 | 大胆gogo无| 一级欧美一级日韩片 | 成人国产99视频在线观看 | 91精品一区二区三区蜜桃 | 国产精品一线二线三线 | 国产亚洲精品片a77777 | 国产乱子伦精品免费 | 91香蕉视 | 老司机免费精品线观看86 | 国产亚洲欧美日韩国产片 | 国产全黄三级三级 | 无尽动漫性视频╳╳╳3d | 欧美白皙视 | 亚洲成a人v欧美综合天堂 | 99在线精品免费 | 一区二区日韩国产精品 | 欧美日韩一区二区三 | 亚洲精品老司机在线观看 | 日本大片免a费观看视频 | 欧美日韩在线精品一区二区 | 热门好看动漫综艺 | 日日噜噜夜夜狠狠视频无 | 理论片在线电影 | 国产嘿嘿嘿视频在线观看 | 一个人看 | 黄页网站大全免费视频网站 | 国产高清精品亚洲明星换脸 | 欧美亚洲国产另类制服丝袜 | 91福利国产在线人成观看 | 精品国内自产拍在线视频 | 女同国产剧情在线观看 | 国产做a∨在线视频 | 亚洲日韩国产综合区 | 最近中文字幕免费高清mv视 | 国产日韩精品一区二区三区在线观 | 国产综合精品一区二区 | 日韩一区在线观看免费观看免费 | 91日韩欧美 | 国产亚洲欧美精品一区 | 国产伦精品一区二区三区免 | 欧美午夜成午夜成年片在线观看 | 日韩亚洲欧洲美三区中文字幕 | 午夜视频在线观看一区 | 91九色精品国产免费 | 激情中文一区二区三区四区 | 亚洲中文精品乱伦 | 国产偷国产偷亚洲清高app | 最新电影电视剧观看 | 亚洲一区二区在线免费观看 | 中文字幕一区日韩高清 | 成年奭片免费观看 | 日本三级香港 | 韩国三级bd高清在线观看 | 国产福利萌白酱精品tv一区 | 中日韩va无 | 精品视频一区二区三区在线观看 | 国产亚洲精品综合一区 | 国产精品极品美女自在线观看 | 国产精品亚洲精品爽爽 | 国内一区二区三区在线观看 | 欧美日韩国产精品免费观看 | 亚洲二区中文字幕 | 免费人成视在线观看不卡 | 狂野欧美性猛xxxx乱大交 | 欧美日韩三区 | 日韩精品在线视频 | 日本三级a∨在线观看 | 国产sm重味 | xnxxfreeporn| 亚洲熟女片 | 好吊妞无缓冲不卡在线视频 | 国产精品1024香蕉在线观看 | 欧美日韩不卡中文网 | 无人区乱码一区二区三区 | 日韩精品在线观看 | 欧美精品金8天国系列 | 最新电影电视剧免费在线观看 | www.美色吧 | 日韩欧美亚洲一区二区在线观看 | 日韩精品一区二区三区中 | 国产suv精品一区二区62 | 精品国产蜜桃 | 日韩淫片一区二区 | 日韩精品一区二区免费在线观看 | 电话耳机 | 国产精成人品 | 三级精品在线观看自拍 | 欧美日本一区二区三区在线 | 97国语精品自产拍在线观看一 | 国产精品亚洲综合一区在线观看 | 国产欧洲野花a级 | 欧美日韩一区二区三 | 国产玉足脚交极品在线 | 天堂亚洲日韩专二区 | 日韩不卡手机视频在线观看 | 午夜一级韩国欧美日本国产 | 国语自产精品视频在线看 | 亚洲精品国产va在线观看天堂 | 国产隔着超薄丝袜进入 | 91精品啪aⅴ在线观看国产 | 国产欧美日韩综合精品区一区二区 | 国产福利小电影视福利在线 | 亚洲午夜一区二区三区在线观看 | 亚洲韩国欧美一区二区三区 | 亚洲精品中文字幕不卡在线 | 激情欧美日韩一区二区 | 国产剧情自创在线播放 | 热映电影免费在线观 | 亚洲国产精品网站在线播放 | 国产自偷自偷免费一区 | 亚洲成a人片在 | aⅴ日本亚洲欧洲免费天堂 加勒比综合网 | 韩国美女直播福利一区二区 | 日本三级理论一区二区三区 | 国产成在线观看免费视频成本 | 九一人才网| 一区二区日韩视频九一蜜桃 | 最新国产精品拍自在 | 亚洲第区 | 日本道vs高清一区二区三区 | 国内自拍视频在线观看 | 国产精品福利免费 | 99视频在线精品自拍 | 在线日韩中文字幕 | 天堂tv亚洲tv日本tv不卡 | 国产精品一区二区在线观看网站 | 亚洲а∨天堂2025在线网站 | 国产高清在线观看一区二区三区 | 日韩亚洲制服另类 | 精品午夜免费高清视频 | 亚洲欧美日韩国产一区二区三区 | 欧美综合精品一区二区二 | 十九岁中国电影在线观看免费 | 国产小视频免费在线观看 | 国产精品亚洲片夜色在线 | 天堂mv在线mv免费mv香蕉 | 成人精品一区二区三四 | 日韩亚洲欧美一区二区三区综合 | 亚洲色成人影院在线观看 | 日本亚洲一区二区 | 亚洲线精品一区二区三区四区 | 日本特黄特黄aaaaa大片 | 在线视频有码国产欧美 | 午夜电影网首页 | 国产美女一区二区丝袜美腿 | 日韩成人一区二区三区在线观看 | 国产日本欧美亚洲精品视 | 国产精品亲子乱子伦xxxx裸 | 日本三级香港三级人妇99 | aⅴ另类 | 最近免费中文mv在线字幕 | 亚洲人成网址在线播放小说 | 日日摸处处碰夜夜爽 | 国产男女免费完整视频网页 | 国产日韩免费视频在线观看 | 免费大片aⅴ入口 | 3d成人动漫在线观看 | 精品欧美视频在线播放不卡 | 亚洲欧洲日韩一区二区日本 | 美国十次啦超级大导航 | 全国三级网站在线观看 | 最新日本一道免费一 | 涩涩欧美 | 国产一区二区影视 | 亚洲欧美日韩一区二区在线观看 | 电视剧大全免 | 无毒国产不卡在线视频 | 免费国产一区二区三区 | 视频二区日韩 | 欧美喷潮系列在线观看 | 女人喷液在线观看免费 | 精品国产免费一区二区三区香 | 中文欧美亚洲日 | 中文字幕亚洲综合小综合在线 | 亚洲国产综合一区日韩精品 | 亚欧中文 | 亚洲精品国产福利 | 欧美在线国产精品 | 欧美综合自拍亚洲综合百度 | 国产一区自拍欧美 | 日韩一区 | 91高清国产在线观看 | 日韩中文字幕网站 | 国产亚韩欧美联合在线 | 亚洲国产精品一区第二页 | 三年片观看免费观看大全 | 国产高清狼人香蕉 | 精品国产亚洲三 | 精品性影院一区二区三区 | 92午夜福利影院一区二区三 | 亚洲а∨天堂2025在线网站 | 99欧美| 婷婷六月综合缴情在线小蛇 | 国产精品天干天干在线综合 | 欧美一级成在线人 | 99国产精品9 | 国产精品自在线拍国产第一页 | 欧美又粗又大一区二区 | 怡红院熟女 | 日韩欧美在线观看视频 | 亚洲一区二区三区和欧美四区 | 欧美区一区 | 国产丝袜控视频在线观看 | 亚洲国产综合另类视频在线观看 | 在线免费观看国 | 亚洲欧美日韩综合在线丁香 | 日韩亚洲成a人片在线观看 国产日产成人免费视频在线观看 | 蜜桃色永久入口 | 日韩在线一区二区三区观看 | 国产伦精品一区二区三区视频网站 | 国产精品极品露脸清纯 | 五月综合激情婷婷六月色窝 | 亚洲高清中文字幕 | 在线观看免费人成视频国产 | 国产手机精品自拍视频 | 青青国产精品一区二区 | 97国产在线看片免费人成视频 | 人人干97| 高圆圆又紧又大又湿又爽 | 国产福利不卡在线观看 | 日韩免费一区二区三区高清 | 国产精品色三级在线观看 | 欧美日夜干影院 | 国产又粗又大视频 | 亚洲精品自拍愉拍第二页 | 亚洲中文字幕一二三区 | 国产在线观看免 | 老司机成人亚洲精品影院 | 日本一区二区三区中文字幕 | 一区二区不卡 | 成人自拍电影在线观看 | 年轻的母亲4韩剧免费中文版 | 国产欧美日本亚洲精品一5区 | 国产福利深夜视频在线观看 | 91大神在线视频免费观看 | 国产精品网红尤物福利在线 | 国产精品酒店在线精品 | 欧美亚洲国 | 亚洲最大激情中文字幕 | 韩国福利影视一区二区三区 | 亚洲欧美综合一区二区三区黄大片 | 神马视频| 欧美日韩亚洲一区二区三区 | 在线日本高清不卡免费v | 一级特黄aaa大片 | 欧美中文日韩在线观看 | 精品一区二区不卡 | 国产又黄又猛又粗又爽的a 羞羞影视 | 欧美日韩亚洲国 | 国产免费爽爽视频在线观看 | 欧美精品a欧洲黑 | 2025最新电影、电视剧、综 | 夜夜草视频 | 国产精品亚洲a∨天堂 | 亚洲精品老司机在线观看 | 亚洲国产一区二区午夜福利 | 国产真实破| 91免费伊人 | www国产精品一区二区三区 | 国产日产欧产精品精品app | 在线观看中文字幕码 | 国产一区二区在线观看动漫 | 天堂а√中文在线官网 | 天天看片高 | 国产手机在线 | 国产91精品在线观看导航 | 国产日韩欧美激情视频不卡 | 美女福利亚洲视频 | 成人性开放网 | 日本在线精品视 | 性欧美日韩 | 91精品专区国产在线观看高清 | 国产日本欧美在线观看 | 中字幕一区二区三区乱 | 国产一区二区在线观 | 免费在线观看国内色片网站网址 | 国产精品二 | 精品国产高清自在线 | 精品福利一区二区三区免费视频 | 日韩精品免费一区二区三区 | 国产在线国偷精品产拍 | 欧美性大| 中文字幕乱| 亚洲欧美中文日韩aⅴ | 国产v视频| 97精品国产自在现线免费 | 18gay男同6 | 欧美搡bb| 国产大片黄在线观看 | 无玛专区 | 亚洲四播房| 国产中老年妇女精品 | 国产一区三区二区中文在线 | 国产高清在线精品一区免费97 | 国产一区二区三区不卡在线观看 | 精品欧美一区二区三区在线观看 | 亚洲欧美成va人在线观看 | 亚洲一区二区三区精品动漫 | 欧美女同小视频在线网站 | 国产精品欧美激情 | 亚洲日本国产一区二区精品成人 | 91大神在线观看精品一区 | 中文字幕在线播放视频 | 在线天堂中文最新版www网 | 55精品视频在线 | 免费午夜伦费影视在线观看 | 91三级在线日韩精品片 | 91欧美| 在线观看视频国产 | 婷婷开心五月四房播播人 | 欧美日韩变态另类在线观看 | 91极品看片 | 日韩a级片 | 国产精品极品美女自在线观看免费 | 亚洲免费综合色在线视频 | 国产一级特黄a大片99 | 87国产私拍福利精品视频 | 欧洲精品| 国产乱ⅴ一区二区三区 | 日皮免费视频 | 国产乱伦视 | 成人aⅴ综合视频国产 | 日韩精品午 | 2025国产激情视频在线观看 | 色老大综合 | 国产福利在线 | 欧美yw精品日本国产精品 | 中文字幕日韩高清 | 玩弄牲欲强老熟女 | 国产草草| 日韩精品视 | 日本护士毛茸茸xx | 不卡视频一区二区三区免费观看 | 日本网站在线播放 | 91国语精品自产拍在线观 | 国产91精品一区二区 | 欧洲成人免费高清视频 | 又粗又硬又大又黄又爽的免 | 亚洲欧美日韩激情在线观 |