首页
社区
课程
招聘
[旧帖] [求助]如何往代码段写数据? 0.00雪花
发表于: 2007-9-4 19:21 4862

[旧帖] [求助]如何往代码段写数据? 0.00雪花

2007-9-4 19:21
4862
比如说程序代码段的某些内容需要重新进行填充,但是代码段又是写保护的,那么请问往代码段中指定地址处写入数据呢?

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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
呵呵,这个问题有3个解决办法:

1,有源代码。在连接的时候将代码段设置为可写
2,没有源代码。分析查看PE文件格式,将代码段设置为可写

3,已经运行的进程,可以用 WriteProcessMemory 函数将代码段设置为可写

可以看看我的这个例子:
http://bbs.pediy.com/showthread.php?t=51024

;FASM汇编 自修改 SMC 代码测试

format pe console
entry start

include 'Win32AXP.inc'
;include 'List.inc'

section '.text' code readable writeable executable ;确保代码段有写入权限,必须的

start:
  call  f1
  call  f2

  ;memcpy(f1.Start,f2.Start,f2.CodeLen)
  mov  esi,f2.Start
  mov  edi,f1.Start
  mov  ecx,f2.End-f2.Start
  rep  movsb
  
  ;再次调用f1和f2
  call  f1
  call  f2

  ret

f1:
.Start=$
  cinvoke  printf,buf1
  ret
.End=$
  ;确保有足够的空间来存放f2的代码
  repeat  (f2.End-f2.Start)-(f1.End-f1.Start)
    nop
  end  repeat

f2:
.Start=$
  cinvoke  printf,buf2
  ret
.End=$

data import
  library  msvcrt,'msvcrt.dll'
  import  msvcrt,\
    printf,'printf'
end data

buf1  db  "SMC 前",0dh,0ah,0
buf2  db  "SMC 后",0dh,0ah,0
2007-9-4 23:43
0
雪    币: 207
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
用这个VirtualProtect函数修改读写权限
再改代码就OK
2007-9-5 00:23
0
雪    币: 192
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢楼上的,我回去试下
2007-9-5 13:19
0
游客
登录 | 注册 方可回帖
返回
//