V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nealot
V2EX  ›  程序员

请教劫持 DLL (非 Win32 API) 的简单方法 - 有完整头文件

  •  
  •   nealot · 2021-09-03 17:44:54 +08:00 · 1604 次点击
    这是一个创建于 963 天前的主题,其中的信息可能已经有所发展或是发生改变。
    假设有一个应用程序 x.exe 在运行时会调用 y.dll ;假设 y 是用 C 语言编写的,已经拿到了 y.dll 的头文件 (.h)

    现在我想在 y.dll 中的部分函数被调用时,输出函数的调用参数以便观察 (可以输出到临时文件),请问比较简单的方法有哪些?

    API 中总共有七八十个函数的样子,需要打印信息函数的有两三个
    9 条回复    2021-09-04 06:42:39 +08:00
    ysc3839
        1
    ysc3839  
       2021-09-03 18:19:05 +08:00
    只要改其中少数几个的话,可能用 hook 更简单,但是你得在 x.exe 调用 y.dll 之前就 hook 。
    codehz
        2
    codehz  
       2021-09-03 18:23:28 +08:00
    有头文件的话。。你直接把原 dll 改个名,然后你做个假的 dll 转发每个函数进去就好了。。。
    janxin
        3
    janxin  
       2021-09-03 18:53:43 +08:00
    听上去 AheadLib 之类的工具就能满足你的需求
    mingl0280
        4
    mingl0280  
       2021-09-03 21:47:22 +08:00
    函数打桩(你可以自己搜一下)就行了,这个比较简单,原理就是替换掉函数入口地址上的指令,改成 jmp 到你自己的地址处理完了再接着调用原来的函数。
    typetraits
        5
    typetraits  
       2021-09-03 21:54:12 +08:00
    2 楼的方法是最快的,自己写个签名相同的 wrapper 函数编译成 dll,在你自己的 dll 里调用 LoadLibrary GetProcAddress 加载 y.dll 的函数就可以了
    liberize
        6
    liberize  
       2021-09-03 22:20:13 +08:00 via Android
    IsaacYoung
        7
    IsaacYoung  
       2021-09-03 22:55:39 +08:00
    微软有 detours 的库 专门 hook 用的
    thedrwu
        8
    thedrwu  
       2021-09-04 05:22:29 +08:00 via Android
    如果不想挂函数钩子也不想 wrap 整个 dll,那就再挂个自己的 dll 把原本的函数地主改了或者设个 jmp 再跳回去。
    jones2000
        9
    jones2000  
       2021-09-04 06:42:39 +08:00
    一定要小心。 否则要被请去喝茶。
    《刑法》第二百八十五条 [非法侵入计算机信息系统罪;非法获取计算机信息系统数据、非法控制计算机信息系统罪;提供侵入、非法控制计算机信息系统程序、工具罪]
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1027 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:25 · PVG 03:25 · LAX 12:25 · JFK 15:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.