zoukankan      html  css  js  c++  java
  • 对类HelloWorld程序中添加一个MessageBox弹窗

    对类HelloWorld程序中添加一个MessageBox弹窗

     

     

    分析:

    任一程序运行的时候都会加载kernel32.dll,MessageBoxA()这个API却是在user32.dll中的。所以在HelloWorld.exe中是没办法直接添加MessageBoxA()的调用。

    不过好在有kernel32.dll,其中有两个API可以解决user32.dll没加载的问题,分别是LoadLibraryA(filename)GetProcAddress(hModule, 函数名)

    操作:

    清除基址重定位表

    先用PE View这个工具查看一下HelloWorld.exe是否用基址重定位表。若有,就用WinHex工具把IMAGE_OPTIONAL_HEADER中的BASE RELOCATION Table清空为0。(这样是为了避免我们硬编进去的代码变得不可用,具体原因看关于基址重定位表的内容)

     

    记录ImageBase的值

    PE View就可以在IMAGE_OPTIONAL_HEADER中看到的

     

    一般ImageBase的值都为00400000

    API的导入地址(IMPORT Table)

    首先查到IMAGE_OPTIONAL_HEADERDataDirectories数组中的Import TableRVA值为 000064BC

     

     

    RVA值代表的是Import Table相关的数据在文件中相对于文件头的偏移量:

     

    这时要注意一下Import Address Table RAV这个数据的值,因为这个值会告诉我们,从kernel32.dll中导入的API列表在文件中的位置。在这个程序里的值,其值为00006000

    去到文件的偏移量00006000上看到了是个函数列表,暂时这个程序只有需要用的kernel32中的函数。

     

    注意看Data列表的值,其实它也是RVA值来,指向的是文件中当前项所代理的函数名字符串。现在不妨看看文件偏移量00006594上的内容:

     

    PE文件加载到了内存,Data中的值就会被替换成真实的API起始地址的。但现在要做的是我们会知道这个列表会加载内存的哪个位置呢?首先需要看看这个列表是在哪个节区中?在这个程序中,它是在.rdata节区中。

     

     

    所以我们需要看看节区.rdata的节区头信息。

     

    记录下其中的RVA00006000,根据公式:

    虚拟地址(内存中) = ImageBase + RVA

    得出这个节区会加载到00406000上,用OllDbg查看一下

     

    ``````````这时我们去一下761929AC上,应该会看到这是API GetCommandLineA() 的指向,在这里又跳转了一次

     

    但我们操作的时候不理会这样,只要记下00406000这个地址就行,具体操作如下:

    CALL  DWORD   PTR  DS:[00406000]

    只要把00406000换成对应的LoadLibraryA之类的地址就好。

     

    LoadLibraryA:00406080

    GetProcAddress:0040607C

    到这里,准备工作已经做了。

    输入下面的代码:

     

    需要记录一下00405923这个值,稍候修改PE头信息的作为新的入口点( AddressOfEntryPoint )

    另外要注意红框的代码 

    JMP  00401041

    这个是用来跳转回程序原本的入口点的,可以事先用PE编辑器查看一下,并且记下:

     

    也是用这个工具,把入口点改成我们的新的入口点:00405923

     

    再保存就好了

    之后运行测试一下,原始的:

     

    修改后的:   

     

     





  • 相关阅读:
    self 和 super 关键字
    NSString类
    函数和对象方法的区别
    求两个数是否互质及最大公约数
    TJU Problem 1644 Reverse Text
    TJU Problem 2520 Quicksum
    TJU Problem 2101 Bullseye
    TJU Problem 2548 Celebrity jeopardy
    poj 2586 Y2K Accounting Bug
    poj 2109 Power of Cryptography
  • 原文地址:https://www.cnblogs.com/dilex/p/5049762.html
Copyright © 2011-2022 走看看