日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Delphi進(jìn)程注入的部分代碼

 獨(dú)孤求財(cái) 2012-03-21

Delphi進(jìn)程注入的部分代碼

時(shí)間:2011-6-2來源:yang 作者: peng點(diǎn)擊: 190次

//-------------------------注入代碼的函數(shù)----------------------------
{參數(shù)說明:
InHWND:被注入的窗口句柄
Func:注入的函數(shù)的指針
Param:參數(shù)的指針
ParamSize:參數(shù)的大小
}
procedure InjectFunc(InHWND: HWND; Func: Pointer; Param: Pointer; ParamSize: DWORD);
var
    hProcess_N: THandle;
    ThreadAdd, ParamAdd: Pointer;
    hThread: THandle;
    ThreadID: DWORD;
    lpNumberOfBytes:DWORD;
begin
    GetWindowThreadProcessId(InHWND, @ThreadID);    //獲得窗口ID
    hProcess_N := OpenProcess(PROCESS_ALL_ACCESS, False, ThreadID);//打開被注入的進(jìn)程
    ThreadAdd := VirtualAllocEx(hProcess_N, nil, 4096, MEM_COMMIT, PAGE_READWRITE);    //申請(qǐng)寫入代碼空間
    WriteProcessMemory(hProcess_N, ThreadAdd, Func, 4096, lpNumberOfBytes); //寫入函數(shù)地址
    ParamAdd := VirtualAllocEx(hProcess_N, nil, ParamSize, MEM_COMMIT, PAGE_READWRITE);    //申請(qǐng)寫入代碼參數(shù)空間
    WriteProcessMemory(hProcess_N, ParamAdd, Param, ParamSize, lpNumberOfBytes); //寫入?yún)?shù)地址
    hThread := CreateRemoteThread(hProcess_N, nil, 0, ThreadAdd, ParamAdd, 0, lpNumberOfBytes); //創(chuàng)建遠(yuǎn)程線程
    ResumeThread(hThread); //直接運(yùn)行線程
    CloseHandle(hThread); //關(guān)閉線程

    VirtualFreeEx(hProcess_N, ThreadAdd, 4096, MEM_RELEASE);
    VirtualFreeEx(hProcess_N, ParamAdd, ParamSize, MEM_RELEASE); //釋放申請(qǐng)的地址

    CloseHandle(hProcess_N); //關(guān)閉打開的句柄
end;

//-----------------------------定義一個(gè)參數(shù)類型-----------------------
type
    TPickCallParam = packed record
      ax, ay: single;
    end;
    PPickCallParam = ^TPickCallParam;    //指向結(jié)構(gòu)的指針(C中叫這種方式的數(shù)據(jù)應(yīng)該叫結(jié)構(gòu)體吧)

procedure runCall(p:PPickCallParam);stdcall;    // 走路call
var
addres,addres1,addres2:pointer;
x,y:single;
begin
      addres:=pointer($0045ec00);
      addres1:=pointer($00462620);
      addres2:=pointer($0045f000);
      x:=p^.ax;              //目的地X坐標(biāo)
      y:=p^.ay;            //目的地Y坐標(biāo)
      asm
      pushad
        mov      eax, dword ptr [$8f207c]
        mov      eax, dword ptr [eax+$1C]
        mov      esi, dword ptr [eax+$20]
        mov      ecx, dword ptr [esi+$ba0]
        push      1
        call      addres
        mov      edi, eax
        lea      eax, dword ptr [esp+$18]
        push      eax
        push      0
        mov      ecx, edi
        call      addres1
        push      0
        push      1
        push      edi
        mov      ecx, dword ptr [esi+$ba0]
        push      1
        call      addres2
        mov      eax, dword ptr [$8f207c]
        mov      eax, dword ptr [eax+$1C]
        mov      eax, dword ptr [eax+$20]
        mov      eax, dword ptr [eax+$ba0]
        mov      eax, dword ptr [eax+$30]
        mov      ecx, dword ptr [eax+4]
        mov      eax, x
        mov      [ecx+$20], eax
        mov      eax, y
        mov      [ecx+$28], eax
      popad
      end;

END;

procedure TForm1.Button1Click(Sender: TObject);//在控件中做個(gè)按鈕 測試

var

      CallParam:TPickCallParam;
begin;
    getmem(pname,33);
    myhwnd := FindWindow(nil,‘Element Client‘);{查找窗口句柄}
    GetWindowThreadProcessId(myhwnd, aproc); {得到窗口ID}
    phnd := OpenProcess(PROCESS_VM_READ , False, aproc);{以完全訪問權(quán)限打開進(jìn)程句柄}
    if (phnd<>0 ) then
    begin
      CallParam.ax:= 1860.0;    //給注入代碼函數(shù)賦值
      CallParam.ay:=120.0;      //給注入代碼函數(shù)賦值

      InjectFunc(myhWnd,@runCall,@CallParam,SizeOf(CallParam)); //運(yùn)行注入代碼函數(shù)
      sleep(100);

      CloseHandle(PHND) //關(guān)閉進(jìn)程
    end;
end;

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多