V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
phpfpm
V2EX  ›  分享创造

正在做一个内存读取器,请告诉我我是不是在重复造轮子,或者有没有类似的已有的更好的实现?

  •  
  •   phpfpm · 2020-04-15 17:14:26 +08:00 · 3101 次点击
    这是一个创建于 1670 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求背景:

    在 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 调用: 在脚本语言使用更简单(只需要读写剪贴板&简单的字符串解析即可)

    14 条回复    2020-04-16 18:54:54 +08:00
    shakoon
        1
    shakoon  
       2020-04-15 17:45:39 +08:00
    用剪贴板共享进程数据……怕是要被用户打死哦。数据量要是不大,写个 ini 或写注册表都行啊,vbs 调用很方便的
    crab
        2
    crab  
       2020-04-15 17:49:21 +08:00
    WM_COPYDATA
    Kiriya
        3
    Kiriya  
       2020-04-15 17:50:02 +08:00
    怎么感觉在写游戏外挂
    lcdtyph
        4
    lcdtyph  
       2020-04-15 18:05:46 +08:00 via iPhone
    当心被恶意利用…
    phpfpm
        5
    phpfpm  
    OP
       2020-04-15 18:06:51 +08:00
    @crab
    也不是。。不可以……
    https://autohotkey.com/board/topic/123674-onmessage-wm-copydata/
    ahk 实现 wm_copydata 有点重啊……可控性差一些


    @shakoon 数据量不大,但是实时性要求高(基本是同步调用外部变量,会锁死等一会)
    不过我的用户很乖的,不会打我的

    @Kiriya 你感觉得不错!
    phpfpm
        6
    phpfpm  
    OP
       2020-04-15 18:08:43 +08:00
    @lcdtyph 安全性确实无解

    但是 WM_COPYDATA 不也是无法保证安全,其他进程也可以发相同的消息啊。
    superrichman
        7
    superrichman  
       2020-04-15 18:11:58 +08:00 via iPhone
    搜索 cheat engine
    phpfpm
        8
    phpfpm  
    OP
       2020-04-15 18:19:47 +08:00
    @superrichman cheat engine 我用啊,难道这个有 cli ?
    xupefei
        9
    xupefei  
       2020-04-15 18:21:28 +08:00 via iPhone
    应该用共享内存
    ccpp132
        10
    ccpp132  
       2020-04-15 18:22:09 +08:00
    通讯用 socket 不好吗,用剪贴板。。。
    phpfpm
        11
    phpfpm  
    OP
       2020-04-15 18:23:13 +08:00
    @xupefei
    @ccpp132

    主要考虑到在 ahk 脚本访问共享内存 /socket 太复杂了。。。
    kernelpanic
        12
    kernelpanic  
       2020-04-15 19:05:39 +08:00
    github 上一大堆代码,有用 lsass 注入的,还有些利用某些内核驱动漏洞的
    newmlp
        13
    newmlp  
       2020-04-15 22:21:00 +08:00
    为什么不用共享内存
    xioxu
        14
    xioxu  
       2020-04-16 18:54:54 +08:00
    话说很多年前我们用的是 金山游侠 , 读取修改其它应用的内存数据, 也不知道现在是否还活着
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3008 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:54 · PVG 21:54 · LAX 05:54 · JFK 08:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.