DLL注入进程源码的新方式

把dll模块注入到游戏进程的方法_基于文件修改的注入方式 通过对pe结构的了解,我们会发现进程加载时依赖的dll主要来源于PE的导入表,因此我们可以自己写代码修改pe文件的导入表,也可以利用LordPe等Pe工具自行修改文件的导入表,从而让想注入的dll在原PE文件中有一席之地。(4)再用PrcoessExplorer查看test.exe所加载的dll,会发现dbghelp_0.dll(改名后的系统dll)和dbghelp.dll(我们的dll,MyDbghelp.dll改名得到的)都会被加载,如下图所示,请注意两个dll的路径。 阅读详情
-------HEADER   FILE-------  
  #ifndef   _INCLUDE_HACKER_DLL_HADER_FILE  
  #define   _INCLUDE_HACKER_DLL_HADER_FILE  
   
  #include   <windows.h>  
  #include   <shlwapi.h>  
   
  #define   WM_THREADFINISH   WM_USER+1000  
   
  typedef   struct   t_PDB  
  {  
          WORD     Type;  
          WORD     Refcount;  
          DWORD   Unk0;  
          DWORD   Unk1;  
          DWORD   Unk2;  
          DWORD   TermStatus;  
          DWORD   Unk3;  
          DWORD   DefaultHeap;  
          DWORD   MemContext;      
          DWORD   Flags;  
          DWORD   pPsp;  
          WORD     PSPSelector;  
          WORD     MTEIndex;  
          WORD     nThreads;  
          WORD     nThreadsNotTerm;  
          WORD     Unk5;  
          WORD     nR0Threads;  
          DWORD   HeapHandle;  
          WORD     K16TDBSel;  
          WORD     Unk6;  
          DWORD   Unk7;  
          DWORD   pEDB;  
          DWORD   pHandleTable;  
          struct   t_PDB   *ParentPDB;  
          DWORD   MODREFList;  
          DWORD   ThreadList;  
          DWORD   DebugeeCB;  
          DWORD   LHFreeHead;  
          DWORD   InitialR0ID;  
  }PDB,*   PPDB;  
   
  typedef   struct   t_TCB  
  {  
          WORD     Type;  
          WORD     RefCount;  
          DWORD   Unk1;  
          DWORD   pvExcept;  
          DWORD   TopOfStack;  
          DWORD   BaseOfStack;  
          WORD     K16TDB;  
          WORD     StackSel16;  
          DWORD   Unk2;  
          DWORD   UserPointer;  
          DWORD   pTIB;  
          WORD     TIBflags;  
          WORD     Win16MutxCnt;  
          DWORD   DebugContext;  
          DWORD   PtrToCurPri;  
          DWORD   MsgQueue;  
          DWORD   pTLSarray;  
          PPDB     pParentPDB;  
          DWORD   SelmanList;  
          DWORD   Unk3;  
          DWORD   Flags;  
          DWORD   Status;  
          WORD     TIBsel;  
          WORD     EmulatorSel;  
          DWORD   HandleCount;  
          DWORD   WaitNodeList;  
          DWORD   R0hThread;  
          DWORD   ptdbx;  
  }TCB,*   PTCB;  
   
  typedef   HINSTANCE   (WINAPI   *   LOADLIBRARY)(LPCTSTR);  
  typedef   BOOL   (WINAPI   *   POSTTHREADMESSAGE)(DWORD   idThread,UINT   Msg,WPARAM   wParam,LPARAM   lParam);  
     
  typedef   DWORD   (WINAPI*   OTFUNC)(HANDLE   *,DWORD,void   *,void   *);  
  typedef   LPVOID   (WINAPI   *   OBFUNC)(DWORD   dwPTID);  
   
  LPVOID   WINAPI   GetTrueProcAddress(LPSTR   lpMod,LPTSTR   lpFunc);  
  HANDLE   WINAPI   OpenThreadNT(DWORD   dwThreadID,BOOL   bInherit);  
   
  class   hackerdll  
  {  
  public:  
  hackerdll(char   *,char   *);  
  protected:  
  ~hackerdll();  
  public:  
  void   AddToThread(void);  
  protected:  
  LPVOID   XORProcessThreadID(DWORD   dwPTID);  
  HANDLE   OpenThread2(DWORD   dwThreadID,BOOL   bInherit);  
  HANDLE   OpenThreadNT(DWORD   dwThreadID,BOOL   bInherit);  
  LPVOID   GetTrueProcAddress(LPSTR   lpMod,LPTSTR   lpFunc);  
  DWORD   GetProcessID(LPCTSTR   lpszProcessName);  
  DWORD   GetThreadID(DWORD   dwOwnerPID);  
  protected:  
  bool   initok;  
  char   hackerdllfile_[MAX_PATH];  
  LPVOID   m_lpCodeBase,m_lpDataBase;  
  CONTEXT   m_OldThreadContext;  
  HANDLE   m_hInjectThread;  
  HANDLE   hdlthd_;  
  DWORD   idthd_;  
  DWORD   owneridproc,owneridthd;  
  DWORD   len_;  
  };  
   
  #endif  
  -------HEADER   FILE-------  
   
  ------CPP   FILE-------  
  #include   "hackerdll.h"  
   
  static   HANDLE   hdlthd__;  
  static   CONTEXT   cnt__;  
   
  #pragma   check_stack(off)  
   
  static   void   hackerdllentry(void)  
  {  
  ((LOADLIBRARY)   0x11111111)((char   *)   0x22222222);  
   
  ((POSTTHREADMESSAGE)   0x33333333)((DWORD)   0x44444444,WM_THREADFINISH,NULL,NULL);  
   
  while(true)  
  {  
  }  
  }  
   
  static   DWORD   FinishCallBack(LPVOID   lpParam)  
  {  
  MSG   msg_;  
   
  while(memset(&   msg_,NULL,sizeof(MSG)),PeekMessage(&   msg_,NULL,NULL,NULL,PM_REMOVE),msg_.message!=WM_QUIT)  
  {  
  if(msg_.message==WM_THREADFINISH)  
  {  
  SuspendThread(hdlthd__);  
   
  cnt__.ContextFlags=CONTEXT_FULL;  
   
  SetThreadContext(hdlthd__,&   cnt__);  
   
  ResumeThread(hdlthd__);  
   
  break;  
  }  
  }  
   
  return   true;  
  }  
   
  #pragma   check_stack(on)  
   
  hackerdll::hackerdll(char   *   hackerdll_,char   *   owner_)  
  {  
  HINSTANCE   hinstKernel,hinstUser;  
   
  LOADLIBRARY   fnLoadLibrary;  
   
  POSTTHREADMESSAGE   fnPostThreadMessage;  
   
  bool   rt1_,rt2_,rt3_,rt4_;  
   
  this->initok=false;  
   
  this->idthd_=NULL;  
   
  this->hdlthd_=NULL;  
   
  this->m_lpCodeBase=NULL;  
   
  this->m_lpDataBase=NULL;  
   
  this->len_=1024;  
   
  memset(this->hackerdllfile_,NULL,MAX_PATH);  
   
  strcpy(this->hackerdllfile_,hackerdll_);  
   
  this->owneridproc=GetProcessID(owner_);  
   
  this->owneridthd=GetThreadID(this->owneridproc);  
   
  this->m_lpCodeBase=GlobalAlloc(GMEM_FIXED   |   GMEM_SHARE   |   GMEM_ZEROINIT,this->len_);  
   
  this->m_lpDataBase=GlobalAlloc(GMEM_FIXED   |   GMEM_SHARE   |   GMEM_ZEROINIT,this->len_);  
   
  if(this->m_lpCodeBase==NULL   ||   this->m_lpDataBase==NULL)  
  {  
  return;  
  }  
   
  memcpy((BYTE   *)   this->m_lpCodeBase,(BYTE   *)   hackerdllentry,this->len_);  
   
  memcpy((BYTE   *)   this->m_lpDataBase,(BYTE   *)   this->hackerdllfile_,this->len_);  
   
  hinstKernel=GetModuleHandle("Kernel32.dll");  
   
  hinstUser=GetModuleHandle("User32.dll");  
   
  fnLoadLibrary=(LOADLIBRARY)   GetProcAddress(hinstKernel,"LoadLibraryA");  
   
  fnPostThreadMessage=(POSTTHREADMESSAGE)   GetProcAddress(hinstUser,"PostThreadMessageA");  
   
  if(fnLoadLibrary==NULL   ||   fnPostThreadMessage==NULL)  
  {  
  return;  
  }  
   
  this->hdlthd_=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)   FinishCallBack,NULL,NULL,&   this->idthd_);  
   
  if(this->hdlthd_==NULL)  
  {  
  return;  
  }  
   
  rt1_=false;  
  rt2_=false;  
  rt3_=false;  
  rt4_=false;  
   
  for(DWORD   i=0;i<this->len_;i++)  
  {  
  DWORD   *   dwPtr=(DWORD   *)   (((BYTE   *)   this->m_lpCodeBase)+i);  
   
  switch(*   dwPtr)  
  {  
  case   0x11111111:  
   
  rt1_=true;  
   
  *   dwPtr=(DWORD)   fnLoadLibrary;  
   
  break;  
  case   0x22222222:  
   
  rt2_=true;  
   
  *   dwPtr=(DWORD)   m_lpDataBase;  
   
  break;  
  case   0x33333333:  
   
  rt3_=true;  
   
  *   dwPtr=(DWORD)   fnPostThreadMessage;  
   
  break;  
  case   0x44444444:  
   
  rt4_=true;  
   
  *   dwPtr=(DWORD)   this->idthd_;  
   
  break;  
  }  
   
  if(rt1_   &&   rt2_   &&   rt3_   &&   rt4_)  
  {  
  break;  
  }  
  }  
   
  this->initok=(rt1_   &&   rt2_   &&   rt3_   &&   rt4_);  
  }  
   
  hackerdll::~hackerdll()  
  {  
  Sleep(3000);  
   
  GlobalFree(this->m_lpCodeBase);  
   
  GlobalFree(this->m_lpDataBase);  
   
  TerminateThread(this->hdlthd_,true);  
   
  Sleep(3000);  
  }  
   
  LPVOID   hackerdll::XORProcessThreadID(DWORD   dwPTID)  
  {  
  OBFUNC   obfuscate;  
  DWORD   dwMain,*   lpdw,dw1;  
   
  dwMain=(DWORD)   GetTrueProcAddress("Kernel32.dll","GetCurrentThreadId");  
   
  lpdw=(LPDWORD)((DWORD)   dwMain+8);  
   
  dw1=((DWORD)   dwMain+12);  
   
  obfuscate=(OBFUNC)   (dw1+*lpdw);  
   
  return(obfuscate(dwPTID));  
  }  
   
  HANDLE   hackerdll::OpenThread2(DWORD   dwThreadID,BOOL   bInherit)  
  {  
  HANDLE   hThread,hprc;  
  LPDWORD   lp1;  
  DWORD   dwProcessID,dwWhere,dwTable;  
  BOOL   b1;  
  PTCB   lpThreadObj;  
  PPDB   ppdb;  
  OSVERSIONINFO   osvi;  
   
  osvi.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);  
   
  GetVersionEx(&   osvi);  
   
  SetLastError(50);  
   
  if(osvi.dwPlatformId==VER_PLATFORM_WIN32_NT)  
  {  
                  return   OpenThreadNT(dwThreadID,   bInherit);  
  }  
   
  ppdb=(PPDB)   XORProcessThreadID(GetCurrentProcessId());  
   
  lpThreadObj=(PTCB)   XORProcessThreadID(dwThreadID);  
   
  /*   check   to   make   sure   its   valid   */  
   
  if(IsBadReadPtr(lpThreadObj,sizeof(TCB)))  
  {  
  return   NULL;  
  }  
   
  /*   object   type   */  
   
  if(*   (LPBYTE)   lpThreadObj!=7)  
  {  
  return   NULL;  
  }  
   
  dwProcessID   =(DWORD)   XORProcessThreadID((DWORD)lpThreadObj->pParentPDB);  
   
  if(dwProcessID==GetCurrentProcessId())  
  {  
                  hprc   =   GetCurrentProcess();  
  }  
  else  
  {  
                  hprc=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessID);  
   
  if(!hprc)  
  {  
  return   NULL;  
  }  
  }  
   
  /*  
    *   4   is   the   lowest   handle   in   the   table.  
    *   All   processes   have   this   handle.  
  */  
   
  b1   =   DuplicateHandle(hprc,(HANDLE)   4,GetCurrentProcess(),&   hThread,THREAD_ALL_ACCESS,bInherit,NULL);  
   
  if(hprc!=GetCurrentProcess())  
  {  
                  CloseHandle(hprc);  
  }  
   
  if(!b1)  
  {  
  return   NULL;  
  }  
   
  dwWhere=((DWORD)   hThread)>>2;  
   
  dwTable=ppdb->pHandleTable;  
   
  lp1=(LPDWORD)   (dwTable+(dwWhere*8)+8);  
   
  *   lp1=(DWORD)   lpThreadObj;  
   
  return(hThread);  
  }  
   
  HANDLE   hackerdll::OpenThreadNT(DWORD   dwThreadID,BOOL   bInherit)  
  {  
  HANDLE   hThread   =   NULL;  
  DWORD   struct1[]   =   {0x18,   0,   0,   0,   0,   0};  
  DWORD   struct2[]   =   {0,dwThreadID};  
  HMODULE   hLib   =   LoadLibrary("ntdll.dll");  
   
  OTFUNC   OpenThatNTThread=(OTFUNC)   GetProcAddress(hLib,"NtOpenThread");  
   
  struct1[3]=bInherit;  
   
  OpenThatNTThread(&   hThread,THREAD_ALL_ACCESS,struct1,struct2);  
   
  FreeLibrary(hLib);  
   
  return   hThread;  
  }  
   
  LPVOID   hackerdll::GetTrueProcAddress(LPSTR   lpMod,LPTSTR   lpFunc)  
  {  
  LPVOID   bla;  
   
  bla=GetProcAddress(GetModuleHandle(lpMod),lpFunc);  
   
  if(!bla)  
  {  
  return   NULL;  
  }  
   
  if(*   (LPBYTE)   bla==0x68)  
  {  
                  bla=(LPVOID)   *   (LPDWORD)   ((DWORD)bla+1);  
  }  
   
  return   bla;  
  }  
   
  void   hackerdll::AddToThread(void)  
  {  
  if(!this->initok)  
  {  
  MessageBox(NULL,"init   fail","fail",MB_OK);  
   
  return;  
  }  
   
  this->m_hInjectThread=this->OpenThread2(this->owneridthd,FALSE);  
   
  if(this->m_hInjectThread   &&   this->m_lpCodeBase   &&   this->m_lpDataBase)  
  {  
  SuspendThread(this->m_hInjectThread);  
   
  CONTEXT   ThreadContext;  
   
  ThreadContext.ContextFlags=CONTEXT_FULL;  
   
  if(GetThreadContext(this->m_hInjectThread,&   ThreadContext))  
  {  
  this->m_OldThreadContext=ThreadContext;  
   
  ThreadContext.Eip=(DWORD)   this->m_lpCodeBase;  
   
  ThreadContext.ContextFlags=CONTEXT_FULL;  
   
  SetThreadContext(this->m_hInjectThread,&   ThreadContext);  
  }  
   
  hdlthd__=this->m_hInjectThread;  
   
  cnt__=this->m_OldThreadContext;  
   
  ResumeThread(this->m_hInjectThread);  
   
  PostThreadMessage(this->owneridthd,WM_NULL,NULL,NULL);  
  }  
  }  
   
  DWORD   hackerdll::GetProcessID(LPCTSTR   lpszProcessName)  
  {  
  DWORD   dwRet=NULL;  
  char   *   strExePath=NULL;  
  char   *   rt_=NULL;  
   
  HANDLE   hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);  
   
  if(hSnapshot!=INVALID_HANDLE_VALUE)  
  {  
  PROCESSENTRY32   ProcessEntry;  
   
  ZeroMemory(&   ProcessEntry,sizeof(PROCESSENTRY32));  
   
  ProcessEntry.dwSize=sizeof(PROCESSENTRY32);  
   
  BOOL   bFlag=Process32First(hSnapshot,&ProcessEntry);  
   
  while(bFlag)  
  {  
  strExePath=strdup(ProcessEntry.szExeFile);  
   
  CharUpperBuff(strExePath,strlen(strExePath));  
   
  rt_=strstr(strExePath,lpszProcessName);  
   
  if(free(strExePath),rt_!=NULL)  
  {  
  dwRet=ProcessEntry.th32ProcessID;  
   
  break;  
  }  
   
  ProcessEntry.dwSize=sizeof(PROCESSENTRY32);  
   
  bFlag=Process32Next(hSnapshot,&   ProcessEntry);  
  }  
   
  CloseHandle(hSnapshot);  
  }  
   
  return   dwRet;  
  }  
   
  DWORD   hackerdll::GetThreadID(DWORD   dwOwnerPID)  
  {  
  DWORD   dwRet=NULL;  
   
  HANDLE   hThreadSnap=NULL;    
   
  THREADENTRY32   te32;    
   
  memset(&   te32,NULL,sizeof(THREADENTRY32));  
   
  hThreadSnap=CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,NULL);  
   
          if(hThreadSnap!=INVALID_HANDLE_VALUE)    
  {  
  te32.dwSize=sizeof(THREADENTRY32);    
   
  if(Thread32First(hThreadSnap,&   te32))  
  {    
  do    
  {    
  if(te32.th32OwnerProcessID==dwOwnerPID)    
  {    
  dwRet=te32.th32ThreadID;  
   
  break;  
  }    
  }    
  while(Thread32Next(hThreadSnap,   &   te32));    
  }  
   
  CloseHandle(hThreadSnap);  
          }    
   
  return   dwRet;  
  }  
  ------CPP   FILE-------

 

 
