亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

在Delphi中利用CreateRemoteThread遠程注入例子

2019-11-18 18:01:50
字體:
來源:轉載
供稿:網友

花了一個下午翻了MSDN,寫了這個例子,為了安全,我用Delphi建了個什么也沒有作的程序PRjzzhost.exe,將它用作被注入的宿主進程.
寫了一個TestDll.Dll,里面只有一個Log函數,用來在文件Test.Txt中輸出信息.最重要的一個程序project1.exe是用來注入的.
測試環境: windows server 2003 + delphi 7.0
程序很簡單,高手就不用看了.廢話不說了,看代碼吧!

測試用的TestDll.Dll源代碼(它將被注入到prjzzhost.exe中去):

程序代碼

library TestDll;

uses
  SysUtils,
  System,
  windows,
  Classes;

  procedure Log( s : PChar);stdcall;
  var
    F : TextFile;
  begin
    assignfile(f,'Test.txt');
    if fileexists('Test.txt') then append(f)
    else rewrite(f);
    writeln(f,s);
    closefile(f);
  end;

  procedure DllEntryPoint(dwReason:DWord);
  begin
      case dwReason of
      DLL_PROCESS_ATTACH:
        Log('dll process Attach');
      DLL_PROCESS_DETACH:
      Log('dll process Detach');
      DLL_THREAD_ATTACH:
        Log('dll thread Attach');
      DLL_THREAD_DETACH:
        Log('dll thread Detach');
      end;

  end;

  exports
    Log;

begin
  DllProc := @DllEntryPoint;
  DllEntryPoint(DLL_PROCESS_ATTACH);
end.




被注入的宿主進程prjzzhost.exe(它什么也沒有作,好無辜哦:),這里就不給出代碼了,因為太簡單了,哈哈.


最后,最重要的來了:
project1.exe的源代碼:

程序代碼

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,tlhelp32;

type

  TLog = procedure(s : PChar);stdcall;
  TServiceMain = procedure(argc : Integer; VAR argv : pchar);stdcall;

  EDLLLoadError = class(Exception);

  TForm1 = class(TForm)
    Button3: TButton;
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

{ 列舉進程 }
procedure GetMyProcessID(const AFilename: string; const PathMatch: Boolean; var ProcessID: DWORD);
var
  lppe: TProcessEntry32;
  SsHandle: Thandle;
  FoundAProc, FoundOK: boolean;
begin
  ProcessID :=0;
  { 創建系統快照 }
  SsHandle := CreateToolHelp32SnapShot(TH32CS_SnapProcess, 0);

  { 取得快照中的第一個進程 }
  { 一定要設置結構的大小,否則將返回False }
  lppe.dwSize := sizeof(TProcessEntry32);
  FoundAProc := Process32First(Sshandle, lppe);
  while FoundAProc do
  begin
    { 進行匹配 }
    if PathMatch then
      FoundOK := AnsiStricomp(lppe.szExefile, PChar(AFilename)) = 0
    else
      FoundOK := AnsiStricomp(PChar(ExtractFilename(lppe.szExefile)), PChar(ExtractFilename(AFilename))) = 0;
    if FoundOK then
    begin
      ProcessID := lppe.th32ProcessID;
      break;
    end;
    { 未找到,繼續下一個進程 }
    FoundAProc := Process32Next(SsHandle, lppe);
  end;
  CloseHandle(SsHandle);
end;


{ 設置權限 }
function EnabledDebugPrivilege(const Enabled : Boolean) : Boolean;
var
  hTk : THandle; { 打開令牌句柄 }
  rtnTemp : Dword; { 調整權限時返回的值 }
  TokenPri : TOKEN_PRIVILEGES;
const
  SE_DEBUG = 'SeDebugPrivilege'; { 查詢值 }
begin
  Result := False;
  { 獲取進程令牌句柄,設置權限 }
  if (OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,hTk)) then
  begin
    TokenPri.PrivilegeCount := 1;
    { 獲取Luid值 }
    LookupPrivilegeValue(nil,SE_DEBUG,TokenPri.Privileges[0].Luid);

    if Enabled then
      TokenPri.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
    else
      TokenPri.Privileges[0].Attributes := 0;

    rtnTemp := 0;
    { 設置新的權限 }
    AdjustTokenPrivileges(hTk,False,TokenPri,sizeof(TokenPri),nil,rtnTemp);

    Result := GetLastError = ERROR_SUCCESS;
    CloseHandle(hTk);

  end;
