国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

國(guó)際貿(mào)易英文網(wǎng)站網(wǎng)站標(biāo)題seo外包優(yōu)化

國(guó)際貿(mào)易英文網(wǎng)站,網(wǎng)站標(biāo)題seo外包優(yōu)化,如何提高網(wǎng)站的知名度,wordpress模板添加授權(quán)API HOOK 顧名思義是掛鉤API函數(shù),攔截,控制某些API函數(shù)的調(diào)用,用于改變API執(zhí)行結(jié)果的技術(shù)。 大致流程: 進(jìn)入進(jìn)程->獲取相關(guān)權(quán)限->將我們寫(xiě)的dll寫(xiě)入進(jìn)程內(nèi)存->加載kernel32中的LoadLibrary()以調(diào)用我們寫(xiě)的dll。 http:/…

API?HOOK?顧名思義是掛鉤API函數(shù),攔截,控制某些API函數(shù)的調(diào)用,用于改變API執(zhí)行結(jié)果的技術(shù)。


大致流程:

進(jìn)入進(jìn)程->獲取相關(guān)權(quán)限->將我們寫(xiě)的dll寫(xiě)入進(jìn)程內(nèi)存->加載kernel32中的LoadLibrary()以調(diào)用我們寫(xiě)的dll。


http://blog.csdn.net/junbopengpeng/article/details/28142669一文中有更加詳細(xì)的講解,以下代碼源自http://blog.chinaunix.net/uid-660282-id-2414901.html,對(duì)其做了修正,同時(shí)添加了詳細(xì)注釋,實(shí)現(xiàn)劫持源程序的MessageBox函數(shù),改變其標(biāo)題和內(nèi)容,歡迎質(zhì)詢,一起學(xué)習(xí)。


源程序(我們劫持的程序):

#include#includeint main(){
printf("hello world!\n");
while(1){
getchar();
MessageBoxA(NULL, "原函數(shù)", "yuan", 0);
}
return 0;
}

我們編寫(xiě)的dll:
#include "windows.h"
#include "process.h"
#include "tlhelp32.h"
#include "stdio.h"
#pragma comment(lib,"th32.lib")
PIMAGE_DOS_HEADER pDosHeader;
PIMAGE_NT_HEADERS pNTHeaders;
PIMAGE_OPTIONAL_HEADER    pOptHeader;
PIMAGE_IMPORT_DESCRIPTOR pImportDescriptor;
PIMAGE_THUNK_DATA        pThunkData;
PIMAGE_IMPORT_BY_NAME    pImportByName;
HMODULE hMod;
// 定義MessageBoxA函數(shù)原型
// MessageBox函數(shù)原型:int WINAPI MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);
typedef int (WINAPI *PFNMESSAGEBOX)(HWND, LPCSTR, LPCSTR, UINT uType);
int WINAPI MessageBoxProxy(IN HWND hWnd, IN LPCSTR lpText, IN LPCSTR lpCaption, IN UINT uType);
int * addr = (int *)MessageBoxA;     //保存函數(shù)的入口地址
int * myaddr = (int *)MessageBoxProxy;
void ThreadProc(void *param);//線程函數(shù)
//主函數(shù):
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved){
if(fdwReason==DLL_PROCESS_ATTACH) 
//進(jìn)程映射
//每個(gè)進(jìn)程的第一次映射用DLL_PROCESS_ATTACH調(diào)用DLL的DllMain函數(shù)。
_beginthread(ThreadProc,0,NULL);     
return TRUE; 
}
//結(jié)束進(jìn)程的函數(shù):
void ThreadProc(void *param){
//------------hook api----------------
hMod = GetModuleHandle(NULL);
//返回自身應(yīng)用程序句柄
pDosHeader = (PIMAGE_DOS_HEADER)hMod;
pNTHeaders = (PIMAGE_NT_HEADERS)((BYTE *)hMod + pDosHeader->e_lfanew);
pOptHeader = (PIMAGE_OPTIONAL_HEADER)&(pNTHeaders->OptionalHeader);
//定位Dos頭,NT頭,可選頭
pImportDescriptor = (PIMAGE_IMPORT_DESCRIPTOR)((BYTE *)hMod + pOptHeader->DataDirectory[1].VirtualAddress);
//導(dǎo)入表ID
while(pImportDescriptor->FirstThunk){
//IAT的RVA
char * dllname = (char *)((BYTE *)hMod + pImportDescriptor->Name);
//被導(dǎo)入的DLL 名稱
pThunkData = (PIMAGE_THUNK_DATA)((BYTE *)hMod + pImportDescriptor->OriginalFirstThunk);
//IMAGE_THUNK_DATA的RVA
int no = 1;
while(pThunkData->u1.Function){
//被輸入的函數(shù)的內(nèi)存地址
char * funname = (char *)((BYTE *)hMod + (DWORD)pThunkData->u1.AddressOfData + 2);
//AddressOfData指向IMAGE_IMPORT_BY_NAME(導(dǎo)入函數(shù)名稱),
//+hMod+2后,到導(dǎo)入的DLL(user32.dll)函數(shù)導(dǎo)出表中獲取導(dǎo)入函數(shù)的地址
PDWORD lpAddr = (DWORD *)((BYTE *)hMod + (DWORD)pImportDescriptor->FirstThunk) +(no-1);
//為了下方VirtualQuery窮舉每一塊內(nèi)存信息,no++
//修改內(nèi)存的部分---------------------------------
if((*lpAddr) == (int)addr){
//修改內(nèi)存頁(yè)的屬性
DWORD dwOLD;
MEMORY_BASIC_INFORMATION mbi;
VirtualQuery(lpAddr,&mbi,sizeof(mbi));
//獲取內(nèi)存信息
VirtualProtect(lpAddr,sizeof(DWORD),PAGE_READWRITE,&dwOLD);
//在呼叫處理程序的虛擬位址空間里,變更認(rèn)可頁(yè)面區(qū)域上的保護(hù),
//請(qǐng)求PAGE_READWRITE,保存老的保護(hù)方式:dwOLD
WriteProcessMemory(GetCurrentProcess(),lpAddr, &myaddr, sizeof(DWORD), NULL);
//寫(xiě)入某一進(jìn)程的內(nèi)存區(qū)域
//恢復(fù)內(nèi)存頁(yè)的屬性----------------------------
VirtualProtect(lpAddr,sizeof(DWORD),dwOLD,0);
}
no++;
pThunkData++;
}
pImportDescriptor++;
}
//-------------------HOOK END-----------------
}
//new messagebox function
int WINAPI MessageBoxProxy(IN HWND hWnd, IN LPCSTR lpText, IN LPCSTR lpCaption, IN UINT uType)
{
return   ((PFNMESSAGEBOX)addr)(NULL, "HOOK成功","success",0);
//這個(gè)地方可以寫(xiě)出對(duì)這個(gè)API函數(shù)的處理代碼
}