回复时引用此帖 多重引用本帖 快速回复此帖

初级会员
初级会员

资 料:
注册日期: May 2004
帖子: 2,988
精华: 0
声望: 12 鸡蛋壳 品行端正
2 旧 2008-01-04, 20:41 默认
鸡蛋壳 当前离线 添加 鸡蛋壳 的声望 反映此帖

引用:
最初由 鸡蛋壳发布 查看帖子
-------HEADER   FILE-------  
  #ifndef   _INCLUDE_HACKER_DLL_HADER_FILE  
  #define   _INCLUDE_HACKER_DLL_HADER_FILE  
   
  #include   <windows....
在使用时,格式是:  
   
  hackerdll   *   hkdll;  
   
  hkdll=new   hackerdll("path//yours.dll","NotePad.exe");  
   
  hkdll->AddToThread();  
   
  delete   hkdll;  
   
  如果成功,则你的DLL被家到NotePad.exe中了.  
   
可以在CLASS的构造的最后加:  
   
  /*  
  DWORD   l_;  
   
  l_=(DWORD)   FinishCallBack-(DWORD)   hackerdllentry;  
   
  memcpy((BYTE   *)   &   this->m_lpCodeBase,(BYTE   *)   &   hackerdllentry,l_);  
   
  hackerdllentry();  
  */  
  this->initok=(rt1_   &&   rt2_   &&   rt3_   &&   rt4_);  
   
  当把注释那掉后,hackerdllentry运行的结果就是我们要地
 
