吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 390|回复: 2
收起左侧

[新手问题] 关于修改PE完成节合并操作的问题

[复制链接]
richard_ljd 发表于 2024-9-22 12:18
最近在看教程(课程一小时,代码写半天)

老师说作业要写代码实现节合并(就是多个节合并成一个节),看老师讲的应该不难,那我就写写吧,

先说说这个程序的思路

1.修改pe头中的NumberOfSection将其改为1,意为只有一个节   
//你如果问我·"人家不同的节有不同的作用,你这样一搞人家找不到了怎么办?",我只能说老师这样写直接过也没说怎么回事,可能是都是直接指地址的吧()

2.将第一个节的VirtualSize改成SizeOfImagebase - SizeOfHeader ,意为除了头部分,其他全是这个节的区域

3.将SizeOfRawData = VirtualSize  

4.将后面几个节表空间置0(就怕万一)

然后我就开始搓代码,代码不算长

LoadPEFromImagebuffer()  是从Imagebuffer中读取PE数据

ImagebuffertoFilebuffer() 是将Imagebuffer变形成Filebuffer的格式

下面就是代码了

[C++] 纯文本查看 复制代码
int ModPEHead::Merge_Sections() {

	if (!pImageBuffer)
		return 0;

	LoadPEFromImagebuffer();

	//计算内存对齐大小,sizeofimage - sizeofheaders计算出除头以外的所有大小
	pSectionHeader->Misc.VirtualSize = pOptionHeader->SizeOfImage - pOptionHeader->SizeOfHeaders;


	pSectionHeader->SizeOfRawData = pSectionHeader->Misc.VirtualSize;

	//默认前两个节至少有一个有执行权限,进行或运算给予执行权限
	pSectionHeader->Characteristics = pSectionHeader->Characteristics | (pSectionHeader + 1)->Characteristics;

	//清空除第一个节以外的其他节
	for (size_t i = 1; i <= pPEHeader->NumberOfSections - 1; i++)
	{
		memset((pSectionHeader + i),NULL,40);
	}

	pPEHeader->NumberOfSections = 1;

	ImagebuffertoFilebuffer();

	return 1;
}


代码也是一遍过,这个函数执行以后写入文件
image.png
可以看出大了一倍

拉进010 edit看看
image.png image.png

010 edit正常的读,至少没炸,然后我运行一下

image.png

炸了,dbg也开不进去。从pe看代码没有什么问题,但是跑不起来,所以来问一下,是我改的有问题还是怎么

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ynzjbys 发表于 2024-10-18 14:49
合并节之前,要先让各节内存对齐,不能只是简单地修改节大小的值,得填充数据,具体可以看这篇帖子,https://www.52pojie.cn/thread-1411345-1-1.html
 楼主| richard_ljd 发表于 2024-10-31 13:58
ynzjbys 发表于 2024-10-18 14:49
合并节之前,要先让各节内存对齐,不能只是简单地修改节大小的值,得填充数据,具体可以看这篇帖子,https: ...

好的,这几天没上论坛没看到
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-10-31 16:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表