日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

VC6.0蕉HOOK_timeGetTime 达到变速效果

發(fā)布時間:2024/4/11 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC6.0蕉HOOK_timeGetTime 达到变速效果 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
注意這個 MytimeGetTime 函數(shù)內(nèi)部的加速算法是有問題的,對有些進(jìn)程只能加速,不能減速,減速后就會卡主。。。



本帖隱藏的內(nèi)容

#include "StdAfx.h" //預(yù)處理文件放第一行 ,否則 有些函數(shù) 會報錯

#include <windows.h>

#include <stdio.h>



DWORD dwAddrtimeGetTime; //保存真的timeGetTime函數(shù)地址



DWORD WINAPI MytimeGetTime(void)//自己寫的假冒的api函數(shù)

{

// DWORD ret=2*GetTickCount(); //函數(shù)直接返回2倍加速、或3倍、4倍、

return 4*GetTickCount();//函數(shù)直接返回2倍加速、或3倍、4倍

}





//JMP跳轉(zhuǎn)-自定義函數(shù)

void WriteJMP(DWORD ProcAddr,LPVOID lpData)

{

BYTE _data[5];//聲明了一個字節(jié)數(shù)組_data,字節(jié)長度為5

_data[0]=0xE9;// 0xE9代表匯編指令JMP

DWORD OldPro;//聲明了一個整數(shù)OldPro,保存原來的內(nèi)存屬性

VirtualProtect((LPVOID)(ProcAddr),5,PAGE_EXECUTE_READWRITE,&OldPro);

//VirtualProtect函數(shù)功能是修改內(nèi)存屬性

//第一個參數(shù) ProcAddr 是真的API函數(shù)地址,這里作為內(nèi)存地址看待?

//第二個參數(shù) 5代表的是字節(jié)長度

//第三個參數(shù) PAGE_EXECUTE_READWRITE 內(nèi)存的屬性設(shè)置為可讀可寫

//第四個參數(shù) OldPro 保存原來的內(nèi)存屬性

//VirtualProtect的函數(shù)功能為:修改Api函數(shù)的內(nèi)存屬性-改為'可讀可寫



memcpy((LPVOID)(_data+1),lpData,4);//_data是變量的內(nèi)存地址



// WriteProcessMemory 和 memcpy 功能是一樣的都是修改內(nèi)存,可以修改youxi內(nèi)存也可以youxi變量的內(nèi)存數(shù)據(jù)



//memcpy函數(shù)是功能是:修改內(nèi)存

//第一個參數(shù) 內(nèi)存地址

//第二個參數(shù) 可以是內(nèi)存地址也可以具體的數(shù)值

//第三個參數(shù) 數(shù)據(jù)長度



//以上是填充 機(jī)器碼字節(jié)數(shù)組data[1]...到 data[4]

// _data[0]= 0xE9; _data變量的的內(nèi)存地址為(LPVOID)_data?

// _data[1]= 0x70; _data變量的的內(nèi)存地址為(LPVOID)_data+1

// _data[2]= 0xC7;?

// _data[3]= 0xD4;?

// _data[4]= 0x90;

memcpy((LPVOID)(ProcAddr),_data,5);



VirtualProtect((LPVOID)(ProcAddr),5,OldPro,&OldPro);//內(nèi)存屬性恢復(fù)為只讀



}







//卸載HOOK -恢復(fù)timeGetTime函數(shù)頭的5個字節(jié)

void UnHOOK(DWORD ProcAddr)

{

BYTE _data[5];//聲明了一個字節(jié)數(shù)組_data,字節(jié)長度為5

DWORD OldPro;//聲明了一個整數(shù)OldPro,保存原來的內(nèi)存屬性

VirtualProtect((LPVOID)(ProcAddr),5,PAGE_EXECUTE_READWRITE,&OldPro);

//修改內(nèi)存屬性為可讀可寫,修改長度為5,PAGE_EXECUTE_READWRITE表示可讀可寫?



_data[0]= 0x83;?

_data[1]= 0x3D;

_data[2]= 0x14;

_data[3]= 0x00;

_data[4]= 0xB3;

memcpy((LPVOID)(ProcAddr),_data,5);

//通過字節(jié)數(shù)組的形式把83,3D,14,00,B3原來的5個字節(jié)寫入 真Api函數(shù)地址

VirtualProtect((LPVOID)(ProcAddr),5,OldPro,&OldPro);//內(nèi)存屬性恢復(fù)為只讀



}





BOOL WINAPI DllMain(HINSTANCE hmodule,DWORD reason, LPVOID lpreserved)

{

if(reason==DLL_PROCESS_ATTACH)// 如果DLL被注入到其他進(jìn)程,DLL_PROCESS_ATTACH表示注入DLL的時候

{





HMODULE hWsock32=GetModuleHandle("winmm.dll");//獲取winmm.dll模塊句柄

dwAddrtimeGetTime=(DWORD)GetProcAddress(hWsock32,"timeGetTime");//獲取api函數(shù)timeGetTime真正的地址

DWORD tmp=(DWORD)MytimeGetTime-(dwAddrtimeGetTime+5);// 假冒的API函數(shù)地址的字節(jié)(一個4個字節(jié))

//通過字節(jié)的形式來代表假冒api函數(shù)MytimeGetTime的地址 ,保存到變量tem里面

//公式:假冒的API函數(shù)地址的4個字節(jié)=My函數(shù)地址-(真的函數(shù)地址+5)



WriteJMP(dwAddrtimeGetTime,&tmp);//開始HOOK-修改timeGetTime函數(shù)頭的5個字節(jié)



}



if(reason==DLL_PROCESS_DETACH)// 如果DLL被卸載, DLL_PROCESS_DETACH表示卸載DLL的時候

{

UnHOOK(dwAddrtimeGetTime);//卸載HOOK -恢復(fù)timeGetTime函數(shù)頭的5個字節(jié)

}



return TRUE;

}

總結(jié)

以上是生活随笔為你收集整理的VC6.0蕉HOOK_timeGetTime 达到变速效果的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。