首页
社区
课程
招聘
[求助]关于WriteProcMemory的一点问题
2008-7-27 19:13 7810

[求助]关于WriteProcMemory的一点问题

2008-7-27 19:13
7810
我先用CreateProcess创建了新进程,暂停线程,然后用WriteProcMemory对远程kernel32.dll里的一个API进行了HOOK,但总是说INVAILD ADDRESS,很郁闷.
我看OLLYDBG是可以改(WRITEPROCMEMORY)的,自己就是不行.不懂为什么........

呵呵,寻求各位帮助

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (17)
雪    币: 136
活跃值: (20)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
沙金 4 2008-7-27 19:14
2
0
HOOK前先设置内存权限
雪    币: 740
活跃值: (953)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
NONAME剑人 3 2008-7-27 19:17
3
0
呵呵.什么意思?是VirtualProtectEx吗?这个也试过,还是INVAILD ADDRESS
雪    币: 740
活跃值: (953)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
NONAME剑人 3 2008-7-27 19:18
4
0
附上段程序
.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive

include windows.inc
include kernel32.inc
include user32.inc
include Comctl32.inc
include shell32.inc

includelib kernel32.lib
includelib user32.lib
includelib Comctl32.lib
includelib shell32.lib
.data?
startinfo STARTUPINFO <>
ip PROCESS_INFORMATION <>
.data
buffer db 'c:\windows\notepad.exe',0
dll db 'kernel32.dll',0
procx db 'CopyFileExW',0
INT03 DB 0CCH
.code
start:
invoke GetStartupInfo,addr startinfo
invoke CreateProcess,addr buffer,NULL,NULL,NULL,FALSE,NULL,NULL,NULL,addr startinfo,addr ip
invoke SuspendThread,ip.hThread ;这个是后来的办法,也不行,之前是CREATEPROCESS上设置FLAG
invoke GetModuleHandle,addr dll
invoke GetProcAddress,eax,addr procx
mov edi,eax
invoke WriteProcessMemory,ip.hProcess,edi,addr INT03,1,NULL //这里不行....
invoke ResumeThread,ip.hThread
end start
雪    币: 136
活跃值: (20)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
沙金 4 2008-7-27 19:19
5
0
没有碰到过,望大牛来解决
雪    币: 136
活跃值: (20)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
沙金 4 2008-7-27 19:20
6
0
invoke GetModuleHandle,addr dll

应该是这个原因。
GetModuleHandle只能本进程能使用。
想远程使用,得先注入。
雪    币: 740
活跃值: (953)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
NONAME剑人 3 2008-7-27 19:23
7
0
可是在一个系统中难道API的装载地址不一样吗?如果注入,是不是要先在OEP那里修改一下?谢谢:)
雪    币: 136
活跃值: (20)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
沙金 4 2008-7-27 19:29
8
0
可是在一个系统中难道API的装载地址不一样吗?

是的,不一样
没个进程有自己独立的4G空间。

注入不需要修改OEP,你找一下注入的方法吧
雪    币: 740
活跃值: (953)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
NONAME剑人 3 2008-7-27 19:32
9
0
谢谢
Thanks a lot .....
雪    币: 182
活跃值: (50)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
pathletboy 2 2008-7-27 20:41
10
0
同一系统下。。。正常情况下系统API地址是一样的。。。
雪    币: 740
活跃值: (953)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
NONAME剑人 3 2008-7-28 14:53
11
0
那就比较奇怪了…………
雪    币: 962
活跃值: (1541)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
loqich 2008-7-28 16:22
12
0
先将自己提升到debug权限试试
雪    币: 740
活跃值: (953)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
NONAME剑人 3 2008-7-28 20:01
13
0
LS指的是标上DEBUG的FLAG吗?试过了,还是挂,很郁闷.接连换了很多个API都不可以...

为啥OLLYDBG就可以捏?
郁闷不解
雪    币: 247
活跃值: (10)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
安摧 2 2008-7-28 20:59
14
0
的确是一样的,但是windows98之后,ms为了提高系统安全性,做了如下改动:
当你对某一个DLL进行写操作的时候,系统会重新划出一块内存,将原来的DLL拷贝过来,然后挂到进程空间里面替换原来的。
雪    币: 962
活跃值: (1541)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
loqich 2008-7-28 21:13
15
0
我试了下`VC下正常
雪    币: 740
活跃值: (953)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
NONAME剑人 3 2008-7-28 21:17
16
0
那请教一下这位大牛,为什么我这么写就挂了呢?应该怎么写呢?

还有LS的那位,为什么VC就没问题,相反底层的汇编就有问题呢?
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
foxabu 13 2008-7-28 21:46
17
0
PROCESS_SUSPENDED这个时候  应该还没有把kernel32.dll装载进进程空间吧。我感觉是这样 我记得是这样。 一般我都是在EntryPoint改一个jmp跳到 自己的code中然后再HOOK 操作。

补充一点,这个跟操作系统有关系~ 不排除有些杀毒软件为了防止注入而禁止写内存。
其次就是Vista 开始  好像貌似 kernel32.dll已经装入了。,  凭影响是这样。。错了就错了吧。。
雪    币: 740
活跃值: (953)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
NONAME剑人 3 2008-7-29 08:48
18
0
呵呵,谢谢楼上
游客
登录 | 注册 方可回帖
返回