简单的键盘按键记录(无码)/虚拟地址转物理地址/生成随机字符串/计算字符串哈希
最近看到 一個(gè) 樣本 ,里面有鍵盤 按鍵記錄的功能 ,而且 實(shí)現(xiàn)也比較 簡(jiǎn)單,運(yùn)行 記錄 的效果還 不錯(cuò) 。主要思路如下 :
//假代碼 int i=0;for(i=0;i<0x100;i++){GetKeyState(i);//參考:https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getkeystate//如果有按鍵 記錄,就去獲取一些相關(guān)信息//當(dāng)前時(shí)間 ,活動(dòng)窗口名等一起記錄}$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$x64 下,虛擬地址轉(zhuǎn)換物理地址:
***應(yīng)用層虛擬地址轉(zhuǎn)換
1,在windbg中找到對(duì)應(yīng)進(jìn)程的DirBase
2,根據(jù) 9-9-9-9-12(pml4-pd-pt-ptd)規(guī)則,對(duì)虛擬地址進(jìn)行切割,然后讀取相應(yīng)的內(nèi)容,最后定位到物理地址。
實(shí)測(cè)例子:
進(jìn)程為DbgView.exe,進(jìn)程的ImageBase=0x4000000;DirBase=0x303e0000
下面查找0x400000對(duì)應(yīng)的物理地址:
對(duì)虛擬地址進(jìn)行切割得到偏移為0-0-2-0-0
pml4=*((qword*)0x303e000+0*8)=0xa000000`045ec867? ? ,取頁(yè)起始地址0x45ec000
pd=*((qword*)0x45ec000+0*8)=0xa000000`5a16d867? ? ? ? ?,取頁(yè)起始地址0x5a16d000
pt=*((qword*)0x5a16d000+2*8)=0xa000000`0686f867? ? ? ? ?,取頁(yè)起始地址0x686f000
pte=*((qword*))0x686f000+0*8)=0x81000000`45b78025? ? ,取頁(yè)起始地址0x45b78000
PhysicalAddress=0x45b78000+0=0x45b78000
可以看到物理地址和虛擬地址內(nèi)容是一致的。
***內(nèi)核中虛擬地址轉(zhuǎn)換
內(nèi)核中的虛擬地址轉(zhuǎn)物理地址與應(yīng)用層原理是一致的,唯一的區(qū)別在于內(nèi)核中的虛擬地址都屬于system。
生成隨機(jī)字符串
ULONG times = 0x10;char* GetRandString() {//隨機(jī)因子ULONGLONG seed = GetTickCount()+times;//基字符串CHAR RandString[MAX_PATH] = "aiebdcefgh\0";CHAR* temp = NULL;//長(zhǎng)度隨機(jī)化int i = seed%4+strlen(RandString)-4;RandString[i] = 0x0;while (i>0){//內(nèi)容隨機(jī)化RandString[i-1] += seed % (i+2);i--;}{temp = (CHAR*)malloc(MAX_PATH);if (temp){memset(temp, 0, MAX_PATH);strcat_s(temp,MAX_PATH, RandString);}}//times++;return temp; }計(jì)算字符串哈希
??????
// // 計(jì)算字符串的hash // //注意64/32指針長(zhǎng)度 ULONG CalStringHash(char* a1) {ULONG result; // raxchar v2; // cl ULONG v3; // edxresult = (unsigned __int64)a1;if (a1){v2 = *a1;v3 = 0;while (v2){v3 ^= 0XF673B679 * v2;v2 = *(BYTE*)++result;}result = v3;}return result; }總結(jié)
以上是生活随笔為你收集整理的简单的键盘按键记录(无码)/虚拟地址转物理地址/生成随机字符串/计算字符串哈希的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 恶意代码分析之简单键盘记录器
- 下一篇: 编程实现键盘记录功能