国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++實現(xiàn)查殼程序代碼實例

2020-01-26 15:15:33
字體:
供稿:網(wǎng)友

本文實例講述了C++實現(xiàn)查殼程序代碼,分享給大家供大家參考。具體方法分析如下:

一般來說,PEID是基于特征碼的,用python只需要兩行代碼,用VC實現(xiàn)用了這么多代碼……。

python中只要引入pefile模塊,第一句代碼指定數(shù)據(jù)庫文件,第二句代碼返回結(jié)果。具體的看pefile官方介紹吧

下面是C++的代碼:

復(fù)制代碼 代碼如下:
void CMyPeidDlg::OnBnClickedBtnOpen() 

    // 獲取當(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); 
 
 
    // 文件擴展名過濾器 
    LPCTSTR szFilter = "EXE Files (*.EXE)|*.EXE|DLL Files (*.DLL)|*.DLL|All Files (*.*)|*.*||"; 
 
    //初始目錄是c:/windows, 初始選擇的文件名是test,初始后綴過濾器是 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)); 
 
    //從文件偏移開始讀特征碼 
    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); 
}

希望本文所述對大家的C++程序設(shè)計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 伊金霍洛旗| 沿河| 沁阳市| 剑川县| 乃东县| 象州县| 河池市| 仁化县| 上蔡县| 山西省| 沙坪坝区| 同德县| 和田市| 九寨沟县| 长垣县| 靖边县| 龙山县| 绥阳县| 基隆市| 尚志市| 巴里| 徐汇区| 玛多县| 泰州市| 莱西市| 贡山| 荔波县| 孝义市| 桃源县| 内黄县| 莱西市| 抚松县| 得荣县| 新巴尔虎右旗| 清河县| 社旗县| 龙门县| 沙田区| 广西| 深泽县| 长丰县|