我正在开发一个可执行的 Packer,到目前为止我已经完成了压缩和加密部分。现在我必须将解压缩/解密存根/例程存储在压缩文件中。我的问题是这个存根是用十六进制代码编写的还是我可以直接放置汇编指令?如果以后可以,那怎么办?
问问题
2381 次
2 回答
3
创建一个有效的打包二进制文件需要:
- 修改 PE 几何图形
- 插入您的代码
根据您的代码大小,您可能希望使用部分填充,或添加您自己的部分。
然后,插入你的代码——因为你似乎更喜欢直接插入 ASM——我的建议是使解密代码独立于 EIP,然后用 YASM 之类的东西作为纯代码(-o
)组装它,并将代码作为组装二进制文件直接包含.
我写了几个迷你打包器,它们可能有助于作为起始参考,因为它们还“插入”汇编代码。
于 2013-05-21T10:01:11.433 回答
1
您必须有具有“可读”和“可写”和“包含代码”和“可执行”特征的部分
Address of Entry Point: 0x00019860
Section Header #1
Name: UPX0
Virtual Size: 0x00010000 (65536)
Virtual Address: 0x00001000
Size of Raw Data: 0x00000000 (0)
File Pointer to Raw Data: 0x00000400
File Pointer to Relocation Table: 0x00000000
File Pointer to Line Numbers: 0x00000000
Number of Relocations: 0
Number of Line Numbers: 0
Characteristics: 0xE0000080
Section contains uninitialized data.
Section is executable.
Section is readable.
Section is writeable.
Section Header #2
Name: UPX1
Virtual Size: 0x00009000 (36864)
Virtual Address: 0x00011000
Size of Raw Data: 0x00008A00 (35328)
File Pointer to Raw Data: 0x00000400
File Pointer to Relocation Table: 0x00000000
File Pointer to Line Numbers: 0x00000000
Number of Relocations: 0
Number of Line Numbers: 0
Characteristics: 0xE0000040
Section contains initialized data.
Section is executable.
Section is readable.
Section is writeable.
Section Header #3
Name: .rsrc
Virtual Size: 0x00001000 (4096)
Virtual Address: 0x0001A000
Size of Raw Data: 0x00000800 (2048)
File Pointer to Raw Data: 0x00008E00
File Pointer to Relocation Table: 0x00000000
File Pointer to Line Numbers: 0x00000000
Number of Relocations: 0
Number of Line Numbers: 0
Characteristics: 0xC0000040
Section contains initialized data.
Section is readable.
Section is writeable.
简而言之,UPX 生成一个包含压缩代码和解压缩程序的部分,以及第二个未初始化但允许具有可写和可执行特性的部分。解压器例程将代码解压到未初始化的部分并继续执行原始入口点...
于 2013-05-16T06:28:50.347 回答