二进制手动注入messagebox

ConorMcgregor · · 悬赏问答
5

本文共计535个字,预计阅读时长2.1分钟。

本人小白一枚,在看到滴水的在空白区注入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 <stdio.h> int main() { printf("HEllo world\n"); return 0; } 我就是想在这个很简单的helloworld中注入一个messagebox。

最新回复 ( 5 )
全部楼主
  • admin @Ta
    2
    1.64位传参和32位不同,64位的是通过寄存器传的,所以你没看到push而是mov 2.因为你是64位的程序所以地址特别大
  • 3
    @admin ,感谢大佬,但我还有点问题,我在使用petools查看这种程序发现imagebase的大小为400000,但在实际内存中的位置那么大,那imagebase就没有参考意义了。并且每次运行同一程序在内存的位置也不一定一样,那请问程序入口点的内存地址和messagebox在运行时的内存地址该如何寻找呢?
  • admin @Ta
    4
    image只是模块基址而已啊,是rva 定位messagebox可以自己写个程序动态获取,或者特征码
  • admin @Ta
    5
    建议看看windowspe 权威指南
  • 6
    @admin ,好,谢谢大佬