PE( Portable Executable 即 可移植的执行体)

PE 的意思就是 Portable Executable(可移植的执行体)。它是 Win32环境自身所带的执行体文件格式。它的一些特性继承自 Unix的 Coff (common object file format)文件格式。"portable executable"(可移植的执行体)意味着此文件格式是跨win32平台的 : 即使Windows运行在非Intel的CPU上,任何win32平台的PE装载器都能识别和使用该文件格式。当然,移植到不同的CPU上PE执行体必然得有一些改变。所有 win32执行体 (除了VxD和16位的Dll)都使用PE文件格式,包括NT的内核模式驱动程序(kernel mode drivers)。因而研究PE文件格式给了我们洞悉Windows结构的良机。 本教程就让我们浏览一下 PE文件格式的概要。 DOS MZ header DOS stub PE header Section table Section 1 Section 2 Section ... Section n 上图是 PE文件结构的总体层次分布。所有 PE文件(甚至32位的 DLLs) 必须以一个简单的 DOS MZ header 开始。我们通常对此结构没有太大兴趣。有了它,一旦程序在DOS下执行,DOS就能识别出这是有效的执行体,然后运行紧随 MZ header 之后的 DOS stub。 DOS stub实际上是个有效的 EXE,在不支持 PE文件格式的操作系统中,它将简单显示一个错误提示,类似于字符串 "This program requires Windows" 或者程序员可根据自己的意图实现完整的 DOS代码。通常我们也不对 DOS stub 太感兴趣: 因为大多数情况下它是由汇编器/编译器自动生成。通常,它简单调用中断21h服务9来显示字符串 "This program cannot run in DOS mode"。 紧接着 DOS stub 的是 PE header。 PE header 是PE相关结构 IMAGE_NT_HEADERS 的简称,其中包含了许多PE装载器用到的重要域。当我们更加深入研究PE文件格式后,将对这些重要域耳目能详。执行体在支持PE文件结构的操作系统中执行时,PE装载器将从 DOS MZ header 中找到 PE header 的起始偏移量。因而跳过了 DOS stub 直接定位到真正的文件头 PE header。 PE文件的真正内容划分成块,称之为sections(节)。每节是一块拥有共同属性的数据,比如代码/数据、读/写等。我们可以把PE文件想象成一逻辑磁盘,PE header 是磁盘的boot扇区,而sections就是各种文件,每种文件自然就有不同属性如只读、系统、隐藏、文档等等。 值得我们注意的是 ---- 节的划分是基于各组数据的共同属性: 而不是逻辑概念。重要的不是数据/代码是如何使用的,如果PE文件中的数据/代码拥有相同属性,它们就能被归入同一节中。不必关心节中类似于"data", "code"或其他的逻辑概念: 如果数据和代码拥有相同属性,它们就可以被归入同一个节中。(译者注:节名称仅仅是个区别不同节的符号而已,类似"data", "code"的命名只为了便于识别,惟有节的属性设置决定了节的特性和功能)如果某块数据想付为只读属性,就可以将该块数据放入置为只读的节中,当PE装载器映射节内容时,它会检查相关节属性并置对应内存块为指定属性。 如果我们将PE文件格式视为一逻辑磁盘,PE header是boot扇区而sections是各种文件,但我们仍缺乏足够信息来定位磁盘上的不同文件,譬如,什么是PE文件格式中等价于目录的东东?别急,那就是 PE header 接下来的数组结构 section table(节表)。 每个结构包含对应节的属性、文件偏移量、虚拟偏移量等。如果PE文件里有5个节,那么此结构数组内就有5个成员。因此,我们便可以把节表视为逻辑磁盘中的根目录,每个数组成员等价于根目录中目录项。 以上就是PE文件格式的物理分布,下面将总结一下装载一PE文件的主要步骤: 当PE文件被执行,PE装载器检查 DOS MZ header 里的 PE header 偏移量。如果找到,则跳转到 PE header。 PE装载器检查 PE header 的有效性。如果有效,就跳转到PE header的尾部。 紧跟 PE header 的是节表。PE装载器读取其中的节信息,并采用文件映射方法将这些节映射到内存,同时付上节表里指定的节属性。 PE文件映射入内存后,PE装载器将处理PE文件中类似 import table(引入表)逻辑部分。 上述步骤是基于本人观察后的简述,显然还有一些不够精确的地方,但基本明晰了执行体被处理的过程。 你应该下载 LUEVELSMEYER的《PE文件格式》。 该文的描述相当详细,可用作案头的参考手册。 翻译:iamgufeng [Iczelion's Win32 Assembly Homepage][LuoYunBin's Win32 ASM Page] Post By IN 解密破解 @ 10:20 | 评论 (0) | 链接 | 引用 (0) 自己的一篇原创文章:简单算法" 下 星期日, 四月 3. 2005 4 2E2C /$ 53 push ebx 4 2E2D |. 56 push esi 4 2E2E |. 57 push edi 4 2E2F |. 89C6 mov esi,eax 4 2E31 |. 5 push eax 4 2E32 |. 85C test eax,eax 4 2E34 |. 74 73 je short 中华通讯. 4 2EA9 4 2E36 |. 31C xor eax,eax 4 2E38 |. 31DB xor ebx,ebx 4 2E3A |. BF CCCCCC C mov edi, CCCCCCC //214748364 4 2E3F |> 8A1E /mov bl,byte ptr ds:[esi] //第一个注册码7 4 2E41 |. 46 |inc esi 4 2E42 |. 8 FB 2 |cmp bl,2 4 2E45 |.^ 74 F8 \je short 中华通讯. 4 2E3F 4 2E47 |. B5 mov ch, 4 2E49 |. 8 FB 2D cmp bl,2D 4 2E4C |. 74 69 je short 中华通讯. 4 2EB7 4 2E4E |. 8 FB 2B cmp bl,2B 4 2E51 |. 74 66 je short 中华通讯. 4 2EB9 4 2E53 |. 8 FB 24 cmp bl,24 4 2E56 |. 74 66 je short 中华通讯. 4 2EBE 4 2E58 |. 8 FB 78 cmp bl,78 4 2E5B |. 74 61 je short 中华通讯. 4 2EBE 4 2E5D |. 8 FB 58 cmp bl,58 4 2E6 |. 74 5C je short 中华通讯. 4 2EBE 4 2E62 |. 8 FB 3 cmp bl,3 4 2E65 |. 75 13 jnz short 中华通讯. 4 2E7A 4 2E67 |. 8A1E mov bl,byte ptr ds:[esi] 4 2E69 |. 46 inc esi 4 2E6A |. 8 FB 78 cmp bl,78 4 2E6D |. 74 4F je short 中华通讯. 4 2EBE 4 2E6F |. 8 FB 58 cmp bl,58 4 2E72 |. 74 4A je short 中华通讯. 4 2EBE 4 2E74 |. 84DB test bl,bl 4 2E76 |. 74 2 je short 中华通讯. 4 2E98 4 2E78 |. EB 4 jmp short 中华通讯. 4 2E7E 4 2E7A |> 84DB test bl,bl 4 2E7C |. 74 34 je short 中华通讯. 4 2EB2 4 2E7E |> 8 EB 3 /sub bl,3 4 2E81 |. 8 FB 9 |cmp bl,9 4 2E84 |. 77 2C |ja short 中华通讯. 4 2EB2 4 2E86 |. 39F8 |cmp eax,edi //214748364 4 2E88 |. 77 28 |ja short 中华通讯. 4 2EB2 4 2E8A |. 8D 48 |lea eax,dword ptr ds:[eax+eax*4] 4 2E8D |. 1C |add eax,eax 3c1c3e 251a8f 4 2E8F |. 1D8 |add eax,ebx 4 2E91 |. 8A1E |mov bl,byte ptr ds:[esi] //取第二个注册码8 4 2E93 |. 46 |inc esi 4 2E94 |. 84DB |test bl,bl 4 2E96 |.^ 75 E6 \jnz short 中华通讯. 4 2E7E 4 2E98 |> FECD dec ch 4 2E9A |. 74 1 je short 中华通讯. 4 2EAC 4 2E9C |. 85C test eax,eax //注册码转换为十六进制 4B23526 4 2E9E |. 7C 12 jl short 中华通讯. 4 2EB2 4 2EA |> 59 pop ecx //假码78787878 4 2EA1 |. 31F6 xor esi,esi // ESI= 1 2FC59=16972889 4 2EA3 |> 8932 mov dword ptr ds:[edx],esi 4 2EA5 |. 5F pop edi 4 2EA6 |. 5E pop esi 4 2EA7 |. 5B pop ebx //EBX=78787878 4 2EA8 |. C3 retn 4 A A |. 8BF mov esi,eax //ESI= A EAX= 4B23526 4 A A2 |. 833C24 cmp dword ptr ss:[esp], 4 A A6 |. 74 19 je short 中华通讯. 4 A C1 4 A A8 |. 895C24 4 mov dword ptr ss:[esp+4],ebx 4 A AC |. C64424 8 B mov byte ptr ss:[esp+8], B 4 A B1 |. 8D5424 4 lea edx,dword ptr ss:[esp+4] 4 A B5 |. A1 188A54 mov eax,dword ptr ds:[548A18] 4 A BA |. 33C9 xor ecx,ecx 4 A BC |. E8 DBF7FFFF call 中华通讯. 4 989C 4 A C1 |> 8BC6 mov eax,esi //EAX= 4B23526 4 A C3 |. 83C4 C add esp, C //12FC4 + C=1244224+ C=1244236 4 A C6 |. 5E pop esi // 4B23526 4 A C7 |. 5B pop ebx //78787878 4 A C8 \. C3 retn 537C |. 8B55 F4 mov edx,dword ptr ss:[ebp-C] //EDX= 12FC4 537C 3 |. 81C2 FC7E12 add edx,127EFC //EDX=EDX+127EFC=1281 B=1212683 EDX=2 F+127EF 537C 9 |. 81C2 9EE464 add edx,64E49E //EDX=EDX+64E49E=7765A9=78248 9 EDX= 1281 B+64E49E 537C F |. 3BC2 cmp eax,edx //真假码比较 537C11 |. 75 19 jnz short 中华通讯. 537C2C //爆破点 条就OVER 537C11 |. /75 19 jnz short 中华通讯. 537C2C 537C13 |. |B3 1 mov bl,1 537C15 |. |B8 ECC554 mov eax,中华通讯. 54C5EC 537C1A |. |8B55 F8 mov edx,dword ptr ss:[ebp-8] 537C1D |. |E8 EEC2ECFF call 中华通讯. 4 3F1 537C22 |. |8B45 F4 mov eax,dword ptr ss:[ebp-C] 537C25 |. |A3 F C554 mov dword ptr ds:[54C5F ],eax 537C2A |. |EB 2 jmp short 中华通讯. 537C2E 537C2C |> \33DB xor ebx,ebx 537C2E |> 33C xor eax,eax 537C3 |. 5A pop edx 537C31 |. 59 pop ecx //假码 537C32 |. 59 pop ecx 537C33 |. 64:891 mov dword ptr fs:[eax],edx 537C36 |. 68 5B7C53 push 中华通讯. 537C5B 537C3B |> 8D45 EC lea eax,dword ptr ss:[ebp-14] 537C3E |. E8 79C2ECFF call 中华通讯. 4 3EBC 537C43 |. 8D45 F lea eax,dword ptr ss:[ebp-1 ] 537C46 |. E8 71C2ECFF call 中华通讯. 4 3EBC 537C4B |. 8D45 F8 lea eax,dword ptr ss:[ebp-8] 537C4E |. E8 69C2ECFF call 中华通讯. 4 3EBC 537C53 \. C3 retn 537C54 .^ E9 5BBCECFF jmp 中华通讯. 4 38B4 537C59 .^ EB E jmp short 中华通讯. 537C3B 537C5B . 8BC3 mov eax,ebx 537C5D . 5E pop esi 537C5E . 5B pop ebx 537C5F . 8BE5 mov esp,ebp 537C61 . 5D pop ebp 537C62 . C3 retn 53B 2 . 84C test al,al //测试 53B 4 . 74 9 je short 中华通讯. 53B F //爆破点--跳就OVER 53B 6 . 8BC3 mov eax,ebx 53B 8 . E8 D7C8FFFF call 中华通讯. 5378E4 53B D . 5B pop ebx 53B E . C3 retn 53B F > B8 24B 53 mov eax,中华通讯. 53B 24 53B 14 . E8 CF4 F2FF call 中华通讯. 45F E8 53B 19 . 5B pop ebx 53B 1A . C3 retn —————————————————————————————————————————————————————————— —————————————————————————————————————————————————————————— 程序注册修改如下:删除即可从新注册 HKEY_USERS\.DEFAULT\Software\cnet\Demo\Name 键值: 字串: "B EB-D1C1" //机器码 HKEY_USERS\.DEFAULT\Software\cnet\Demo\Pass 键值: DWORD: 527  ; x2 f) HKEY_USERS\S-1-5-18\Software\cnet\Demo\Name 键值: 字串: "B EB-D1C1" HKEY_USERS\S-1-5-18\Software\cnet\Demo\Pass 键值: DWORD: 527  ; x2 f)

你可能感兴趣的:(table)