⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 optionhdrdlg.cpp

📁 此为本书的配套光盘.本书不但由浅入深地讲解了软件保护技术
💻 CPP
字号:
/********************************************************************

	Copyright (c) Beijing Feitian Technologies
	http://www.FTSafe.com

	File :		OptionHdrDlg.cpp	

	Created:	2003/11/04

	Author:		yihai
	
	Purpose:	?

	Revision:	?

*********************************************************************/

// OptionHdrDlg.cpp : implementation file
//

#include "stdafx.h"
#include "PEViewer.h"
#include "OptionHdrDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// COptionHdrDlg dialog


COptionHdrDlg::COptionHdrDlg(CPEImageFile& peFile,CWnd* pParent /*=NULL*/)
	: CDialog(COptionHdrDlg::IDD, pParent),m_peFile(peFile)
{
	//{{AFX_DATA_INIT(COptionHdrDlg)
	m_strAddressOfEntryPoint = _T("");
	m_strBaseOfCode = _T("");
	m_strBaseOfData = _T("");
	m_strImageBase = _T("");
	m_strSectionAlignment = _T("");
	m_strFileAlignment = _T("");
	m_strMajorOperatingSystemVersion = _T("");
	m_strMinorOperatingSystemVersion = _T("");
	m_strMajorImageVersion = _T("");
	m_strMinorImageVersion = _T("");
	m_strMajorSubsystemVersion = _T("");
	m_strMinorSubsystemVersion = _T("");
	m_strWin32VersionValue = _T("");
	m_strSizeOfImage = _T("");
	m_strSizeOfHeaders = _T("");
	m_strCheckSum = _T("");
	m_strSubsystem = _T("");
	m_strDllCharacteristics = _T("");
	m_strSizeOfStackReserve = _T("");
	m_strSizeOfStackCommit = _T("");
	m_strSizeOfHeapReserve = _T("");
	m_strSizeOfHeapCommit = _T("");
	m_strLoaderFlags = _T("");
	m_strNumberOfRvaAndSizes = _T("");
	m_strMagic = _T("");
	m_strMajorLinkerVersion = _T("");
	m_strMinorLinkerVersion = _T("");
	m_strSizeOfCode = _T("");
	m_strSizeOfInitializedData = _T("");
	m_strSizeOfUninitializedData = _T("");
	m_strDirAddr = _T("");
	m_strDirSize = _T("");
	//}}AFX_DATA_INIT
}


void COptionHdrDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(COptionHdrDlg)
	DDX_Control(pDX, IDC_DATA_DIR, m_ctlDirData);
	DDX_Text(pDX, IDC_ADDROFENPT, m_strAddressOfEntryPoint);
	DDX_Text(pDX, IDC_BASEOFCODE, m_strBaseOfCode);
	DDX_Text(pDX, IDC_BASEOFDATA, m_strBaseOfData);
	DDX_Text(pDX, IDC_IMAGEBASE, m_strImageBase);
	DDX_Text(pDX, IDC_SECALIGN, m_strSectionAlignment);
	DDX_Text(pDX, IDC_FILEALGN, m_strFileAlignment);
	DDX_Text(pDX, IDC_MAJOR_OSVER, m_strMajorOperatingSystemVersion);
	DDX_Text(pDX, IDC_MINOR_OSVER, m_strMinorOperatingSystemVersion);
	DDX_Text(pDX, IDC_MAJOR_IMGVER, m_strMajorImageVersion);
	DDX_Text(pDX, IDC_MINOR_IMGVER, m_strMinorImageVersion);
	DDX_Text(pDX, IDC_MAJOR_SUBSYSVER, m_strMajorSubsystemVersion);
	DDX_Text(pDX, IDC_MINOR_SUBSYSVER, m_strMinorSubsystemVersion);
	DDX_Text(pDX, IDC_WIN32VERVAL, m_strWin32VersionValue);
	DDX_Text(pDX, IDC_SIZEOFIMAGE, m_strSizeOfImage);
	DDX_Text(pDX, IDC_SIZEOFHEADERS, m_strSizeOfHeaders);
	DDX_Text(pDX, IDC_CHECKSUM, m_strCheckSum);
	DDX_Text(pDX, IDC_SUBSYSTEM, m_strSubsystem);
	DDX_Text(pDX, IDC_DLL_CHAR, m_strDllCharacteristics);
	DDX_Text(pDX, IDC_SIZEOFSTK, m_strSizeOfStackReserve);
	DDX_Text(pDX, IDC_SIZEOFSTACKCMT, m_strSizeOfStackCommit);
	DDX_Text(pDX, IDC_SIZEOFHEAP, m_strSizeOfHeapReserve);
	DDX_Text(pDX, IDC_SIZEOFHEAPCMT, m_strSizeOfHeapCommit);
	DDX_Text(pDX, IDC_LOADERFLAGS, m_strLoaderFlags);
	DDX_Text(pDX, IDC_NUMOFRVAANDSIZES, m_strNumberOfRvaAndSizes);
	DDX_Text(pDX, IDC_MAGIC, m_strMagic);
	DDX_Text(pDX, IDC_MAJOR_LNK_VER, m_strMajorLinkerVersion);
	DDX_Text(pDX, IDC_MINOR_LNK_VER, m_strMinorLinkerVersion);
	DDX_Text(pDX, IDC_SIZEOFCODE, m_strSizeOfCode);
	DDX_Text(pDX, IDC_SIZEOFINITDATA, m_strSizeOfInitializedData);
	DDX_Text(pDX, IDC_SIZEOFUNINITDATA, m_strSizeOfUninitializedData);
	DDX_Text(pDX, IDC_DATADIR_VIRADDR, m_strDirAddr);
	DDX_Text(pDX, IDC_DATADIR_SUBSIZE, m_strDirSize);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(COptionHdrDlg, CDialog)
	//{{AFX_MSG_MAP(COptionHdrDlg)
	ON_CBN_SELCHANGE(IDC_DATA_DIR, OnSelchangeDataDir)
	ON_EN_CHANGE(IDC_DATADIR_SUBSIZE, OnChangeDatadirSubsize)
	ON_EN_CHANGE(IDC_DATADIR_VIRADDR, OnChangeDatadirViraddr)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// COptionHdrDlg message handlers

BOOL COptionHdrDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_strMagic.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.Magic);
	m_strMajorLinkerVersion.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.MajorLinkerVersion);
	m_strMinorLinkerVersion.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.MinorLinkerVersion);
	m_strSizeOfCode.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SizeOfCode);
	m_strSizeOfInitializedData.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SizeOfInitializedData);
	m_strSizeOfUninitializedData.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SizeOfUninitializedData);
	m_strAddressOfEntryPoint.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.AddressOfEntryPoint);
	m_strBaseOfCode.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.BaseOfCode);
	m_strBaseOfData.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.BaseOfData);
	m_strImageBase.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.ImageBase);
	m_strSectionAlignment.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SectionAlignment);
	m_strFileAlignment.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.FileAlignment);
	m_strMajorOperatingSystemVersion.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.MajorOperatingSystemVersion);
	m_strMinorOperatingSystemVersion.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.MinorOperatingSystemVersion);
	m_strMajorImageVersion.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.MajorImageVersion);
	m_strMinorImageVersion.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.MinorImageVersion);
	m_strMajorSubsystemVersion.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.MajorSubsystemVersion);
	m_strMinorSubsystemVersion.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.MinorSubsystemVersion);
	m_strWin32VersionValue.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.Win32VersionValue);
	m_strSizeOfImage.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SizeOfImage);
	m_strSizeOfHeaders.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SizeOfHeaders);
	m_strCheckSum.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.CheckSum);
	m_strSubsystem.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.Subsystem);
	m_strDllCharacteristics.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.DllCharacteristics);
	m_strSizeOfStackReserve.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SizeOfStackReserve);
	m_strSizeOfStackCommit.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SizeOfStackCommit);
	m_strSizeOfHeapReserve.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SizeOfHeapReserve);
	m_strSizeOfHeapCommit.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.SizeOfHeapCommit);
	m_strLoaderFlags.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.LoaderFlags);
	m_strNumberOfRvaAndSizes.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.NumberOfRvaAndSizes);

	m_ctlDirData.SetCurSel(0);
	
	m_strDirSize.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.DataDirectory[0].Size);
	m_strDirAddr.Format("%X",m_peFile.m_pNtHdr->OptionalHeader.DataDirectory[0].VirtualAddress);

	for(int i=0;i<IMAGE_NUMBEROF_DIRECTORY_ENTRIES;i++)
		m_DataDirectory[i] = m_peFile.m_pNtHdr->OptionalHeader.DataDirectory[i];
	UpdateData(FALSE);	
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void COptionHdrDlg::UpdateCTX()
{
	if(IsWindow(GetSafeHwnd()))
		UpdateData();

	m_peFile.m_pNtHdr->OptionalHeader.Magic                      = StrToHex(m_strMagic	                      ); 
	m_peFile.m_pNtHdr->OptionalHeader.MajorLinkerVersion         = StrToHex(m_strMajorLinkerVersion           );
	m_peFile.m_pNtHdr->OptionalHeader.MinorLinkerVersion         = StrToHex(m_strMinorLinkerVersion           );
	m_peFile.m_pNtHdr->OptionalHeader.SizeOfCode                 = StrToHex(m_strSizeOfCode                   );
	m_peFile.m_pNtHdr->OptionalHeader.SizeOfInitializedData      = StrToHex(m_strSizeOfInitializedData        );
	m_peFile.m_pNtHdr->OptionalHeader.SizeOfUninitializedData    = StrToHex(m_strSizeOfUninitializedData      );
	m_peFile.m_pNtHdr->OptionalHeader.AddressOfEntryPoint        = StrToHex(m_strAddressOfEntryPoint          );
	m_peFile.m_pNtHdr->OptionalHeader.BaseOfCode                 = StrToHex(m_strBaseOfCode                   );
	m_peFile.m_pNtHdr->OptionalHeader.BaseOfData                 = StrToHex(m_strBaseOfData                   );
	m_peFile.m_pNtHdr->OptionalHeader.ImageBase                  = StrToHex(m_strImageBase                    );
	m_peFile.m_pNtHdr->OptionalHeader.SectionAlignment           = StrToHex(m_strSectionAlignment             );
	m_peFile.m_pNtHdr->OptionalHeader.FileAlignment              = StrToHex(m_strFileAlignment                );
	m_peFile.m_pNtHdr->OptionalHeader.MajorOperatingSystemVersion= StrToHex(m_strMajorOperatingSystemVersion  );
	m_peFile.m_pNtHdr->OptionalHeader.MinorOperatingSystemVersion= StrToHex(m_strMinorOperatingSystemVersion  );
	m_peFile.m_pNtHdr->OptionalHeader.MajorImageVersion          = StrToHex(m_strMajorImageVersion            );
	m_peFile.m_pNtHdr->OptionalHeader.MinorImageVersion          = StrToHex(m_strMinorImageVersion            );
	m_peFile.m_pNtHdr->OptionalHeader.MajorSubsystemVersion      = StrToHex(m_strMajorSubsystemVersion        );
	m_peFile.m_pNtHdr->OptionalHeader.MinorSubsystemVersion      = StrToHex(m_strMinorSubsystemVersion        );
	m_peFile.m_pNtHdr->OptionalHeader.Win32VersionValue          = StrToHex(m_strWin32VersionValue            );
	m_peFile.m_pNtHdr->OptionalHeader.SizeOfImage                = StrToHex(m_strSizeOfImage                  );
	m_peFile.m_pNtHdr->OptionalHeader.SizeOfHeaders              = StrToHex(m_strSizeOfHeaders                );
	m_peFile.m_pNtHdr->OptionalHeader.CheckSum                   = StrToHex(m_strCheckSum                     );
	m_peFile.m_pNtHdr->OptionalHeader.Subsystem                  = StrToHex(m_strSubsystem                    );
	m_peFile.m_pNtHdr->OptionalHeader.DllCharacteristics         = StrToHex(m_strDllCharacteristics           );
	m_peFile.m_pNtHdr->OptionalHeader.SizeOfStackReserve         = StrToHex(m_strSizeOfStackReserve           );
	m_peFile.m_pNtHdr->OptionalHeader.SizeOfStackCommit          = StrToHex(m_strSizeOfStackCommit            );
	m_peFile.m_pNtHdr->OptionalHeader.SizeOfHeapReserve          = StrToHex(m_strSizeOfHeapReserve            );
	m_peFile.m_pNtHdr->OptionalHeader.SizeOfHeapCommit           = StrToHex(m_strSizeOfHeapCommit             );
	m_peFile.m_pNtHdr->OptionalHeader.LoaderFlags                = StrToHex(m_strLoaderFlags                  );
	m_peFile.m_pNtHdr->OptionalHeader.NumberOfRvaAndSizes        = StrToHex(m_strNumberOfRvaAndSizes          );
	for(int i=0;i<IMAGE_NUMBEROF_DIRECTORY_ENTRIES;i++)
		m_peFile.m_pNtHdr->OptionalHeader.DataDirectory[i] = m_DataDirectory[i];
}

void COptionHdrDlg::OnSelchangeDataDir() 
{
	int iIndex = m_ctlDirData.GetCurSel();
	m_strDirSize.Format("%X",m_DataDirectory[iIndex].Size);
	m_strDirAddr.Format("%X",m_DataDirectory[iIndex].VirtualAddress);
	UpdateData(FALSE);	
	
}

void COptionHdrDlg::OnChangeDatadirSubsize() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	UpdateData();
	int iIndex = m_ctlDirData.GetCurSel();
	m_DataDirectory[iIndex].Size = StrToHex(m_strDirSize);
}

void COptionHdrDlg::OnChangeDatadirViraddr() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	UpdateData();
	int iIndex = m_ctlDirData.GetCurSel();	
	m_DataDirectory[iIndex].VirtualAddress = StrToHex(m_strDirAddr);	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -