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)

posted on 2007-05-26 02:20  live-evil  阅读(785)  评论(1)    收藏  举报

导航