怎么查询老公微信聊天记录(不被发现)

怎么查询老公微信聊天记录(不被发现)程序的自删除早已经不是什么新鲜的话题了,对于各位大虾来说是更是比较容易的事情,但想想自己刚学时遇到的种种错误,我觉得有必要把自己所知道的各种方法总结一下,希望对新手的学习能够有所帮助。 程序的自删除广泛用于反安装程序最后的自删除(环保呀!)

程序的自删除早已经不是什么新鲜的话题了,对于各位大虾来说是更是比较容易的事情,但想想自己刚学时遇到的种种错误,我觉得有必要把自己所知道的各种方法总结一下,希望对新手的学习能够有所帮助。  
程序的自删除广泛用于反安装程序最后的自删除(环保呀!),当然更多见于木马、病毒首次安装的自动销毁^*^,至于用于何种用途就看你自己啦!  
经典自删除  
说到程序的自删除就不能不说由 Gary Nebbett 等大虾所写的代码,经典之作呀!代码采用C语言内嵌汇编asm:  
在Win9x下只要先对exe本身句柄执行FreeLibrary操作即可解除exe IMAGE在内存的映射,随后就可以通过调用DeleteFile来删除自身文件。  
Win9x下的代码如下[selfkill-9x.c]:  
#include "windows.h"  
int main(int argc, char *argv[])  
{  
  char   buf[MAX_PATH];  
  HMODULE module;  
  module = GetModuleHandle(0);  
  GetModuleFileName(module, buf, MAX_PATH);  
  __asm   
  {  
    lea   eax, buf  
    push   0  
    push   0  
    push   eax  
    push   ExitProcess  
    push   module  
    push   DeleteFile  
    push   FreeLibrary  
    ret  
  }  
  return 0;  
}  

在WinNT/2K下则需要先调用CloseHandle关闭exe文件本身对应的IMAGE的句柄HANDLE[硬编码为4],然后调用UnmapViewOfFile解除了另外一个对应IMAGE的HANDLE,并且解除了程序本身在内存的映射对象,最后就可以用DeleteFile删除自身啦!(注意:本方法不适用于WinXP!)  

WinNT/2K下的代码如下[selfkill-nt.c]:  
#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;  
}   


把上面用于Win9x及WinNT/2K下的代码综合起来,即把两种平台用到的API代码全部执行一遍,虽然在一种平台上可能会有几个API运行失败,有几个API会运行成功,但最后的结果exe程序文件在退出前就删除了自身!  

Win9x和WinNT/2K下的代码如下[selfkill-9x+nt.c]:  
#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   module  
    push   UnmapViewOfFile  
    push   FreeLibrary  
    ret  
  }  
  return 0;  
}  

  因为我自己在学习Win32下的汇编[MASM32],所以重新用汇编写了一遍,但结果却发现每次都执行失败,显示如图一的错误,  

    =========== 在此插入图一 ==============  

通过反汇编比较发现原来由于MASM32编译器对API调用的编码和C编译器的不同,导致使用FreeLibrary或UnmapViewOfFile解除程序在内存的映射后,调用DeleteFile时又引用IMAGE映射地址内的代码[JMP DeleteFile],导致读内存执行错误。  
错误分析  
普通程序进行API调用时,编译器会将一个API调用语句编译为几个参数压栈指令后跟一条间接调用语句(这是指Microsoft编译器,Borland编译器使用JMP DWORD PTR [XXXXXXXXh])形式如下:  

  • 发表于 2021-04-10 14:30
  • 阅读 ( 216 )
  • 分类:互联网

0 条评论

请先 登录 后评论
龙哥
龙哥

669 篇文章

你可能感兴趣的文章

相关问题