国产精品青草久-国产精品情侣愉拍-国产精品区网红主-国产精品区一区二-国产精品热久久-国产精品热热热-国产精品人aⅴ-国产精品人成在线-国产精品人妻人伦-国产精品人人

金喜正规买球

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

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

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

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

相關(guān)鏈接:

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

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

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

VMProtect最新版下載

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

許可制度

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

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

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

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

許可制度的工作模式

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

第一階段:測試模式

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

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

 第一步是創(chuàng)建一個應(yīng)用程序。這將是一個簡單的應(yīng)用程序,沒有任何用戶界面,也沒有重要的功能。我們的目標是將序列號傳遞給許可系統(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;
}

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

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

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

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

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

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

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

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

現(xiàn)在,在序列號行的正下方,我們添加對許可系統(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 文件,請確保將相應(yīng)的 DLL 文件放入我們應(yīng)用程序的工作文件夾中。如果執(zhí)行成功,您應(yīng)該會看到以下消息:

 2 對應(yīng)于API 中描述的SERIAL_STATE_FLAG_INVALID 標志。這意味著許可系統(tǒng)認為我們的密鑰不正確,這是真的,因為我們沒有向系統(tǒng)“解釋”哪些密鑰是正確的,哪些不是。

[TestLicense] AcceptedSerialNumber=Xserialnumber

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

#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:檢索序列號狀態(tài)標志

打印標志的便捷功能

首先,我們需要一個方便的函數(shù)來將標志的數(shù)值轉(zhuǎn)換為序列號的可理解狀態(tài)。下面是這個函數(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");
}

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

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

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

state = SERIAL_STATE_FLAG_INVALID
please register!

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

state = 0 We are registered.

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

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

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

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

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

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

而在程序中,如果注冊成功,我們獲取這些數(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:檢查序列號的到期日期

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

ExpDate=20000101

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

state = SERIAL_STATE_FLAG_DATE_EXPIRED please register!

現(xiàn)在讓我們在顯示“請注冊”消息和程序存在之前獲取更多信息:

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)用程序的第二次運行現(xiàn)在為我們提供了更多詳細信息:

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

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

  • 步驟1.6:限制程序的運行時間

 您可以限制程序從啟動的那一刻開始運行。這對于演示目的很有用:您向用戶提供了一個真實的序列號,但該程序的運行時間不超過 5 分鐘。許可系統(tǒng)不會強制關(guān)閉此類程序,而只是設(shè)置狀態(tài)標志。因此,讓我們通過將以下行添加到 ini 文件來將最長工作時間設(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;
}

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

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

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

  • 步驟 1.7:限制免費升級期限

怎么運行的

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

讓我們試試

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

MaxBuildDate=20000101

 在測試模式下,許可系統(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ī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=… 行,這樣它就不會影響我們的進一步步驟。

  • 步驟 1.8:黑名單中的序列號

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

首先,讓我們最小化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)在,運行程序并確保許可系統(tǒng)接受我們的序列號:

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)在,將這個序列號添加到許可系統(tǒng)的黑名單中。將以下行添加到 ini 文件中:

BlackListedSerialNumber=Xserialnumber

并再次運行程序:

state = SERIAL_STATE_FLAG_BLACKLISTED

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

  • 步驟 1.9:硬件鎖

接收硬件標識符

 在我們鎖定硬件之前,我們必須收到一個硬件標識符。標識符被放入序列號中,當(dāng)序列號傳遞給許可系統(tǒng)時,它會檢查標識符是否匹配。因此,首先我們需要接收硬件的標識符。讓我們將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;
}

通過運行該程序,我們會收到一個默認的測試硬件標識符:

HWID:myhwid

要更改標識符,請將以下行添加到 ini 文件中:

MyHWID=test

如果我們之后運行程序,我們可以看到系統(tǒng)認為“test”是我們 PC 的硬件標識符:

HWID: test

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

硬件鎖定序列號

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

KeyHWID=test

然后我們將main()復(fù)雜化一點。現(xiàn)在它將傳遞一個序列號并分析它得到的結(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;
}

運行代碼后我們會看到如下結(jié)果:

HWID: test
state = 0

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

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

HWID: new test
state = SERIAL_STATE_FLAG_BAD_HWID

 這次許可系統(tǒng)返回了 SERIAL_STATE_FLAG_BAD_HWID 標志,這意味著真實的硬件標識符與存儲在序列號中的不匹配。我們在屏幕上看到的當(dāng)前標識符是“new test”,而序列號是“test”。如果我們將 ini 文件中的 KeyHWID 參數(shù)更改為“new test”,我們也可以讓我們的序列號在這個“硬件”上工作。

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