此處想補(bǔ)充一下dll文件的生成方式:在vc中新建工程Win32 Dynamic-Link Library,再在該工程中新建文件C++ Source File,代碼完成后,compile->build即可,我們寫(xiě)的dll存放于該工程目錄下的Debug文件夾中。

開(kāi)始HOOK:

#include "windows.h"
#include "tlhelp32.h"
#include#pragma comment(lib,"th32.lib")
const char *pkill="dll3.dll";//DLL文件的路徑
//這個(gè)路徑很有意思,這個(gè)路徑是相對(duì)于目標(biāo)進(jìn)程的,而不是自身進(jìn)程。
//所以要嘛寫(xiě)成絕對(duì)路徑,要嘛寫(xiě)成相對(duì)于目標(biāo)進(jìn)程的相對(duì)路徑。
//如果寫(xiě)成相對(duì)于自身的路徑就要麻煩了,本程序就找不到DLL文件了。 
char *prosess="yuan.exe";//要注入的進(jìn)程名(目標(biāo)進(jìn)程名)
int main(){
HANDLE hSnap;//獲取進(jìn)程信息 
HANDLE hkernel32;//被注入進(jìn)程的句柄
PROCESSENTRY32 pe;//存放進(jìn)程信息和調(diào)用成員輸出進(jìn)程信息的結(jié)構(gòu)體 
BOOL bNext;//是否還有下一個(gè)進(jìn)程 
HANDLE hToken;
TOKEN_PRIVILEGES tp;//包括LUID和特權(quán)的屬性的結(jié)構(gòu)體 
LUID Luid;//locally unique identifier,保證局部唯一 
LPVOID p;
FARPROC pfn;
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken)){
//打開(kāi)與進(jìn)程相關(guān)聯(lián)的訪問(wèn)令牌 
return 1;
}
if (!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&Luid)){
//查看系統(tǒng)權(quán)限的特權(quán)值:SE_DEBUG_NAME,存在Luid中 
return 1;
}
tp.PrivilegeCount = 1;
//指定特權(quán)數(shù)組的個(gè)數(shù):1 
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//特權(quán)數(shù)組的類(lèi)型:特權(quán)啟用 
tp.Privileges[0].Luid = Luid;
//局部唯一 
if (!AdjustTokenPrivileges(hToken,0,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL)){
//該函數(shù)啟用或禁止指定訪問(wèn)令牌的特權(quán)
return 1;
}
pe.dwSize = sizeof(pe);
//結(jié)構(gòu)體大小 
hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
//通過(guò)獲取進(jìn)程信息為指定的進(jìn)程、進(jìn)程使用的堆[HEAP]、模塊[MODULE]、線程建立一個(gè)快照
bNext=Process32First(hSnap, &pe); 
//獲得第一個(gè)進(jìn)程的句柄
while(bNext) {
if(!stricmp(pe.szExeFile,prosess)){
//該進(jìn)程的可執(zhí)行文件名稱是否是我們需要的 process 
hkernel32=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_WRITE|PROCESS_VM_OPERATION,1,pe.th32ProcessID);
//如果兩者一樣,打開(kāi)該進(jìn)程 
break;
}
bNext=Process32Next(hSnap, &pe); 
//不一樣則尋找下一個(gè) 
}
CloseHandle(hSnap);
p=VirtualAllocEx(hkernel32,NULL,strlen(pkill),MEM_COMMIT,PAGE_READWRITE);
//在指定進(jìn)程的虛擬空間保留或提交內(nèi)存區(qū)域 
WriteProcessMemory(hkernel32,p,pkill,strlen(pkill),NULL);
//將我們的dll寫(xiě)入該進(jìn)程內(nèi)存 
pfn=GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA");
//獲取 kernel32.dll中的 LoadLibraryA(),用以加載我們的dll 
CreateRemoteThread(hkernel32,NULL,0,(LPTHREAD_START_ROUTINE)pfn,p,NULL,0); 
//pfn在CreateRemoteThread類(lèi)型為:LPTHREAD_START_ROUTINE
return 0;
}