end;


{ 調試函數 }
procedure OutPutText(var CH:PChar);
var
  FileHandle: TextFile;
Begin
  AssignFile(FileHandle,'zztest.txt');
  Append(FileHandle);
  Writeln(FileHandle,CH);
  Flush(FileHandle);
  CloseFile(FileHandle);
END;

{ 注入遠程進程 }
function InjectTo(const Host, Guest: string; const PID: DWORD = 0): DWORD;
var
  { 被注入的進程句柄,進程ID}
  hRemoteProcess: THandle;
  dwRemoteProcessId: DWORD;

  { 寫入遠程進程的內容大小 }
  memSize: DWORD;

  { 寫入到遠程進程后的地址 }
  pszLibFileRemote: Pointer;

  iReturnCode: Boolean;
  TempVar: DWORD;

  { 指向函數LoadLibraryW的地址 }
  pfnStartAddr: TFNThreadStartRoutine;

  { dll全路徑,需要寫到遠程進程的內存中去 }
  pszLibAFilename: PwideChar;
begin
  Result := 0;
  { 設置權限 }
  EnabledDebugPrivilege(True);

  { 為注入的dll文件路徑分配內存大小,由于為WideChar,故要乘2 }
  Getmem(pszLibAFilename, Length(Guest) * 2 + 1);
  StringToWideChar(Guest, pszLibAFilename, Length(Guest) * 2 + 1);

  { 獲取進程ID }
  if PID > 0 then
     dwRemoteProcessID := PID
  else
     GetMyProcessID(Host, False, dwRemoteProcessID);

  { 取得遠程進程句柄,具有寫入權限}
  hRemoteProcess := OpenProcess(PROCESS_CREATE_THREAD + {允許遠程創建線程}
      PROCESS_VM_OperaTION + {允許遠程VM操作}
      PROCESS_VM_WRITE, {允許遠程VM寫}
      FALSE, dwRemoteProcessId);

  { 用函數VirtualAllocex在遠程進程分配空間,并用WriteProcessMemory中寫入dll路徑 }
  memSize := (1 + lstrlenW(pszLibAFilename)) * sizeof(WCHAR);
  pszLibFileRemote := PWIDESTRING(VirtualAllocEx(hRemoteProcess, nil, memSize, MEM_COMMIT, PAGE_READWRITE));
  TempVar := 0;
  iReturnCode := WriteProcessMemory(hRemoteProcess, pszLibFileRemote, pszLibAFilename, memSize, TempVar);

  if iReturnCode then
  begin
    pfnStartAddr := GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryW');
    TempVar := 0;
    { 在遠程進程中啟動dll }
    Result := CreateRemoteThread(hRemoteProcess, nil, 0, pfnStartAddr, pszLibFileRemote, 0, TempVar);
  end;

  { 釋放內存空間 }
  Freemem(pszLibAFilename);
end;

  { 測試 }
procedure TForm1.Button3Click(Sender: TObject);
begin

  InjectTo('prjzzhost.exe', extractfilepath(paramstr(0))+'TestDll.dll');
end;

end.




代碼中并沒有考慮dll被載入后的善后處理,請不要使用系統進程進行測試,以免發生意外.


上一篇:Delphi操作Wrod的幾個知識點

