首页
社区
课程
招聘
[求助]会DELPHI的都进来
发表于: 2008-7-6 19:45 4454

[求助]会DELPHI的都进来

2008-7-6 19:45
4454
前几天用DELPHI做了一个添加PE节的程序,添加后用PEDIT查了一下,可以找到
这个节的信息,但是却无法运行,原码在附件里,大家看一下,谢谢了!!

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我也是DELPHI爱好者看看
2008-7-6 22:04
0
雪    币: 1272
活跃值: (746)
能力值: ( LV13,RANK:810 )
在线值:
发帖
回帖
粉丝
3
你设置了PE段数但是没有设置总内存空间
lpNtHeaders^.FileHeader.NumberOfSections
lpNtHeaders^.OptionalHeader.SizeOfImage

---老大。。。对称式编码好好学习一下。看的晕头转向
又是流又是HASH的。。。

第一个段。。。的定位不太正规
lpNtHeaders^.FileHeader.SizeOfOptionalHeader---使用这个进行计算
  lpSectionHeader := PImageSectionHeader(DWORD(lpNtHeaders) + SizeOf(DWORD) + SizeOf(TImageFileHeader) + lpNtHeaders^.FileHeader.SizeOfOptionalHeader);

对Delphi不熟。。只能用一些很原始的方法写

贴个以前写的
//  给PE添加一个新节
function AddPeFileSection(lpszFileName: PChar; lpszSectionName: PChar; lpAddFileData: Pointer; dwDataSize: DWORD): Boolean;
var
  bResult: Boolean;
  hFile: THandle;
  dwFileSize, dwFileDataSize, dwBytes: DWORD;

  lpFileData: Pointer;
  lpNtHeaders: PImageNtHeaders;
  lpSectionHeader: PImageSectionHeader;
  stNewSectionHeader: TImageSectionHeader;
begin
  Result := False;
  hFile := CreateFile(lpszFileName, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if (hFile = INVALID_HANDLE_VALUE) then Exit;
  dwFileSize := GetFileSize(hFile, nil);

  lpFileData := Pointer(GlobalAlloc(GMEM_FIXED, dwFileSize));
  if (lpFileData = nil) then Exit;

  bResult := ReadFile(hFile, lpFileData^, dwFileSize, dwBytes, nil);
  CloseHandle(hFile);
  if Not bResult then Exit;

  //  验证PE结构
  if (PImageDosHeader(lpFileData)^.e_magic <> IMAGE_DOS_SIGNATURE) then
  begin
    GlobalFree(DWORD(lpFileData));
    Exit;
  end;
  lpNtHeaders := PImageNtHeaders(DWORD(lpFileData) + DWORD(PImageDosHeader(lpFileData)^._lfanew));
  if (lpNtHeaders^.Signature <> IMAGE_NT_SIGNATURE) then
  begin
    GlobalFree(DWORD(lpFileData));
    Exit;
  end;
  //   读取最后一个段数据
  lpSectionHeader := PImageSectionHeader(DWORD(lpNtHeaders) + SizeOf(DWORD) + SizeOf(TImageFileHeader) + lpNtHeaders^.FileHeader.SizeOfOptionalHeader);
  lpSectionHeader := PImageSectionHeader(DWORD(lpSectionHeader) + (SizeOf(TImageSectionHeader) * (DWORD(lpNtHeaders^.FileHeader.NumberOfSections)- 1)));

  //  设置段属性-以DATA为标准
  dwFileDataSize := GetAlignedSize(dwDataSize, lpNtHeaders^.OptionalHeader.FileAlignment);

  ZeroMemory(@stNewSectionHeader, SizeOf(TImageSectionHeader));
  lstrcpyn(@stNewSectionHeader.Name[0], lpszSectionName, 8);
  stNewSectionHeader.VirtualAddress := lpSectionHeader^.VirtualAddress + lpNtHeaders^.OptionalHeader.SectionAlignment;

  stNewSectionHeader.Misc.VirtualSize := (dwFileDataSize div lpNtHeaders^.OptionalHeader.FileAlignment) * lpNtHeaders^.OptionalHeader.SectionAlignment;
  stNewSectionHeader.SizeOfRawData := dwFileDataSize;
  stNewSectionHeader.PointerToRawData := lpSectionHeader^.SizeOfRawData + lpSectionHeader^.PointerToRawData;
  stNewSectionHeader.Characteristics := $C0000040;

  CopyMemory(Pointer(DWORD(lpSectionHeader) + SizeOf(TImageSectionHeader)), @stNewSectionHeader, SizeOf(TImageSectionHeader));
  
  //  设置PE空间&段数量
  lpNtHeaders^.FileHeader.NumberOfSections := lpNtHeaders.FileHeader.NumberOfSections + 1;
  lpNtHeaders^.OptionalHeader.SizeOfImage := lpNtHeaders^.OptionalHeader.SizeOfImage + stNewSectionHeader.Misc.VirtualSize;

  //  填充数据
  dwFileSize := dwFileSize + dwFileDataSize;
  lpFileData := Pointer(GlobalReAlloc(DWORD(lpFileData), dwFileSize, GMEM_FIXED or GMEM_MOVEABLE or GMEM_ZEROINIT));
  if (lpFileData = nil) then Exit;

  hFile := CreateFile(lpszFileName, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if (hFile = INVALID_HANDLE_VALUE) then Exit;

  bResult := WriteFile(hFile, lpFileData^, dwFileSize, dwBytes, nil);
  if (bResult) then
  begin
    SetFilePointer(hFile, dwFileSize - dwFileDataSize, nil, FILE_BEGIN);
    bResult := WriteFile(hFile, lpAddFileData^, dwDataSize, dwBytes, nil);
    if (bResult) then
    begin
      Result := True;
    end;
  end;
  GlobalFree(DWORD(lpFileData));
  CloseHandle(hFile);
end;
2008-7-6 22:17
0
雪    币: 347
活跃值: (25)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
4
我是来膜拜强大的女王的,哦也~
2008-7-6 22:33
0
游客
登录 | 注册 方可回帖
返回
//