모든 것이 잘 작동하는 것처럼 보이지만 내 코드는 아무 것도하지 않습니다. calc를 메모장에 시작하는 쉘 코드를 삽입하고 싶습니다.델파이 코드 삽입
const
shellcode:array[0..124] of BYTE = (// exec of calc.exe
$fc,$e8,$44,$00,$00,$00,$8b,$45,$3c,$8b,$7c,$05,$78,$01,$ef,$8b,
$4f,$18,$8b,$5f,$20,$01,$eb,$49,$8b,$34,$8b,$01,$ee,$31,$c0,$99,
$ac,$84,$c0,$74,$07,$c1,$ca,$0d,$01,$c2,$eb,$f4,$3b,$54,$24,$04,
$75,$e5,$8b,$5f,$24,$01,$eb,$66,$8b,$0c,$4b,$8b,$5f,$1c,$01,$eb,
$8b,$1c,$8b,$01,$eb,$89,$5c,$24,$04,$c3,$5f,$31,$f6,$60,$56,$64,
$8b,$46,$30,$8b,$40,$0c,$8b,$70,$1c,$ad,$8b,$68,$08,$89,$f8,$83,
$c0,$6a,$50,$68,$7e,$d8,$e2,$73,$68,$98,$fe,$8a,$0e,$57,$ff,$e7,
$63,$61,$6c,$63,$2e,$65,$78,$65,$00,$00,$00,$00,$00);
var
pi: TProcessInformation;
si: TStartupInfo;
ctx: Context;
remote_shellcodePtr: Pointer;
Written:Cardinal;
procedure TForm1.Button1Click(Sender: TObject);
begin
FillMemory(@si, sizeof(si), 0);
FillMemory(@pi, sizeof(pi), 0);
CreateProcess(
Nil,
PChar('notepad.exe'),
Nil, Nil, False,
NORMAL_PRIORITY_CLASS, Nil, Nil, // NORMAL_PRIORITY_CLASS
si, pi);
ctx.ContextFlags := CONTEXT_CONTROL;
GetThreadContext(pi.hThread,ctx);
remote_shellcodePtr:=VirtualAllocEx(pi.hProcess,Nil,SizeOf(shellcode),MEM_COMMIT,
PAGE_EXECUTE_READWRITE);
WriteProcessMemory(pi.hProcess,remote_shellcodePtr,@shellcode,
Sizeof(shellcode),written);
ctx.Eip:=Integer(remote_shellcodePtr);
ctx.ContextFlags := CONTEXT_CONTROL;
SetThreadContext(pi.hThread,ctx);
ResumeThread(pi.hThread);
end;
어쩌면 문제는 CreateProcess를에 있습니다
여기 내 코드입니다. 보안 설정은 CREATE_SUSPENDED | IDLE_PRIORITY_CLASS가 될 수 있습니다. 그러나 그것은 그것이 정의되지 않았 음을 알려줍니다.
나는 당신의 질문이 여기에 있는지 모르겠지만 그것은 "그것이 정의되지 않은 것"이라고 생각합니다. ** 정확한 ** 오류 메시지를 게시하는 데 오류가 발생하면 도움이됩니다. 즉, 바로 앞에 정보가 있으므로 도움이 될만한 이유가 없습니다. (그게 문제가 아니라면, 질문을 편집하고 묻는 것에 대해 더 명확히하십시오.) –
Windows API 함수의 결과를 항상 확인하십시오. 나중에 고마워 할 것입니다. –
당신의 질문은 무엇입니까? –