C++實(shí)現(xiàn)查殼程序代碼實(shí)例
本文實(shí)例講述了C++實(shí)現(xiàn)查殼程序代碼,分享給大家供大家參考。具體方法分析如下:
一般來(lái)說(shuō),PEID是基于特征碼的,用python只需要兩行代碼,用VC實(shí)現(xiàn)用了這么多代碼……。
python中只要引入pefile模塊,第一句代碼指定數(shù)據(jù)庫(kù)文件,第二句代碼返回結(jié)果。具體的看pefile官方介紹吧
下面是C++的代碼:
{
// 獲取當(dāng)前工作路徑
CString strAppName;//當(dāng)前工作目錄
::GetModuleFileName(NULL, strAppName.GetBuffer(_MAX_PATH), _MAX_PATH);
strAppName.ReleaseBuffer();
int nPos = strAppName.ReverseFind('//');
strAppName = strAppName.Left(nPos + 1);
// AfxMessageBox(strAppName);
// 文件擴(kuò)展名過(guò)濾器
LPCTSTR szFilter = "EXE Files (*.EXE)|*.EXE|DLL Files (*.DLL)|*.DLL|All Files (*.*)|*.*||";
//初始目錄是c:/windows, 初始選擇的文件名是test,初始后綴過(guò)濾器是 Chart Files (*.xlc)
CFileDialog dlg(TRUE,NULL ,strAppName.GetBuffer(_MAX_PATH) ,OFN_ENABLESIZING ,szFilter,NULL);
if(dlg.DoModal() == IDOK)
{
CString strFile = dlg.GetPathName(); // 全路徑
GetDlgItem(IDC_EDT_FILE)->SetWindowText(strFile.GetBuffer(_MAX_PATH));
TRACE("/n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/n");
TRACE(strFile);
TRACE("/n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/n");
}
}
void CMyPeidDlg::OnBnClickedBtnOk()
{
GetDlgItem(IDC_EDT_FILE)->SetWindowText("c:\\1.exe");
char buf[_MAX_PATH];
ZeroMemory(buf, _MAX_PATH);
GetDlgItemText(IDC_EDT_FILE, buf, _MAX_PATH-1);
HANDLE hFile = CreateFile(buf, GENERIC_READ,FILE_SHARE_READ, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (!hFile)
{
MessageBox("createFile failed..");
return;
}
HANDLE hMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0,NULL);
if (!hMap)
{
MessageBox("hMap failed..");
return;
}
LPVOID lpBase = MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);
if (!lpBase)
{
MessageBox("lpBase failed..");
return;
}
DWORD dwOEP;
IMAGE_DOS_HEADER *pDosHeader = (IMAGE_DOS_HEADER*)lpBase;
IMAGE_NT_HEADERS *pNtHeader = (IMAGE_NT_HEADERS*)((char*)lpBase + pDosHeader->e_lfanew);
dwOEP = pNtHeader->OptionalHeader.AddressOfEntryPoint;
PIMAGE_SECTION_HEADER pSectionHeader = IMAGE_FIRST_SECTION(pNtHeader);
CString strTemp;
strTemp.Format("%0x",dwOEP);
SetDlgItemText(IDC_EDT_OEP, strTemp.GetBuffer(4));
DWORD FileOffset;
for(int i=0; i<pNtHeader->FileHeader.NumberOfSections;i++)
{
if (dwOEP >= pSectionHeader->VirtualAddress &&
dwOEP < pSectionHeader->VirtualAddress + pSectionHeader->SizeOfRawData)
{
FileOffset = dwOEP - pSectionHeader->VirtualAddress + pSectionHeader->PointerToRawData;
}
pSectionHeader++;
}
strTemp.Empty();
strTemp.Format("%0x",FileOffset);
SetDlgItemText(IDC_EDT_FILEOFFSET, strTemp.GetBuffer(4));
//從文件偏移開(kāi)始讀特征碼
CString strBuf;
DWORD dwReaded;
SetFilePointer(hFile, FileOffset,0, FILE_BEGIN);
ReadFile(hFile, strBuf.GetBuffer(16), 16, &dwReaded,NULL);
MessageBox(strBuf.GetBuffer(16));
char code[] = "\x60\xE8\x03\x00\x00\x00\xE9\xEB\04\x5D\x45\x55\xC3\xE8\x01";
char fileBuf[16];
memcpy(fileBuf, strBuf.GetBuffer(16),16);
char ctype[20];
for (int i=0;i<16;i++)
{
if (code[i]!=fileBuf[i])
{
StrCpy(ctype,"not found");
break;
}
else if (i==15)
{
StrCpy(ctype, "aspack");
}
}
SetDlgItemText(IDC_EDT_SHELLTYPE, ctype);
}
希望本文所述對(duì)大家的C++程序設(shè)計(jì)有所幫助。
欄 目:C語(yǔ)言
下一篇:C++實(shí)現(xiàn)string存取二進(jìn)制數(shù)據(jù)的方法
本文標(biāo)題:C++實(shí)現(xiàn)查殼程序代碼實(shí)例
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/3302.html
您可能感興趣的文章
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-用棧實(shí)現(xiàn)表達(dá)式求值的方法詳解
- 01-10使用OpenGL實(shí)現(xiàn)3D立體顯示的程序代碼
- 01-10深入理解C++中常見(jiàn)的關(guān)鍵字含義
- 01-10求斐波那契(Fibonacci)數(shù)列通項(xiàng)的七種實(shí)現(xiàn)方法
- 01-10C語(yǔ)言 解決不用+、-、&#215;、&#247;數(shù)字運(yùn)算符做加法
- 01-10使用C++實(shí)現(xiàn)全排列算法的方法詳解
- 01-10c++中inline的用法分析
- 01-10用C++實(shí)現(xiàn)DBSCAN聚類算法
- 01-10深入全排列算法及其實(shí)現(xiàn)方法


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫(xiě)分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫(xiě)函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實(shí)例總結(jié)
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文