• 一段欺骗性代码和一个自删除程序的学习


    今天突然看到下面的一段代码:
    PUSH 0
        CALL 
    @1
        DB 
    'title',0
    @1:    CALL @2
        DB 
    'message',0
    @2:    PUSH 0
        CALL MessageBoxA

    明地一看也没有反应过来,不知道咋回事,且猛地想到了以前看过的一个自删除程序,当时也没理解是咋回事,今天又把以前发的那个贴子拿出来看了一下,终于明白了是怎么回事了。

    先说这段欺骗代码,可以欺骗一些反汇编软件 ,使其逆成比较乱的代码,其实这段代码就是完成了如下的功能:

    MessageBox(0,"message","title",0);

    只是弹出一个对话框。call @1之后,将db "title",0的地址压入栈中,call @2后,将db "message",0的地址压入栈中,再执行到call MessageBox之前,栈的内容如下:

    0

    addr of "message"              ;在执行完call @2后压入的返回地址

    addr of "title"                           ;执行完call @1后压入的返回地址

    0

    这样,就可以正常实现调用该函数了

    下面再说一下这段自删除程序(因为在XP下不能用)

    代码如下:

    #include "windows.h"

    int main(int argc, char *argv[])
    {
        
    char    buf[MAX_PATH];
        HMODULE module;
        
        module 
    = GetModuleHandle(0);
        GetModuleFileName(module, buf, MAX_PATH);
        CloseHandle((HANDLE)
    4);
        
        __asm 
        
    {
          lea     eax, buf
          push    
    0
          push    
    0
          push    eax
          push    ExitProcess       
          push    module
          push    DeleteFile 
          push    UnmapViewOfFile
          ret
        }

         
        
    return 0;
    }

    先说一下CloseHandle((HANDLE)4),这句话就是关闭了exe本身的image句柄。

    后面的汇编代码是核心,实现了先执行了invoke UnmapViewOfFile,module

    因为当函数调用的时候,栈中的情况是这样的

    ……
    localvar2
    localvar1
    返回地址
    arg1 
    arg2
    arg3
    ……
    调用UnmapViewOfFile的时候的情况是这样的
    addr of DeleteFile
    arg
    因为UnmapViewOfFile只有一个参数,所以它是将arg,即push module压入的module作为它的参数,将DeleteFile的地址作为了返回地址,所以,在UnmapViewOfFile执行完后,就会返回到DeleteFile处执行,执行DeleteFile的时候也是用了相同的方法,用push 到栈中的eax作为参数,后面ExitProcess用第一个push 0作为参数,第二个,仅为了符合API的调用约定

    摘自:http://blog.csdn.net/ciahi/archive/2007/12/19/1954377.aspx
  • 相关阅读:
    MVC ActionResult JsonResult
    xml文件
    使用socket实现聊天功能
    使用多线程完成Socket
    Socket编程
    U1总结
    多线程
    IO
    单例模式
    日期
  • 原文地址:https://www.cnblogs.com/yangbin1005/p/1006359.html
Copyright © 2020-2023  润新知