需求背景:
在 windows 平台的其他非管理员权限启动的程序(win32),或者一些可执行脚本(vbs,ahk) 不能通过 ReadProcessMemory 读取其他进程的内存,因此要做一层代理,启动一个以管理员权限运行的程序,帮助其他程序正确完成一些特权操作
实现方式: 查了一下 win32 共享进程数据的一些方式,最简单的是剪贴板,尤其适合 ahk 这种工具(提供了读取和写入剪贴板的 api )
因此,简单定义一套语法,形如
READSTRING, HWND, ADDRESS, LENGTH
例如,
READSTRING, 123123, 0x234234, 10
当外部程序把这个字符串写入剪贴板的时候,内存读取器读到这个写入,将剪贴板修改为:
READSTRING, 123123, 0x234234, 10, HelloWorld
外部程序拿到修改之后的剪贴板就可以实现自己的后续逻辑了,而不用关注是如何读取内存的 (当然涉及到读取器读到自己修改之后的剪贴板,这个做一些协议上的控制,不再赘述)
为什么其他进程不直接读取呢?
1 ahk 脚本在开发的时候不方便用管理员运行
2 通过 clickonce 分发的程序不支持管理员运行 见我之前的一个讨论( https://www.v2ex.com/t/661848)
因此想出了这个折中的方式~
比起 rpc 调用: 在脚本语言使用更简单(只需要读写剪贴板&简单的字符串解析即可)
1
shakoon 2020-04-15 17:45:39 +08:00
用剪贴板共享进程数据……怕是要被用户打死哦。数据量要是不大,写个 ini 或写注册表都行啊,vbs 调用很方便的
|
2
crab 2020-04-15 17:49:21 +08:00
WM_COPYDATA
|
3
Kiriya 2020-04-15 17:50:02 +08:00
怎么感觉在写游戏外挂
|
4
lcdtyph 2020-04-15 18:05:46 +08:00 via iPhone
当心被恶意利用…
|
5
phpfpm OP @crab
也不是。。不可以…… https://autohotkey.com/board/topic/123674-onmessage-wm-copydata/ ahk 实现 wm_copydata 有点重啊……可控性差一些 @shakoon 数据量不大,但是实时性要求高(基本是同步调用外部变量,会锁死等一会) 不过我的用户很乖的,不会打我的 @Kiriya 你感觉得不错! |
7
superrichman 2020-04-15 18:11:58 +08:00 via iPhone
搜索 cheat engine
|
8
phpfpm OP @superrichman cheat engine 我用啊,难道这个有 cli ?
|
9
xupefei 2020-04-15 18:21:28 +08:00 via iPhone
应该用共享内存
|
10
ccpp132 2020-04-15 18:22:09 +08:00
通讯用 socket 不好吗,用剪贴板。。。
|
12
kernelpanic 2020-04-15 19:05:39 +08:00
github 上一大堆代码,有用 lsass 注入的,还有些利用某些内核驱动漏洞的
|
13
newmlp 2020-04-15 22:21:00 +08:00
为什么不用共享内存
|
14
xioxu 2020-04-16 18:54:54 +08:00
话说很多年前我们用的是 金山游侠 , 读取修改其它应用的内存数据, 也不知道现在是否还活着
|