序列號最多可容納 255 個字節(jié)的任意數(shù)據(jù),許可系統(tǒng)按原樣傳遞給程序。數(shù)據(jù)可以包含有關(guān)銷售的任何其他信息、完整版操作所需的數(shù)據(jù)或其他內(nèi)容。讓我們修改我們的main()函數(shù),讓它從序列號中讀取數(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)在,我們運行程序并確保我們的序列號正常工作,但不包含任何數(shù)據(jù):

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

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

UserData=010203A0B0C0D0E0

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

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

第二階段:實模式

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

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

在第一階段,我們制作了幾個簡單的應(yīng)用程序來測試許可系統(tǒng)的 API。現(xiàn)在,在第二階段,我們將只創(chuàng)建一個應(yīng)用程序。它還將是一個控制臺應(yīng)用程序,其foo()函數(shù)僅在注冊版本中有效。這是我們的測試應(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īng)該看到以下文本:

serial number is bad
state = SERIAL_STATE_FLAG_INVALID

 目前,許可系統(tǒng)仍在測試模式下運行,因為該文件未經(jīng)過 VMProtect 處理,并且其中不包含許可模塊。在下一步中,我們將創(chuàng)建一個 VMProtect 項目并嘗試保護我們的應(yīng)用程序。

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

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

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

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

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

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

1

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

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

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


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

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

序列號有效期

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

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

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

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

將序列號加入黑名單

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

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

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

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

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

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

  • 步驟 2.5:將代碼鎖定為序列號

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

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

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

將代碼鎖定到序列號

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

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

1

 然后,保護應(yīng)用程序。因為,我們已經(jīng)“破解”了它,將任意文本放入 serial.txt 文件并運行應(yīng)用程序。控制臺中出現(xiàn)以下文本

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

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

1

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

什么應(yīng)該鎖定到一個序列號?

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

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

鎖定序列號和無效序列號

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

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

附加信息

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

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


標簽:

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


