鱼C论坛

 找回密码
 立即注册
查看: 3398|回复: 1

[技术交流] 关于PE文件更改无法运行

[复制链接]
发表于 2014-9-8 10:03:37 | 显示全部楼层 |阅读模式
30鱼币
关于在PE文件增加新节,但是增加后无法加
                                                        RtlCopyMemory(insertSections->Name, adata, 7);
                                                        insertSections->Characteristics = IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_READ;
                                                        insertSections->PointerToRawData = (insertSections - 1)->PointerToRawData + (insertSections - 1)->SizeOfRawData;
                                                        insertSections->SizeOfRawData = Align(codefilesize, lpnt->OptionalHeader.FileAlignment);
                                                        insertSections->VirtualAddress = (insertSections - 1)->VirtualAddress + Align((insertSections - 1)->Misc.VirtualSize, lpnt->OptionalHeader.SectionAlignment);
                                                        insertSections->Misc.VirtualSize = codefilesize;

                                                        lpnt->FileHeader.NumberOfSections ++;
                                                        lpnt->OptionalHeader.SizeOfCode += Align(codefilesize,lpnt->OptionalHeader.SectionAlignment);
                                                        lpnt->OptionalHeader.SizeOfImage += Align(codefilesize,lpnt->OptionalHeader.SectionAlignment);
                                                        lpnt->OptionalHeader.AddressOfEntryPoint = insertSections->VirtualAddress+0x4A;

                                                        SetFilePointer(hfile, insertSections->PointerToRawData, NULL, FILE_BEGIN);
                                                        DWORD NumbWrite;
                                                        WriteFile(hfile, lpcodefile, codefilesize, &NumbWrite, NULL);
                                                        SetFilePointer(hfile, insertSections->PointerToRawData + insertSections->SizeOfRawData, NULL, FILE_BEGIN);
                                                        SetEndOfFile(hfile);
                                                        lpnt->OptionalHeader.ImageBase = insertSections->VirtualAddress;
                                                        return 0;

//insertSections指向被增加的新节,lpnt指向NT头,文件执行代码在一个文件中被写入在一个打开的PE文件中,确确时时写入呢,那个入口地址的偏移是直接代码入口函数偏移,
//下面是计算对齐后的值
DWORD Align(DWORD dwSzie, DWORD dwAlign)//计算对齐参数1 对齐的数据大小,2 对齐粒度
{
        if (dwSzie%dwAlign)
        {
                return ((dwSzie / dwAlign) + 1) * dwAlign;
        }
        else
        {
                return (dwSzie / dwAlign)  * dwAlign;
        }
        return 0;
}


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-11 16:10:03 | 显示全部楼层
两包烟的钱,把不了妹买不了田,不如拿来支持小甲鱼推出更多原创教学视频!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 23:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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