下一篇:在Delphi中使用CreateOleObject方法對WORD文件進行操作

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人精品久久一区二区三区| 91精品成人久久| 91精品国产91久久久久福利| 国产美女久久精品| 日韩网站免费观看高清| 97超碰蝌蚪网人人做人人爽| 国产在线观看精品一区二区三区| 欧美性猛交丰臀xxxxx网站| 国产日韩欧美影视| 国产欧美一区二区三区久久人妖| 欧美亚洲在线视频| 久久久中文字幕| 国产精品白嫩初高中害羞小美女| 视频在线观看一区二区| 久久精品99久久久久久久久| 午夜精品久久久久久久99热浪潮| 亚洲福利视频专区| 一本大道久久加勒比香蕉| 91亚洲人电影| 久久久久久久久久av| 日韩亚洲欧美中文高清在线| 欧美激情精品在线| 久久亚洲精品国产亚洲老地址| 亚洲精品www久久久久久广东| 91久热免费在线视频| 亚洲伊人久久大香线蕉av| 欧美日韩亚洲一区二区| 国产91九色视频| 成人日韩在线电影| 一本色道久久88亚洲综合88| www.99久久热国产日韩欧美.com| 78m国产成人精品视频| 亚洲天堂2020| 少妇久久久久久| 亚洲一级黄色片| 国外日韩电影在线观看| 亚洲aⅴ日韩av电影在线观看| 国产精品久久综合av爱欲tv| 亚洲午夜小视频| 国产亚洲精品日韩| 亚洲欧美国内爽妇网| 欧美色道久久88综合亚洲精品| 国产精品视频导航| 狠狠色香婷婷久久亚洲精品| 精品亚洲永久免费精品| 91精品久久久久久| 亚洲一区二区三区sesese| 中文字幕一区二区精品| 欧美人与性动交| 国产成人久久精品| 欧美视频在线观看免费网址| 成人欧美一区二区三区黑人| 亚洲自拍偷拍色片视频| 国模精品视频一区二区三区| 亚洲欧美综合精品久久成人| 成人午夜在线视频一区| 久久不射热爱视频精品| 亚洲国产欧美久久| 欧美乱妇高清无乱码| 欧美国产欧美亚洲国产日韩mv天天看完整| 另类少妇人与禽zozz0性伦| 欧美激情在线狂野欧美精品| 国产日产欧美a一级在线| 欧美激情视频网站| 精品久久久久久久久久国产| 粗暴蹂躏中文一区二区三区| 亚洲成年人在线| 日韩精品在线免费| 久久激情五月丁香伊人| 成人网在线免费看| 国产97色在线| 国内精品一区二区三区四区| 91wwwcom在线观看| 久久精品久久久久电影| 中文字幕精品网| 美女撒尿一区二区三区| 亚洲成人精品久久| 日韩美女av在线| 美日韩丰满少妇在线观看| 国产欧美va欧美va香蕉在| 欧美激情va永久在线播放| 国产在线一区二区三区| 成人黄在线观看| 久久久中文字幕| 8090理伦午夜在线电影| 自拍亚洲一区欧美另类| 国产精品高潮呻吟久久av黑人| 国产精品爽黄69天堂a| 欧美成人午夜激情视频| 欧美性猛交xxxx乱大交| 亚洲第一区中文99精品| 97久久精品在线| 不用播放器成人网| 日韩在线观看免费全| 亚洲美女自拍视频| 日韩电影免费观看在线| 亚洲精品视频在线播放| 欧美一级片免费在线| 538国产精品视频一区二区| 国产精品久久久久77777| 国模精品视频一区二区| 97久久精品在线| 九九热精品在线| 韩国精品久久久999| 久久电影一区二区| 欧美疯狂xxxx大交乱88av| 97在线视频免费观看| 欧美裸身视频免费观看| 亚洲欧美在线x视频| 国产不卡视频在线| 欧美美最猛性xxxxxx| 久久久精品国产| 国产成人亚洲精品| 日韩在线不卡视频| 亚洲第一综合天堂另类专| 中文字幕少妇一区二区三区| 韩国欧美亚洲国产| 欧美亚洲国产另类| 国产成人精品在线播放| 日本三级韩国三级久久| 亚洲a中文字幕| 亚洲三级 欧美三级| 日韩成人在线视频网站| 国产成人精品一区二区在线| 最近2019中文字幕第三页视频| 国产精品三级网站| 日本国产欧美一区二区三区| 欧美极品少妇与黑人| 国产女人18毛片水18精品| 亚洲国产成人精品一区二区| 国产精品爱啪在线线免费观看| 亚洲欧美日韩精品久久亚洲区| 日韩精品在线私人| 亚洲影院色在线观看免费| 国产日韩中文字幕在线| 欧美大片欧美激情性色a∨久久| 国产视频久久久| 欧美日韩国产黄| 久久99久久99精品免观看粉嫩| 亚洲伊人一本大道中文字幕| 亚洲图片欧洲图片av| 日韩电影中文字幕| 日本欧美国产在线| 欧美—级高清免费播放| 亚洲一区二区在线播放| 国产有码在线一区二区视频| 欧美在线视频a| 久久久久久综合网天天| 亚洲一区二区三区四区视频| 国产成人啪精品视频免费网| 亚洲女在线观看| 68精品久久久久久欧美| 555www成人网| 久久伊人色综合| 亚洲女成人图区| 久久久精品一区二区| 成人国内精品久久久久一区| 国产成人精品免费视频| 日韩资源在线观看| 国内精品久久久久影院优| 亚洲人a成www在线影院| 精品精品国产国产自在线| 欧洲成人在线观看| 亚洲第一视频网站|