C 特徵碼定位

2021-06-26 14:57:20 字數 2910 閱讀 9125

//#include #include #include bool getprocessmodulehandle(dword pid,const char*szmodulename,moduleentry32 *pmodule);//獲取模組資訊的

bool stringtobyte(const char *inbuff,unsigned char *outbuff);//字串轉換為位元組陣列

byte *memoryfind(byte *buff1,byte *buff2,dword buff1size,dword buff2size);//查詢陣列位址

void findcalladdr(const char *buff,int offsetsize,const char *modulename,char *regexp);//查詢call位址

void findfunctionaddr(const char *buff,int offsetsize,const char *modulename,char *regexp);//查詢函式頭位址

void findconstaddr(const char *buff,int offsetsize,const char *modulename,char *regexp);//查詢常量的值

bool winapi dllmain( handle hmodule,

dword ul_reason_for_call,

lpvoid lpreserved

)void findconstaddr(const char *buff,int offsetsize,const char *modulename,char *regexp)

byte *temp = memoryfind(module32.modbaseaddr,outbuff,module32.modbasesize,bufflen);//儲存乙個零時變數來儲存返回值的

while (temp)

; sprintf(dbgoutbuff,regexp,*(dword *)((int)temp+offsetsize));

outputdebugstring(dbgoutbuff);

temp = memoryfind(temp+1,outbuff,module32.modbasesize - (temp - module32.modbaseaddr),bufflen);

} delete outbuff;

}void findfunctionaddr(const char *buff,int offsetsize,const char *modulename,char *regexp)

byte *temp = memoryfind(module32.modbaseaddr,outbuff,module32.modbasesize,bufflen);//儲存乙個零時變數來儲存返回值的

while (temp)

; sprintf(dbgoutbuff,regexp,(int)temp+offsetsize);

outputdebugstring(dbgoutbuff);

temp = memoryfind(temp+1,outbuff,module32.modbasesize - (temp - module32.modbaseaddr),bufflen);

} delete outbuff;

}void findcalladdr(const char *buff,int offsetsize,const char *modulename,char *regexp)

byte *temp = memoryfind(module32.modbaseaddr,outbuff,module32.modbasesize,bufflen);//儲存乙個零時變數來儲存返回值的

while (temp)

; sprintf(dbgoutbuff,regexp,calladdr);

outputdebugstring(dbgoutbuff);

temp = memoryfind(temp+1,outbuff,module32.modbasesize - (temp - module32.modbaseaddr),bufflen);

} delete outbuff;

}byte *memoryfind(byte *buff1,byte *buff2,dword buff1size,dword buff2size)

if (count2 == buff2size)

}return null;

}bool getprocessmodulehandle(dword pid,const char*szmodulename,moduleentry32 *pmodule)

// outputdebugstring(buf);

bret = module32next(handle,&module32);

} closehandle(handle);

return functionretn;

}bool stringtobyte(const char *inbuff,unsigned char *outbuff)

//零時變數儲存轉換後的陣列,+3是因為sscanf複製的是4個位元組,最後乙個位元組時會訪問越界

byte *tmpbuf = new byte[buffsize/2+3];

memset(tmpbuf,0,buffsize/2);

for (dword index = 0 ; index < buffsize ; index+=2)

; buf[0] = inbuff[index];

buf[1] = inbuff[index+1];

sscanf(buf,"%x",&tmpbuf[index/2]);

} memcpy(outbuff,tmpbuf,buffsize/2);

delete tmpbuf;

return true;

}

使用IDA逆向定位病毒特徵碼

對於木馬技術愛好者來說,會做免殺是必然的一項技術,在自己編寫的馬被殺的情況下,結合源 定位出被殺的函式是免殺中重要的一項技能。防毒軟體在定位特徵碼的時候,有時定位的匯入匯出函式,這種情況相對好找,但有時候定位的是自己定義的一段函式。這時候想找出被殺的部分就比較麻煩了,在學習的時候發現通過以下辦法可以...

C 特徵碼查詢 附加案例

include include include using namespace std 引數分別為 程序控制代碼 特徵碼 偏移 讀取長度 開始掃瞄位地置 掃瞄結束位置 uintptr t hanshu dizhi 記錄特徵碼對應的位址 uintptr t scanaddress handle pro...

機器特徵碼

在計算機硬體裝置中 cpu id bios 主機板 記憶體 硬碟 卷sn,網絡卡mac位址可作為機器特徵碼,通過硬體檢測工具如everest可以看到這一點。cpu id cpu id並不具備唯一性,同一批號的cpu其id可能相同 1 wmi select processorid from win32...