首页
社区
课程
招聘
[旧帖] [求助]在17.6章第二个例子中,也就是要给一个pe文件添加代码 0.00雪花
发表于: 2012-2-29 07:50 1332

[旧帖] [求助]在17.6章第二个例子中,也就是要给一个pe文件添加代码 0.00雪花

2012-2-29 07:50
1332
例子部分代码在这里

xor eax,eax
  mov ebx,edi
  add ebx,sizeof IMAGE_NT_HEADERS
  .while ax <= [esi].FileHeader.NumberOfSections
  mov ecx,[ebx].SizeOfRawData
  .if ecx && ([ebx].Characteristics & IMAGE_SCN_MEM_EXECUTE)
  sub ecx,[ebx].Misc.VirtualSize
  .if ecx > offset APPEND_CODE_END-offset APPEND_CODE
  or [ebx].Characteristics,IMAGE_SCN_MEM_READ or IMAGE_SCN_MEM_WRITE
  add [ebx].Misc.VirtualSize,offset APPEND_CODE_END-offset APPEND_CODE ;;;;;这个地址已经是加好了的
  jmp @F
  .endif
  .endif
  add ebx,IMAGE_SECTION_HEADER
  inc ax
  .endw
  invoke CloseHandle,@hFile
  invoke DeleteFile,addr @szNewFile
  invoke SetWindowText,hWinEdit,addr szErrNoRoom
  jmp _Ret
  @@:
;********************************************************************
; 将新增代码加入代码节的空隙中
;********************************************************************
  mov eax,[ebx].VirtualAddress
  add eax,[ebx].Misc.VirtualSize;;;;上面这个大小是加上的,这里为什么不需要 再减去 offset APPEND_CODE_END-offset APPEND_CODE 来获得内存添加代码的开始位置????
  mov @dwAddCodeBase,eax
  mov eax,[ebx].PointerToRawData
这里的问题 同上。。。。。。。。。。。
  add eax,[ebx].Misc.VirtualSize

注释的地方是我的疑问,在算@dwAddCodeBase 这个值得时候,它是用[ebx].VirtualAddress直接加扩大后的大小 即 add eax,[ebx].Misc.VirtualSize,这还是 新加代码的 起始部位么?我怎么总感觉是 新加代码的结束部位呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费
支持
分享
最新回复 (4)
雪    币: 166
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
[ebx].Misc.VirtualSize这个是节的数据在没有进行对齐处理前的实际大小,所以[ebx].VirtualAddress+[ebx].Misc.VirtualSize=代码节在内存文件中空余的部分的头指针。因为代码节在装入内存后,是要被内存对齐的,例如:代码节是1KB,装入内存对齐后大小就变成4KB,实际代码只占用了这4KB的前1KB,余下的3KB是没有使用的。
楼主多看下PE结构,要认真仔细的看,不要浮躁。
2012-2-29 09:08
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=地精锁匠;1048742][ebx].Misc.VirtualSize这个是节的数据在没有进行对齐处理前的实际大小,所以[ebx].VirtualAddress+[ebx].Misc.VirtualSize=代码节在内存文件中空余的部分的头指针。因为代码节在装入内存后,是要被内存对齐的,例如:代码节是1KB,装入内存对齐后大...[/QUOTE]

add [ebx].Misc.VirtualSize,offset APPEND_CODE_END-offset APPEND_CODE ;;;;;这个地址已经是加好了的

不管这个 size是不是 扩展好的。。。这里他已经加上了 要加的代码的size啊。。。。
2012-2-29 09:29
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
[QUOTE=地精锁匠;1048742][ebx].Misc.VirtualSize这个是节的数据在没有进行对齐处理前的实际大小,所以[ebx].VirtualAddress+[ebx].Misc.VirtualSize=代码节在内存文件中空余的部分的头指针。因为代码节在装入内存后,是要被内存对齐的,例如:代码节是1KB,装入内存对齐后大...[/QUOTE]

大哥,能看到我的问题么。。。
2012-2-29 09:59
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
[QUOTE=woshihsj;1048748]add [ebx].Misc.VirtualSize,offset APPEND_CODE_END-offset APPEND_CODE ;;;;;这个地址已经是加好了的

不管这个 size是不是 扩展好的。。。这里他已经加上了 要加的代码的size啊。。。。[/QUOTE]

继续求助啊。。。。。。。。。。。。。。
2012-2-29 17:08
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册