效果截圖:

需要注意的是,在hook過(guò)程中,原函數(shù)不要關(guān)閉噢,否則就沒(méi)有該進(jìn)程了。

http://aloenet.com.cn/news/35185.html

相關(guān)文章:

  • wordpress做下載型網(wǎng)站6騰訊廣告代理商加盟
  • 網(wǎng)站輪播圖片特效seo手機(jī)關(guān)鍵詞排行推廣
  • 網(wǎng)頁(yè)怎么制作長(zhǎng)面天貓seo搜索優(yōu)化
  • WordPress主題Cute主題網(wǎng)站優(yōu)化的方法與技巧
  • 網(wǎng)站如何做seo優(yōu)化教程標(biāo)題優(yōu)化
  • 中國(guó)前500強(qiáng)企業(yè)名單煙臺(tái)seo關(guān)鍵詞排名
  • 網(wǎng)站優(yōu)化怎么做ppt站長(zhǎng)推廣網(wǎng)
  • 我想做亞馬遜網(wǎng)站怎么做seo刷網(wǎng)站
  • 建建建設(shè)網(wǎng)站公司網(wǎng)站seo軟文是什么意思
  • 達(dá)內(nèi)網(wǎng)站開(kāi)發(fā)學(xué)習(xí)培訓(xùn)seo下載站
  • wordpress怎么防站長(zhǎng)春百度網(wǎng)站優(yōu)化
  • 做金融平臺(tái)網(wǎng)站需要多少錢(qián)網(wǎng)站推廣包括
  • oa網(wǎng)站建設(shè)企業(yè)網(wǎng)站建設(shè)專業(yè)服務(wù)
  • 網(wǎng)站服務(wù)器租賃費(fèi)用網(wǎng)站制作建設(shè)
  • 公積金網(wǎng)站 如何做減員百度投訴電話人工客服24小時(shí)
  • 網(wǎng)站建設(shè)發(fā)言臨沂seo排名外包
  • 做pvc卡片的交流網(wǎng)站合肥百度seo代理
  • 做俄羅斯網(wǎng)站作品推廣
  • 哪些網(wǎng)站做的比較好看的自己可以做網(wǎng)站嗎
  • 網(wǎng)站分析 實(shí)例2022最新新聞素材摘抄
  • 建立學(xué)校網(wǎng)站需要多少錢(qián)?福州百度推廣排名優(yōu)化
  • 網(wǎng)站見(jiàn)建設(shè)seo高端培訓(xùn)
  • 平面設(shè)計(jì)包括哪些方面的設(shè)計(jì)北京網(wǎng)站seowyhseo
  • 個(gè)人網(wǎng)站制作模板圖片什么網(wǎng)站可以免費(fèi)推廣
  • 網(wǎng)站架構(gòu)和網(wǎng)絡(luò)seo優(yōu)化公司哪家好
  • 網(wǎng)站wordpress主題遼寧網(wǎng)站建設(shè)
  • 株洲網(wǎng)站設(shè)計(jì)公司百度競(jìng)價(jià)排名是什么意思
  • 建網(wǎng)站是什么技術(shù)怎么樣才能引流客人進(jìn)店
  • 成都有哪些做網(wǎng)站的優(yōu)化一個(gè)網(wǎng)站需要多少錢(qián)
  • 做網(wǎng)站如何購(gòu)買(mǎi)服務(wù)器百度收錄入口