5 0 0

二进制手动注入messagebox [悬赏]人民币 0.01

ConorMcgregor
535 5

本文共计502个字,预计阅读时长1.9分钟。

本人小白一枚,在看到滴水的在空白区注入messagebox这一节时遇到问题,首先在滴水中注入的方式是硬编码格式为6A 00(push 0) 6A 00 6A 00 6A 00 E8(call) + 跳转的硬编码 E9(jmp) + 原程序入口点的硬编码。我首先遇到两个问题,第一是我使用vs2022编写的程序它的汇编没有像滴水课中那样是push,而是用四个寄存器使用xor指令来得到参数0再调用messagebox,那该如何注入呢?第二个问题,我通过动态调试器(vs中自带的和x64dbg)发现程序加载进内存的地址特别大(类似07FF65A0F0150h这种),那pe头中的imagebase失效了我在文件中手动注入怎么知道messagebox的具体位置以及在内存中entrypoint的真正位置呢?这两点很困扰我,在网上搜也是用在滴水课中一样的讲法,一直没找到解决的,所以再次恳请各位大佬指导一下,谢谢啦。

include

int main() { printf("HEllo world\n"); return 0; } 我就是想在这个很简单的helloworld中注入一个messagebox。


悬赏答案
  • admin 6月前
    建议看看windowspe 权威指南
  • 最新回复 ( 5 )
    全部楼主
    • 2
      1.64位传参和32位不同,64位的是通过寄存器传的,所以你没看到push而是mov 2.因为你是64位的程序所以地址特别大
    • ConorMcgregor 楼主 @Ta 0
      3
      @admin ,感谢大佬,但我还有点问题,我在使用petools查看这种程序发现imagebase的大小为400000,但在实际内存中的位置那么大,那imagebase就没有参考意义了。并且每次运行同一程序在内存的位置也不一定一样,那请问程序入口点的内存地址和messagebox在运行时的内存地址该如何寻找呢?
    • 4

      image只是模块基址而已啊,是rva 定位messagebox可以自己写个程序动态获取,或者特征码

    • 5
      建议看看windowspe 权威指南
    • ConorMcgregor 楼主 @Ta 0
      6
      @admin ,好,谢谢大佬
    • 游客
      7

      您需要登录后才可以回帖

      立即登录 立即注册

    作者最近主题:
    发新帖

    目录