Delphi 無法寫入記憶體 |
答題得分者是:rick060
|
n4chen
一般會員 ![]() ![]() 發表:9 回覆:7 積分:3 註冊:2011-05-12 發送簡訊給我 |
我想寫入自己程式的記憶體,但都無法寫入,好像受保護的樣子
type PJmpCode = ^TJmpCode; TJmpCode = packed record JmpCode:BYTE; Address:Pointer; MovEAX: Array [0..2] of BYTE; end; function MsgBox(Window:HWND;Text,Caption:PChar;uType:UINT):Integer;WINAPI;stdcall;assembler; begin Result:=0; end; procedure TForm2.Button1Click(Sender: TObject); var NULL:Cardinal; Addr:PJmpCode; begin Addr.JmpCode:=$B8; Addr.MovEAX[0]:=$FF; Addr.MovEAX[1]:=$E0; Addr.MovEAX[2]:=0; Addr.Address:=@MsgBox; VirtualProtectEx(GetCurrentProcess,@MessageBoxW,SizeOf(Pointer),PAGE_EXECUTE_READWRITE,NULL); WriteProcessMemory(GetCUrrentProcess,@MessageBoxW,@Addr,SizeOf(Pointer),NULL); end; 請問大大,要如何強制寫入記憶體 |
rick060
高階會員 ![]() ![]() ![]() ![]() 發表:2 回覆:112 積分:217 註冊:2009-11-17 發送簡訊給我 |
|
n4chen
一般會員 ![]() ![]() 發表:9 回覆:7 積分:3 註冊:2011-05-12 發送簡訊給我 |
|
littlestone08
一般會員 ![]() ![]() 發表:0 回覆:2 積分:5 註冊:2009-05-29 發送簡訊給我 |
写入代码的时候需要特权,看代码你好像没有提升你的执行权限,下面给出提升权限的代码,你可以在WriteProcessMemory前调用它
试试吧 [code cpp] int EnableDebugPriv(const char * name) { HANDLE hToken; TOKEN_PRIVILEGES tp; LUID luid; //打开进程令牌环 OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken); //获得进程本地唯一ID LookupPrivilegeValue(NULL,name,&luid) ; tp.PrivilegeCount = 1; tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; tp.Privileges[0].Luid = luid; //调整权限 AdjustTokenPrivileges(hToken,0,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL); return 0; } [/code] 又看了看,不是这个的原因,应该是就是因为没有GetMem而产生的错误
編輯記錄
littlestone08 重新編輯於 2011-11-30 20:03:57, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |