在winnt.h中关于PE文件头的定义:
typedef struct _IMAGE_NT_HEADERS
{
DWORD Signature; //PE文件头标志 :“PE\0\0”。在开始DOS header的偏移3CH处所指向的地址开始
IMAGE_FILE_HEADER FileHeader; //PE文件物理分布的信息
IMAGE_OPTIONAL_HEADER32 OptionalHeader; //PE文件逻辑分布的信息
}IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
typedef struct _IMAGE_FILE_HEADER
{
WORD Machine; //该文件运行所需要的CPU,对于Intel平台是14Ch
WORD NumberOfSections; //文件的节数目
DWORD TimeDateStamp; //文件创建日期和时间
DWORD PointerToSymbolTable; //用于调试
DWORD NumberOfSymbols; //符号表中符号个数
WORD SizeOfOptionalHeader; //OptionalHeader 结构大小
WORD Characteristics; //文件信息标记,区分文件是exe还是dll
}IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
typedef struct _IMAGE_OPTIONAL_HEADER
{
WORD Magic; //标志字(总是010bh)
BYTE MajorLinkerVersion; //连接器版本号
BYTE MinorLinkerVersion; //
DWORD SizeOfCode; //代码段大小
DWORD SizeOfInitializedData; //已初始化数据块大小
DWORD SizeOfUninitializedData; //未初始化数据块大小
DWORD AddressOfEntryPoint; //PE装载器准备运行的PE文件的第一个指令的RVA
DWORD BaseOfCode; //代码段起始RVA
DWORD BaseOfData; //数据段起始RVA
DWORD ImageBase; //PE文件的装载地址
DWORD SectionAlignment; //块对齐
DWORD FileAlignment; //文件块对齐
WORD MajorOperatingSystemVersion; //所需操作系统版本号
WORD MinorOperatingSystemVersion; //
WORD MajorImageVersion; //用户自定义版本号
WORD MinorImageVersion; //
WORD MajorSubsystemVersion; //win32子系统版本。若PE文件是专门为Win32设计的
WORD MinorSubsystemVersion; //该子系统版本必定是4.0否则对话框不会有3维立体感
DWORD Win32Versionval*e; //保留
DWORD SizeOfImage; //内存中整个PE映像体的尺寸
DWORD SizeOfHeaders; //所有头+节表的大小
DWORD CheckSum; //校验和
WORD Subsystem; //NT用来识别PE文件属于哪个子系统
WORD DllCharacteristics;
DWORD SizeOfStackReserve;
DWORD SizeOfStackCommit;
DWORD SizeOfHeapReserve;
DWORD SizeOfHeapCommit;
DWORD LoaderFlags;
DWORD NumberOfRvaAndSizes;
IMAGE_DATA_DIRECTORY
DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
}IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
typedef struct _IMAGE_DATA_DIRECTORY
{
DWORD VirtualAddress; //表的RVA地址
DWORD Size; //大小
}IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
使用方法:
方法一:如果是在安装完系统后覆盖winlogon.exe出现“winlogon.exe被系统调用”没法修改;而且文件系统为ntfs的解决方法如下:
正常模式里也可以替换的,做个批处理,和要替换的 winlogon.exe放在一起并执行就可以了,内容如下:
sfc /purgecache
ren %windir%\system32\winlogon.exe winlogon.bak
copy winlogon.exe %windir%\system32
shutdown -r -t 00
方法二:如果是全新安装(或刻盘)把winlogon.exe压缩成winlogon.ex_ 放到安装目录i386下覆盖同名文件就好压制winlogon.ex_:用 cabarc.exe (此程序在xp 安装目录support/tools/support.cab下)把cabarc.exe 和 winlogon.exe放到一个目录命令:cabarc.exe -m lzx:21 n winlogon.ex_ winlogon.exe
优点:由中文原版破解得到,对系统改动最小 缺点:没有修改licdll.32,微软有可能通过此licdll32.dll还原系统的winlogon.exe