Win32 程序相關的API

2021-10-02 20:39:42 字數 3636 閱讀 4270

開啟程序控制代碼(通過程序id)

開啟模組控制代碼/基址(根據程序控制代碼、模組名)

獲取模組的檔案全路徑(根據程序控制代碼、模組控制代碼)

獲取模組的檔名(根據程序控制代碼、模組控制代碼)

獲取模組的映象大小、入口位址(通過程序控制代碼、模組起始位址)

讀取程序的記憶體

獲取程序的所有模組的控制代碼

#include #include //**

// method: getpentrylist

// description:獲取程序entry32列表(createtoolhelp32snapshot程序快照方式),獲取程序id和exe名

// parameter: out std::vector> & list -

// returns: void -

//**

void mytools::getpentrylist(out std::vector>& list)

delete(info);

closehandle(handle);

return;

}

//**

// method: getpidlist

// description:獲取程序id列表(enumprocesses方式)

// parameter: out std::vector> & pidlist -

// returns: void -

//**

void getpidlist(out std::vector& pidlist)

return;

}

32位程序中無法開啟64位程序,而64位程序既可以開啟32位程序也可以開啟64位程序。

可以使用iswow64process巨集判斷目標程序的位數。

//判斷是32位還是64位程序,iswow64process用於判斷某程序是否執行在wow64下。

//對於64位程式,wow64process引數會返回false!

bool wow64process;

iswow64process(hprocess, &wow64process);

if(wow64process==true)

提權函式:經測試發現沒有任何效果,可能win10不再需要提權令牌了?只需管理員許可權就夠了?

//**

// method: upprivileges

// description:提權函式,但暫時看不到效果,很多程序提權後仍打不開:

// returns: bool -

//**

bool upprivileges()

else

}if (!lookupprivilegevalue(null, se_debug_name, &luid))

zeromemory(&tp, sizeof(tp));

tp.privilegecount = 1;

tp.privileges[0].luid = luid;

tp.privileges[0].attributes = se_privilege_enabled;

/adjust token privileges /

if (!adjusttokenprivileges(htoken, false, &tp, sizeof(token_privileges), &oldtp, &dwsize))

// close handles

printf("upprivileges success ! \n");

closehandle(htoken);

return true;

}

//**

// method: getmodulename

// description:獲取模組的檔名(根據程序控制代碼、模組控制代碼)

// parameter: handle hprocess -

// parameter: hmodule hmodule - 引數為null時表示獲取主模組的檔名

// parameter: out wchar modulefilename - 是檔名,不是全路徑

// returns: void -

//**

void mytools::getmodulename(handle hprocess, hmodule hmodule, out wchar modulefilename)

; dword buffersize = getmodulefilenameex(hprocess, hmodule, out fullpath, sizeof(fullpath));

//從全路徑中擷取exe檔名

int len = wcslen(fullpath);

for (int i = len - 1; i >= 0; i--)

}}

//開啟程序(讀取許可權)

handle hprocess = openprocess(process_all_access, 0, pid);

//讀取記憶體

lpvoid destaddr=(lpvoid)0x7ff7e1e40000;

byte buffer[1024] = ;

unsigned __int64 numberofreadedbyte = 0; //成功讀取的記憶體位元組數

readprocessmemory(hprocess, destaddr, out buffer, sizeof(buffer), &numberofreadedbyte );

if (numberofreadedbyte == 0)

hmodule modulearray[500] = ;

dword neededsize = 0;

//列舉程序的模組

enumprocessmodule***(hprocess, out modulearray, sizeof(modulearray), out & neededsize, list_modules_all);

hmodule modulearray[500] = ;

dword neededsize = 0;

//開啟當前程序的控制代碼

handle hcurrentprocess = openprocess(process_query_information | process_vm_read,false,getcurrentprocessid());

//列舉當前程序的模組

enumprocessmodule***(hcurrentprocess , out modulearray, sizeof(modulearray), out & neededsize, list_modules_all);

win32 各種形狀api

1.rectangle 繪製矩形 bool rectangle int x1,int y1,int x2,int y2 bool rectangle lpcrect lprect rectangle hdc,int left,int top,int rigth,int buttom 2.ellips...

win32彙編使用win32 api實現字串拷貝

字串拷貝,呼叫win32的lstrcpy函式 拷貝了以後用訊息框顯示一下 386 model flat,stdcall option casemap none include s masm32 include windows.inc include s masm32 include user32.i...

win32建立子程序方法

看到網上有乙個示例,我查了先關函式,做了一些注釋,自己學習下 include include include using namespace std pragma comment lib,ws2 32 int main 該結構用於指定新程序的主視窗特性 si.cb sizeof si process...