為你推薦

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


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
国产精品秘入口久久熟女 | 色视频在线观看免费视频 | 91成人在线日本中文字幕免费 | 欧美激情一区二区 | 97久久精品亚洲中文字幕无码 | 熟女丰满老熟女熟妇 | 欧美天堂在线观看 | 国产在线观看无遮挡 | 国产精品不卡高清在线观看 | 蜜臀视频免费观看国产一区二区 | 国产丰满熟女一区二区 | 国产在线不卡免费播放 | 日韩欧美一区不卡在线观看 | 国产精品永久久久久久久久久 | 久久大香萑太香蕉av黄软件 | 午夜理论片yy6080私人影院 | 日韩人妻无码精品 | 国产福利萌白酱精品tv一区 | 亚洲一区二区三区香蕉 | 91在线超高颜值国产 | 91精品国产丝袜在线拍 | 国产剧情av巨作在线观看 | 亚洲成人黄色在线观 | 免费无遮挡无码永久在线观看视频 | 国产又大又黄又粗又爽 | 国产精品成人99久久久久 | 亚洲综合偷自成人网第页色 | 精品999久久久一级毛片 | 国产素人搭讪在线观看 | 国产精品分类视频分类一区 | 久草福利在线观 | 91影院| 色噜噜狠狠色综合网 | 午夜性影院爽爽爽爽爽爽高清 | 国产成人拍国产亚洲精品稀缺 | 中文字幕久精品免费视频 | 丰满尤物一区二区三区 | 国产主播精品一区 | 果冻传媒2025网站入口下载 | 国产精品区乱淫片人成人 | 自偷自拍亚洲综合精品 | 国产成人h视频在线播放不卡 | 精品一区二区三区在线观看视频 | 91在线网| 国产亚洲av另类一区二区三区 | 亚洲精品视频中文 | 国产午夜福利播放 | 欧美人妻制服另类人妻在线 | 色婷婷电影久久综合 | 综合国产精品私拍国产在线 | 在线观看黄色小视频 | 亚洲国产精品无码久久电影 | 91免费看片神器 | 99久久五月天婷婷中文字幕精品 | 日韩99热| 国产精品无码不卡一区二区三区 | 精品无码大爆乳在线视频 | 欧美日韩亚洲综合一区二区三区激 | 国户一区二区免费视频 | av超燃电影先生免费观看影视大全 | 国产超碰人人模人人爽人人添 | 午夜成人亚洲理论片在线观看 | 亚洲av毛片一区二区三区 | 中文字幕精品一 | 黄色网址在线免费观看 | 在线视频中文 | 9久热这里只有精品 | 欧美午夜理伦三级在线 | 精品无码国产免费网站视频 | 国产精品美女自在线观看免费 | 精品伊人久久大线蕉色 | 中文字幕亚洲一区二区三区 | 精品午夜福利1000在线观看 | 成全影视免费观看 | 亚洲综合五月天国产av | 国产精品久在线观 | 激情综合色五月丁香六月欧美 | 超碰艹人人在线观看 | 97在线视频观看 | 国产剧情调教在线 | 91超碰中文字幕久久精品 | 97香蕉超级碰碰碰久久兔费 | 91精品国产福利在线观看雪梨 | 国产啪精品视 | 91在线精品秘一区二区 | 韩国a级情欲片在线观看高清 | 91拍拍在线观看 | 无码人妻aⅴ一区二区三区 无码人妻aⅴ一区二区三区日本 | 97天堂国产在线观看 | 人妻精品久久久久中文字幕 | 高清无码不卡视频 | 中文午夜人妻无码看片 | 国产成人8x人网站在线视频 | 日韩人妻无码一区二区三区久久99 | 少妇粉嫩| 国产精品无码一区二区三区免费 | 亚洲av无码资源在 | 国产高清在线观看av片 | 91久久精一区二区三区大全 | 国产真人无码作爱免费视频 | 国产日韩欧美一区二区视频在线观看 | 午夜蜜桃视频 | 白丝被绑双腿憋尿sm调教 | 在线免费观看国产 | 国产精品视频免费一区二区三区 | 国产精品亚洲一区在线播放 | 亚洲成人色 | 91香蕉国产线在线观看免费网友评价 | 美奶福利视频一区二区三区 | 国产精品69白浆在线观看免费 | 国产在线观看人成激情视频 | 国产日产亚洲精品 | 99热从新兴趋势到潮流风口 | av无码av无码专区 | 日韩精品免费无码一区二区 | 国产av永久福利资源网站 | 国产内射一级一片内射精品视频 | 精品人妻无码一区二区色欲aⅴ | 婷婷欧美成人在线 | av片中文字幕 | 国产精品99精品久久免费 | 韩国精品一区二区三区在线观看 | 国产同事宾馆在线观看 | 91免费看片| 欧美综合自拍亚洲综合图区 | 果冻传媒2025精品一区 | 精品久久久久久无码人妻热 | 国产亚洲福利在线视频 | 成人高清在线观看www在线 | 日韩av一区二区精品不卡 | 极品中文字幕国产 | 99国产欧美久久久精品蜜芽 | 国产性色亚洲特级黄片 | a级国产乱理伦片在线观看al | 免费无遮挡又黄又爽网站 | 中文字幕国内精品久久人妻 | 精品无码又大又粗又黄的免费视频 | 国产一区二区三区精品久久 | 一区二区三区日本久久九 | 精品一区二区高清在线观看 | 97超级碰碰碰碰久久久久 | 91精品国产91久久久久久一区二区 | 97亚洲狠狠色综合久久 | 婷婷久久综合中文久久蜜桃av | 亚洲日韩av无码不卡一区二区三区 | 超碰人人在线观看 | 福利一区二区三区 | 国产三级在线观看专区 | 国产成人av无码片在线影院 | 偷拍亚洲一区二区三区 | 成年片免费观看网站免费观看 | 91天堂国产在线 | 91麻豆精品国产片在线观看 | 日韩av一级毛片无码 | 亚洲欧美黄色站在线观看 | 天天躁夜| 麻豆国产96在线 | 无码人妻精品一区二区三区秋 | 日本高清视频在线www色 | 熟女人妻一区二区三区免费看 | 成人午夜性a一级毛片免费 成人午夜性a一级毛片免费看 | 国产精品视频专区国产亚洲精品网站 | 国产成人午夜福利在线观看 | 亚洲精品午夜久久久伊人 | 午夜精品久久影院蜜桃 | 人妻少妇被猛烈进入中文字幕 | 国产桃色无码 | av黑人手机版天堂网 | 欧美人妻羞羞一区二区三区 | 亚洲中文字幕aⅴ天堂自拍 亚洲中文字幕aⅴ无码天堂 | 精品人妻一区二区三区含羞草 | 精品无码国产自产在线 | 亚洲精品乱码久久久久久麻豆 | 中文字幕aav| 免费无码午夜精品电影 | 欧美一区 | 91久热欧美极品第一页 | 精品无码专区免费播放 | 丰满爆乳无| 午夜精品久久久久久99热蜜桃 | 国产亚洲中文久久网久久 | 日本中文一二区有码在线观看 | 韩国男男腐啪gv | 亚洲av福利无码无一区二区 | av无码午夜福利一区二区三区 | 91桃色app| 免费一级做a爰片久久毛片潮 | 亚洲av高清不 | 91大神精品 | 久久99精品视免费看 | 欧美精品一区 | 成人毛片视频在线免费观看 | 日本aⅴ深夜私人噜噜噜视频 | 国产精品久免 | 巨乳人妻的誘惑高清完整版在线观看 | 丰满少妇被猛男进入高清播放 | 日韩va亚洲v | 日本精品99一区二区不卡 | 欧美一区二区在线观看 | 动漫成人无码精品一区二区三区 | 国产小视频在线观看 | 国产精品亚洲二区在线看 | 久久aaaa片一区二区 | 亚洲字幕成人中文在线观看 | 色婷婷综合久久久久中文图片 | 国产在线观看精品一区二区三 | 97人妻人人做人碰人人爽 | 波多野たの结衣在线播放 | 国产丝袜二区在线播 | 久久91这里精品国产2025 | 日韩区欧美区中文字幕 | 亚洲av日韩av男人的天堂在线 | 黄页免费在线 | 一级特黄aaa大片在线观看 | 99精品国产兔费观看久久 | 69一区二三区好的精华液 | 国产成人午夜福利小电影 | 国内精品久久久久影院优 | 无码av喷白浆在线播放 | 国产成人亚洲精品乱码在线 | 亚洲另类中文字幕 | 国产欧美日韩在线人成aaaa | 黄色网站哪里可以看 | 国产三级视频在线 | 国产丝袜调教视频免费的 | 九一果冻制品厂推出新剧达达兔 | 91福利一区日本精品国产 | 国偷自拍视频在线观看 | 国产欧美精品区 | 黄色视频网站在线观看 | 亚洲精品久久久久久伊人 | 欧美性猛交xxxx| 成人午夜精品一级毛片 | 日本不卡在线观看 | 国产精品蜜臀久久久av | 中文字幕爆乳巨爆乳 | 国产午夜精品一区二区三区四区 | 成人无码| 亚洲av综合色区无码二区爱av | 亚洲av成人一区二区三区天堂 | 99亚洲综合精品久久精品 | 制服丝袜第一页在线视频网站 | 日本老司机午夜福利在线免费观看 | 中文字幕乱码一区二区免费 | 午夜性色福利在线视频福利 | 国产亚洲av美女网站 | 91国内精品久久 | 亚洲精品亚洲人成在线观看麻豆 | 91黄色视频免费精品入口 | 国产精华最好的产 | 午夜福利视频免费看床戏激情 | 免费无码中文a级毛片 | 中条游戏网 | av在线天堂网自拍 | jk白丝极品被co到 | 国内精品久久久久久久影视麻豆 | 二区三区在线观看免费 | 91高清国产经典在线观看 | 亚洲精品视频久久 | 国产乱码精品一区二区三区四川人 | 亚洲国产天堂久久综合 | 亚洲av久久无码精品九九 | 另类尿喷潮videofree | 69堂国产成人精品视须不卡 | 91精品亚洲影视在线观看 | 国产亚洲欧美日韩在线观 | 亚洲成在人电 | 97se亚洲国产综合自在线 | 中文字幕乱码亚洲精品 | 精品无码国产在线一区二区福利姬 | 国产精品99久久免费观看 | 91欧美激情一区二区三区 | 亚洲av成人一区二区三区观看 | 91情侣在线精品国产 | 二区三级国产成人精品人人 | 99久久婷婷国产综合精品草原 | 成人国产精品视频 | 亚洲欧美日韩国产精品专区四 | 日韩av无 | 亚洲精品无码日韩国产不卡av | av国内精品久久久久影院 | 亚洲一区精品无码 | 成年女人永久免费看片 | 日韩一区二区三区 | av不卡激情在线观看 | 日本极度另类网站 | 亚洲日本va午夜中文字幕一区 | 日本gv在线一区二区三区 | 红掌文学网 | 国产精品成aⅴ人片在线观看 | 亚洲精品天堂无码中文字幕 | 精品成人免费国产片 | 亚洲精品久久久久久伊人 | 99久久国产综合精麻豆 | 91精品国产午夜福利在线观看 | 成人精品一区二区三区中文字幕 | 丰满人妻一区二区三区53视频 | 老司机91精品网站在线观看 | 精品人妻系列无码人妻 | 97色伦2视频在线观看 | 99精品国产高清一区二区三区香蕉 | 综合激情五月综合激情五月激情1 | 欧美曰韩一 | 国产精品户露av | 亚洲av无码久久忘忧草 | 亚洲成av人片在www色猫咪 | 中文字幕乱人伦高清视频 | 在线观看毛片黄片免费 | 91热久久免费视频精品欧洲 | 日日噜噜夜夜狠狠视频无 | 亚洲精品无码不卡在线播放he | www日韩黄色com| 亚洲综合色区在线观看 | 亚洲精品视频 | 亚洲精品亚洲人成在线观看麻豆 | 无码不卡av五月天 | 国产无套护士精品毛片 | 天堂网www最新版资源在线 | 欧美午夜理伦三级在线观看 | 内射一区二区精品视频在线观看 | 超碰在线97青草 | 日韩午夜影院在线观看 | 91在线无码精品秘国产 | 人妻少妇被猛烈进入中文字幕 | 精品国产三级a乌鸦在线观看99 | 久久www免费人成看片入口 | 91九色| 午夜影视 | 亚洲av乱| 久久东京国产中文字幕 | 色综合伊人色综合网站 | 日韩欧美亚洲动漫综合 | 国产精品免费视频一区二区三 | 精品三级在线国产 | 91最新国 | 国产成人无码aa精品一区 | 国产精品黄在线观 | 日韩精品无码视频免费专区 | 97欧美中文在线播放专区 | 国产伦精品一区二区三区视频痴 | 99在线精品日韩一区免费国产 | 人澡人澡人澡人澡91 | 精品一区二区三区的国产在线观 | 国产成人亚洲影院在线观看 | 91桃色视| 91av视频在线 | 亚洲无码码视频在线观看 | 国产精品91电影在线观看 | 无码人妻av一 | 国产亚洲精品精品精品 | 91在线精品 | 国产高清无码在线 | 国产久爱青草视频在线观看 | 99久久综合精品五月天 | 无码一区二区三区 | 色吊丝av熟女中文字幕 | 在线不卡的亚洲av | 精品国产av无码一 | 欧美高潮喷水hd | 黑人巨大无码中文字幕无码 | 国产精品真实灌醉女在线播放 | 欧真成人精 | 欧美一区三区究竟代表什么 | 天天日天天射伊人色综合久久 | 国产一区二区三区四区观看 | 欧美日韩一卡2卡3卡4卡国色天香 | 国产偷国产亚洲偷亚洲高 | 国产一级a爱做片免费看 | 高潮毛片又色又爽免费 | 无人视频免费观看免费视频 | 少妇av| 国产91福利在线精 | 国产精品一在线观看 | 91在线码无精品秘?入口九色 | 国产美女流出白浆在线观看 | 欧美精品一区二区 | 国产性猛交xxxx免费看久久 | 国产小视频在线观看 | 日韩一区二区三区高清电影 | 久久99精品久久久久久无毒不 | 亚洲国产综合人 | 狠狠色噜噜狠狠狠888米奇视频 | 日韩人妻系列无码专区三级 | 国产免费看黄的私人影院 | 丰满人妻精油按摩一区二区三区 | 丰满人妻熟妇乱又伦精品软件 | 亚洲精品无码久久久久久久 | 精品久久久无码人妻字幂 | 91大神在线资源观看无广告 | 国产r级在线 | 成人www视频网站免费观看 | 九九免费久久这里有精品23 | 亚洲综合人成 | 欧美日韩午夜精品不卡综合 | 亚洲av无码av专区在线观看 | 中文字幕亚洲天堂 | 97久久天天综合色天天综合88 | 无码精品人妻一区二区三 | 成人毛片无码一区二区三区 | 亚洲精品白浆高清久久久久久 | 亚洲欧美日韩国产精品 | 国产乱人伦真实精品视频 | www.色欲| 欧美人妻羞羞一区二区三区 | 91尤物在线电影 | 国产曰的好深好爽免费视频 | 992tv午夜福利 | 国产草草影院一区二区三区 | 国产在线aaa片一区二区99 | 黄色a级国产免费大片 | 成人性爱视频网站 | 麻豆视频网站男人的天堂 | 国产综合在线观看 | 91精品国产麻豆91久久久久久 | 无码精品一区二 | 国产91九色在线 | 一级无码片中文 | 精品亚洲视频在线观看 | 97无码人妻福利免费公开在线视频 | 97超开公碰在线视频 | 在线观看黄aⅴ免费观看 | 国语精品91自产拍在线观看一区 | 丰满少妇av无码区 | 国产口爆吞精在线观视频 | 久久2025国产精品 | 丝袜国产高跟在线一区 | 成年人视频公开 | 人妻中文字幕在线 | 免费一级a毛片在线播放 | 欧美大片va | 日韩伦理片在线观看光棍影院 | 日本女优久久久啊的黄色视频 | 亚洲成av人片在一线观看 | 韩国无码一区二区三区在线观看 | 国产乱视频在线观看 | 精品无码国产不卡在线观看首 | 国产精品免费视频网站 | 国产乱妇乱 | 殴美一性一乱一交一视频 | 成人av专| 欧美亚洲视频在线二区 | 亚洲av无码乱码麻豆精品国产 | 国产毛片精品 | 日韩精品一区二区亚洲 | 国内精品久久久久久99蜜桃 | 亚洲精品无码不卡在线播放he | 东京热人妻欧美一区2区3区 | 99麻豆久久久国产精品免费 | 婷婷亚洲综合 | 色婷婷我要去我去也 | h无码精品动漫在线观看导航 | 国产高清免费av片在线观看不卡 | 国产激情对| 色婷婷在线观看视频 | 99久久成人国产精品免费 | 爆乳办公室在 | 成人免费网站久久久 | 91在线啪国自产观看高清频道 | 亚洲大片在线观看网址 | 午夜国产福利看片 | 亚洲综合色区在线观看 | 亚洲精品乱码久久久 | 欧洲美女黑人粗性暴交 | 无码中文字幕aⅴ免费费放 无码中文字幕精品推荐 | 亚洲影院丰满少妇中文字幕无码 | 国产成人午夜福 | 色欲aⅴ精品一区二区在线播 | 91大神的探花视频 | 国产成人免费a在线视频 | 国产欧美日韩在线人成aaaa | 亚洲成a人片在线观看网站 亚洲成a人片在线观看无码 | 国产精品无码无在线观看 | 欧美成人精品三级网站在线观看 | 97亚洲熟妇自 | 成人午夜激情福利动态 | 免费无码片国产在线观看 | 高清无码在线二区亚洲无码精品免费 | 91丝袜美腿的无尽魅力呈现 | 91香蕉国产线在线观看免费 | 中文字幕人妻伦伦 | 在线观看免费a片视频 | 欧美日韩精品一区二区三区四区 | 三级无码在线 | 日韩理论电影在线观看 | 亚洲日韩一区二区三区 | 国产免费av东京热 | 操人网站| 麻豆av一区二区 | 无码人妻精一区二区三区 | a级国产乱理伦片在线观 | 国产日韩欧美京东综合在线影院 | 人人妻人人| 91人妻人人澡人人爽人人精品乱 | 97在线观看永久免费视频 | 亚洲国产精品成人av在线 | 91麻豆精品国产自产在线观看 | 很黄色的久久精品黄色片子 | 日本免费一区二区三区最新 | 久草在.com| 亚洲中文字幕码在线电影 | 国产高清一区二区三区视频 | 果冻破解版(果冻视频)下载免费 | 亚洲国产一区二区在线观看 | 99精品热在线观看视频88 | 国产午夜激无玛av毛片不卡 | 一级日本高清视频免费观看 | 日本成人电影中文字幕 | 在线另类稀缺国产精品 | 亚洲精品合集直播在 | 亚洲乱码国产乱码精品精 | 国产99视频精品免费视频36 | 91啪国产在线 | 亚洲成在人网站天堂日本 | 麻豆91传媒一区 | 国产精品亚洲一区二区三区 | 日韩精品在线第二页 | 国产精品日韩欧美 | 91网址在线播放 | 日韩精品国产自在久久现线拍 | 丰满人妻中伦妇伦精品久久 | 欧美日韩在大午夜爽爽影院 | 97久久精品无码一区二区欧美人 | 国产999精品久久久久久 | 精品无码国产自产在线观看水 | 在线观看国产的 | 性做久久久久久久久 | 国产第一在 | 日本特黄高清a一级视频 | 国产亚洲制服免视频 | 日本一区二区三区在线观看网站 | 亚洲日韩欧美 | 日韩av午夜中文字幕 | 欧美日韩一区二区综合 | 麻豆一区二区三区四区 | 日韩亚洲欧美一区噜噜 | 国产亚洲一区二区三区 | 国产电影在线观看 | 国产精久久一区二 | 深夜看免费网站 | 91果冻传媒app| 国产亚洲精品精品精品 | 亚洲不卡无码av中文字幕 | 91影院| 国产愉拍91九色国产愉拍热度飙升 | 国产av性网站| 人妻精品久久无码区 | 国产久爱青草视频在线观看 | 亚洲av无码成人网站久久 | 精品久久香蕉国产线看观看亚洲 | 在线观看亚洲av无码每日更新 | 天天拍天天夜 | 日本ⅴ精品一区二区三区久久 | 亚洲精品91大神在线观看 | 三颗国产精品视频一区二区免费 | 国产自产一区二区三区视频在线 | 国产成人午夜福利在线观看视频 | 国产精品巨作av无遮挡 | 国产真实伦视频 | 中文字幕av一本 | 性做久久久久久久久 | 国产成人无码精品久 | 国产午夜精品久久久久九九 | 亚洲女同一区二区三区 | 国产精品国产三级国产专不∫ | 成全影院大全在线观看中文字幕 | 国产综合国产精品 | 少妇被粗大猛进进出出 | 精品无码又大又粗又黄的免费视频 | 欧美日韩国产免费一区二区三区 | 亚洲成av人片无码不卡播放器 | 亚洲熟妇自偷自拍另类图片站 | 狠狠综合久久久久精品网站 | 国产一线二线在线观看成人av | 国产性猛交╳xxx乱大交 | 国产性色av | 无码国产色欲xxxx视频 | 极品尤物国产在线播放 | 午夜视频国产99在线看 | 成人精品第一区二区三区 | 国产一区二区不卡免费观在线 | 国产亚洲免费在线观看 | 午夜视频体内射.com.com | 午夜成人精品无码色欲 | 精品在线免费观看 | 97婷婷视频在线 | 亚洲av无码成人专区片在线观看 | 99久久精品国产毛片 | 欧美日韩女优在线 | 国产精品蜜桃在线观看 | 国产精品99久久久久久 | 自在自线国产精品 | 熟女丰满:丰盈之美 | 91久久婷婷国产综合精品青草 | 国产三级a毛视频在线观看 国产三级a三级三级 | 在线一区国产 | 成全视频在线观看 | 亚洲aⅴ无码乱码在线播放 亚洲aⅴ无码码潮喷在线观看 | 亚洲va综合va国产产va中文 | 国产人妖第二页 | 99久久精品成人一区二区三区 | 成人h在线一区二区 | 国产午夜无码精品免费看粉 | 午夜影院一区二区三区 | 成人午夜看片 | 91视频手机版app下载 | 亚洲一级av| 国产精品国| 日本成人电影中文字幕 | 国产欧美日韩综合精品一区二区 | 国产精品户露av | 久久91这里精品国产2025 | 成年女人a级毛片免费观看 成年女人a毛片免费视频 | 国产91av在线播放 | 黄色大片网站 | 亚洲国产精品看片在线观看 | 亚洲欧美一区二区三区一猛片 | 91人妻中文字幕在线精品 | 亚洲aⅴ永久无码天 | 亚洲欧美国 | 国产成人高清在线播放 | 亚洲日韩国产av无码无码精品 | 国产精品无码一区二区三区 | 欧洲人体亚洲 | 亚洲第一天堂国产丝袜熟女 | 天天干夜夜操天天干 | 国内精品久久久久久不卡影院 | 欧美激情一区二区久久久 | 亚洲va欧美va国产 | 亚洲视频在线观看不卡 | 国产在线观看免费无码 | 日韩欧美亚洲综合久久 | 无码人妻一区二区三区免水牛视 | 91欧美激情一区二区三区成人 | 亚洲国产欧美日本视频 | 在线观看日韩欧美大片 | 国内偷视频在线观看 | 午夜成人精品无码色欲 | 亚洲av高清在线一区二区三区 | 精品动漫中文字幕一区二区三区 | 九一香蕉视频 | 国产91在线播放九色000 | 亚洲中文字幕无码永久在 | 国产综合久久久久久鬼色 | 一区二区三区国产美女在线播放 | 91香蕉破解版 | 精品日韩欧美国产一区 | 中文性按摩1区2区3区 | 亚洲国产精品无码久久98 | 国产精品三级在线观看 | 国产精品亚洲成在人线 | 蜜臀久久99精品久久久久久 | bt天堂www中文在线资源 | 无码a√毛片一区二区三区 无码aⅴ精 | 久久99精品综合国产首页 | 久99视频精品 | 欧美日韩精品一区二区在线观看 | 欧美97色伦欧美一区二区日韩 | 人妻少妇精品无码专区二区 | 中文字幕无线码一区 | 91国内揄拍国内精品对白 | 无码国产伦一区二区三区视频 | 国产精品自产拍高潮在线观看 | 精品一区二区三区视频免费观看 | 三上悠亚av | 亚洲av色香蕉一区二区三区 | 99久久无码免费国产 | 国产精品日韩精 | 亚洲熟妇无码八av | 欧洲电视剧排行榜 | 福利姬液液酱涉嫌参与非法活动 | 91视频播放 | 精品国产综合区久久久久久 | 精品在线免费观看 | 中文字幕亚洲综合久久青草 | 精品综合久久久久久97超人 | 亚洲五月天 | av无码国产在线看免费网站 | 人妻斩无码正片免费视频 | 精品无人区乱码1区2区3区在线 | 亚洲精品乱码久久久久久麻豆 | 国产成人亚洲精品无码vr | 花蝴蝶在线观看片3 | 成人在线永久 | 97se亚洲综合在线 | 亚洲av无码专区电影在线观看 | 国产99久久九九精品无码 | 国产91精选在线观看导航 | 办公室秘书无码激情av | 国产综合久久99久久 | 99视频精品全部免费在线 | 九九动漫精品亚洲 | 精品无码av一区二区三区 | 精品一区二区三区东京热 | 亚洲国产成人高清片在线观看 | 日韩欧国产精品一区综合无码 | 无码人妻免费—区二区三 | 国产噜噜噜噜久久久久久久久 | 精品午夜国产福利在线观看 | 欧美综合在线一区 | 四虎在线播放无码 | 久久高清精品一区二区三区 | 91在线码无精品秘入口九色 | 日韩国产不卡一区二区三区 | 自慰少妇裸体无码30p | 亚洲av无码专区国产乱码 | 成人免费网站久久久 | 日本黄大片在线观看视频 | 丰满的瑜伽老师 | 91精品国产综合久久 | 精品国产一区二区三区 | 国产欧美日本韩高清视频一区 | 人与动物ppt免费模板大全 | 无码精品国产笫1页 | 高潮喷奶水在线播放视频 | 国产一二三区视频 | 国产在线观看私人影院 | 国产无圣光一区福利二区 | 成全高清 | 在线无码中文字幕一区 | 亚洲国产福利一区二区三区 | 午夜福利久久久噜久噜久久综合 | 国产午夜鲁丝无码拍拍 | 午夜色福利| 国产aaaaa毛片高清视频 | av天堂电影网 | 日本视频免费观看的网站 | 蝌蚪窝在线观看免费视频 | 亚洲精品福利在线观看 | 日日摸人人澡97香蕉 | 91传媒在线 | 亚洲av永久无码精品一区二区国产 | 亚洲av综合av一区二区三区 | 在线看片免费人成视频 | 人妻免费公开在线视频 | 国产午夜亚洲精品不卡 | 3d动漫| 午夜国产在线观看 | 国产免费网站看v片在线软件 | 欧美无人区码 | 人人妻人人澡人人爽人人精品电影 | 97久久草草超级碰碰碰 | 国产v片成人影院在线观看 国产v片在线播放 | 亚洲精品网站在 | 人人爽人人爽人人片av东京热 | 成人精品一区在线 | 自拍偷自拍亚洲精品情侣 | 亚洲精品国产第一 | 亚洲日韩一区 | 欧洲精品一区二区 | 亚洲午夜精品久久久久久app | 欧美日韩激情一区二区三区 | 国产操操| 久久99精品久久久久久9 | 国产成人精品777 | 天天操夜夜骑 | 国产v标志的车是什么牌子? | а天堂中文地址在线 | 国产高清自拍一区 | 91精品国产自产在线观看不卡 | 国产精品动漫一区二区在线观看 | 国产在线拍揄自揄视精品一区 | 伊人天堂av无码av日韩av | 亚洲av无一区二区三区久久 | 无码aⅴ精品一区二区三区浪潮 | 国产亚洲av手机在线观看 | 国产91香蕉在线精品 | 亚洲精品分类在看在线观看 | 欧美色欲激情视频一区二区三区 | 精品国产乱子伦一区二区三区 | 亚洲成a人v欧美综合天堂 | 欧美大片va| 亚洲精品久久国产精品37p | 亚洲午夜精品久久久久久影 | 国产线路中文字幕 | 国产亚洲av片在线观看18女人 | 免费无遮挡无码视频在线观看 | 偷自拍亚洲视频在线观看99 | 蜜臀久久99精品久久久久久 | 国产精品4p露脸在线播放 | 熟女综合一区二区 | 国产国语成人三级丰满激情视频在线 | 午夜精品久久久久久中宇 | 午夜三级a三级三点自慰 | 亚洲av色区一区二区三区 | 国产亚洲性色av大片久久香蕉 | 中文字幕在线观看国产 | 中文字幕在线观看国产 | 国产精品初高中精品免费观看 | 91香蕉小视频 | 无码视频一区二区三区在线观看 | 人妻暴雨中被强制侵犯在线 | 久久成人国产精品免费软件 | 91福利国产极品美女在线观看 | 国产精品四虎 | 波多野结衣aⅴ在线 | 91在线精品 | 国产一区一二区高清不卡 | 91精品在线播放 | 国产精品亚洲v毛片一区二区 |