//#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...