把dll模块注入到游戏进程的方法<a> DLL注入技术: 是将一个Dll文件强行加载到目标进程中,比如把外挂dll模块注入到游戏进程,这样做的目的在于方便我们通过这个DLL读写目标进程指令或内存数据,(例如 HOOK游戏函数过程或篡改游戏内存数据实现外挂功能),或以被注入进程的身份去执行一些操作等。全系统注入的优点:利用系统机制实现的全系统进程注入,可绕过比如游戏进程自身的防注入保护机制。比如远线程注入游戏可能会被拦截,但输入法注入,游戏很难拦截。 阅读详情

相关推荐

【外挂编程】外挂编程技术揭秘(三)DLL注入

引言: 一个礼拜没有更新这个主题文章了,这周三看到一个微信推送。某某某博士由于写外挂被抓。当时心里那是一个崩溃,不过之前写了这个主题,还是会继续写完,不能半途而废。不过了解这本技术的千万不要拿去捞偏门。我刚写这篇文章的时候在想这个主题要不要改一改。叫《我们一起写外挂吧,会被抓那种》,^ - ^,玩笑了。开始我们今天的内容吧,我们还是继续讲内存挂,不过我们今天的主题是讲注入。 文中介绍的注入...

c-rain 1万+

delphi远程dll注入运行

<br />begin<br />这里是开始代码运行的地方<br />end.

wangyevon的专栏 646

无DLL,直接将整个EXE注入其他进程

注入代码的方式比较 注入shellcode 优点: 1. 简单,只需要EXE的一部分。代码可以用C\C++或汇编写 缺点: 1. 要写位置无关代码,这意味着不能直接使用全局变量、其他编译单元的函数(包括CRT的memcpy)、API等。如果要使用则要由源进程分配空间、计算API在目标进程的地址,并传到目标进程的shellcode。或者shellcode自己计算LoadLibrary和Ge...

El Psy Congroo 1万+

delphi完美的线程注入和卸载

/***************************************卸载dll**************************************//***********************************线程DLL***********************************//**********************************调整进程权限*******************************

q304929130的专栏 821

远程注入DLL并自动显示DLL的窗口

以前也可以注入并显示窗口,但是一旦卸载则会导致宿主进程也被关闭,今天终于搞定卸载注入的DLL后不影响宿主进程。源码在http://wooddoor.ys168.com的VC目录下的“远程注入、卸载.rar”【VC2008的工程】注入器源码部分:#include namespace pathfileFun{    //*********************************

柴门的编程学习基地 6621

DLL注入练习之远程注入-CreateRemoteThread()

最近在学习Windows API,觉得其中的一些函数比较有意思,就把它记录下来了。

RickGray 7305

利用远程线程注入DLL Delphi版

====================================================== 注:本文源代码点此下载 ====================================================== sdk文档里是这样描述的:进程是一个正在运行的程序,它拥有自己的地址空间,拥有自己的代码,数据和其他系统资源.一个进程包含了一个或者多个运行在此进

javazhuanzai的专栏 537

游戏逆向_DLL注入技术

DLL注入技术: 是将一个Dll文件强行加载到目标进程中,比如把外挂dll模块注入到游戏进程,这样做的目的在于方便我们通过这个DLL读写目标进程指令或内存数据,(例如 HOOK游戏函数过程或篡改游戏内存数据实现外挂功能),或以被注入进程的身份去执行一些操作等。全系统注入的优点:利用系统机制实现的全系统进程注入,可绕过比如游戏进程自身的防注入保护机制。比如远线程注入游戏可能会被拦截,但输入法注入,游戏很难拦截。

douluo998的博客 5564

手把手教delphi:写你的dll文件

一、开使你的第一个DLL专案   1.File-&gt;Close all-&gt;File-&gt;New﹝DLL﹞ 代码: //自动产生Code如下 library Project2; //这有段废话 uses SysUtils, Classes; {$R *.RES} begin end. 2.加个Func进来: 代码: library Proj...

java开发指南博客 【转载】 190

Windows进程注入DLL技术与源码解析

htmltable {th, td {th {pre {简介:在Windows系统中,进程注入DLL是一种技术,可动态加载代码至目标进程。该技术用于系统调试、插件开发、恶意软件等,涉及DLL的概念与注入过程。本篇将详细探讨DLL注入的步骤,包括枚举进程、打开进程、映射DLL、创建远程线程和清理等待,并通过C语言源码示例来深入理解其实现细节,同时强调安全使用的重要性。

weixin_35649491的博客 1408

几个源代码解决了自己的DLL问题,收藏

几个源代码解决了自己的DLL问题,收藏 几个源代码解决了自己的DLL问题,收藏 几个源代码解决了自己的DLL问题,收藏

向其他进程注入代码的三种方法

目录: ●导言 ●Windows 钩子(Hooks) ●CreateRemoteThread 和LoadLibrary 技术 ○进程间通讯 ●CreateRemoteThread 和 WriteProcessmemory 技术 ○如何使用该技术子类(SubClass)其他进程中的控件 ○什么情况下适合使用该技术   我们在Code project(http://www.codeproject.

求索 2262

DELPHI DLL注入源码

可以注入DLL到其他程序中,注入后执行读取修改 HOOK等操作 用途你懂的

DLL注入的8种姿势

目录 1、远程线程注入 2、APC注入 3、注册表注入 4、ComRes注入 5、劫持进程创建注入 6、输入法注入 7、消息钩子注入 8、依赖可信任进程注入 一、DLL注入——远程线程注入 https://blog.youkuaiyun.com/Cody_Ren/article/details/100041660 二、DLL注入——APC注入 APC注入...

VI___ 1万+

DLL注入进程Delphi代码

注入之后,在目标进程的任一窗口内,按Ctrl+F8,就会呼叫出pp.dll的管理窗口,你就可以为所欲为了。

Delphi进程注入的实例

最近看的一个关于进程注入的方式,自己做了个Demo实现了一下

源码解析DLL自卸载无模块注入

对windows安全比较熟悉的同学对模块注入应该都比较了解,很多病毒、木马、外挂都会用到,无模块注入应用得则比较少。      无模块注入的好处是DLL注入进去后,确实已经不以模块的形式存在了,用任何进程模块查看工具,都找不到注入进去的DLL。因为它已经变为一块纯堆内存,跟EXE主模块里申请的堆没有任何差别。      这里讲的一种无模块注入的方法,能够让DLL自身实现这样的功能,无需外部

燕十二的BLOG 6539

dll注入源码

/////////////////////////////////////dll注入加注册表访问码//////////////////////////////////////////<br><br><br>hook_explorer文件夹里是dll源码,test_dll下是测试程序.里面包括了读写注册表的源码.测试时将dll放到E:盘目录下,我是在测试程序里直接写了路径.使用时关闭所有的杀毒软件,不然会拒绝访问.(可能在我下面的版本中会构建一个dll注入病毒的原型,希望大家继续关注)<br><br><br>//////////////-----------版权所有zz(周周) QQ:505171269/阿库浏览器以及acoolive开发团队-------///////////<br><br>我是一个在职的php程序员,研究windows内核是我平时的爱好,可能代码写的不怎么样,请各位大侠指教.希望不要有人将注入技术用于不好的方面.我们搞开发的应该做一些有益于社会的东西,而不是去危害社会.(不要认为会做这些危害社会的东西就很厉害了,其实这些东西和那些大的项目比起来只是小儿科.)<br><br><br>////////////////////////////////////////////////////////////////////////////////////////////////////////

上一篇: Spirit2.Uploader Coder
下一篇: 给新手--古老版本QQ木马源代码及说明
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值