這兩天在弄遠程注入,發現win764位不支持,在網上找到如下代碼:
typedef DWORD64 (WINAPI *PFNTCREATETHREADEX)
(
PHANDLE ThreadHandle,
ACCESS_MASK DesiredAccess,
LPVOID ObjectAttributes,
HANDLE ProcessHandle,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
BOOL CreateSuspended,
DWORD64 dwStackSize,
DWORD64 dw1,
DWORD64 dw2,
LPVOID Unknown
);
這里是定義一個結構體,然后下面用來格式化函式:
pFunc = GetProcAddress(GetModuleHandle(L"ntdll.dll"), "NtCreateThreadEx");
if( pFunc == NULL )
{
printf("MyCreateRemoteThread() : GetProcAddress(\"NtCreateThreadEx\") 呼叫失敗!錯誤代碼: [%d]/n",
GetLastError());
return FALSE;
}
((PFNTCREATETHREADEX)pFunc)(
&hThread,
0x1FFFFF,
NULL,
hProcess,
pThreadProc,
pRemoteBuf,
FALSE,
NULL,
NULL,
NULL,
NULL); if( hThread == NULL )
{
printf("MyCreateRemoteThread() : NtCreateThreadEx() 呼叫失敗!錯誤代碼: [%d]/n", GetLastError());
return FALSE;
}
請問這段怎么轉換成dephi的,大神門幫幫忙,發下翻譯后的代碼哈
uj5u.com熱心網友回復:
主要是上面那個結構體,在delphi中怎么寫,和紅色標注的那部分怎么翻譯成delphi的,謝謝大家了uj5u.com熱心網友回復:
其實就是定義一個函式uj5u.com熱心網友回復:
NtCreateThreadEx這些NativeAPI函式Delphi的JEDI專案的Native都有對應的翻譯.具體自己找uj5u.com熱心網友回復:
能幫忙翻譯下嗎,就翻譯最上面的結構體和下面的紅色字體部分就行,拜托啦。。。
uj5u.com熱心網友回復:
typedef DWORD64 (WINAPI *PFNTCREATETHREADEX)
(
PHANDLE ThreadHandle,
ACCESS_MASK DesiredAccess,
LPVOID ObjectAttributes,
HANDLE ProcessHandle,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
BOOL CreateSuspended,
DWORD64 dwStackSize,
DWORD64 dw1,
DWORD64 dw2,
LPVOID Unknown
);
這可不是一個結構體啊,這定義的是一個函式指標,只是帶的引數比較多而已。
uj5u.com熱心網友回復:
TNtCreateThreadEx = function(ThreadHandle:THandle;DesiredAccess:ACCESS_MASK;
ObjectAttributes:Pointer;
ProcessHandle:THandle;
lpStartAddress:TFNThreadStartRoutine;
lpParameter:Pointer;
CreateSuspended:BOOL;
dwStackSize:Int64;
dw1:Int64;
dw2:Int64;
Unknown:Pointer):Int64;
pFunc:= GetProcAddress(GetModuleHandle('ntdll.dll'),'NtCreateThreadEx');
if pFunc= nil then
begin
ShowMessage(IntToStr(GetLastError));
Result:=0;
end;
TNtCreateThreadEx(pFunc)(hThread,$1FFFFF,nil,hRemoteProcess,pfnStartAddr,pszLibFileRemote,False,0,0,0,nil);
if hThread=0 then
begin
ShowMessage('NtCreateThreadEx() 呼叫失敗!錯誤代碼:'+inttostr(GetLastError));
Result:=0;
end;
都指望不上啊,求大神現身,這樣吧 我自己翻譯了下,哪位大神給指點下,我getlasterror回傳0沒問題,hthread也等于0,求指點!
uj5u.com熱心網友回復:
我感覺這個結構體我翻譯的不對,然后TNtCreateThreadEx(pFunc)(hThread,$1FFFFF,nil,hRemoteProcess,pfnStartAddr,pszLibFileRemote,False,0,0,0,nil);
這句話可能也翻譯的不對?能來個大神指點下?
uj5u.com熱心網友回復:
pfnStartAddr這個也應該是個函式指標吧。pfnStartAddr這個你的定義在哪里?uj5u.com熱心網友回復:
這個前面有定義的,測驗通過的,就我翻譯的這部分,不知道對不對,麻煩斧正下,謝謝
uj5u.com熱心網友回復:
vc 就直接定義的,
我的delphi定義:
pfnStartAddr: TFNThreadStartRoutine; //lib函式地址
pfnStartAddr := TFNThreadStartRoutine(GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryW'));
麻煩幫分析下
uj5u.com熱心網友回復:
關注,樓主解決了沒uj5u.com熱心網友回復:

ntdll.dll中沒看到你所說的NtCreateThreadEx函式,
你使用的是寬字符函式(LoadLibraryW)你傳進去的也要是寬字符哦。
uj5u.com熱心網友回復:
ntdll.dll中沒看到你所說的NtCreateThreadEx函式,
pfnStartAddr這個也應該是個函式指標吧。pfnStartAddr這個你的定義在哪里?
vc 就直接定義的,
我的delphi定義:
pfnStartAddr: TFNThreadStartRoutine; //lib函式地址
pfnStartAddr := TFNThreadStartRoutine(GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryW'));
麻煩幫分析下
你使用的是寬字符函式(LoadLibraryW)你傳進去的也要是寬字符哦。
不懂,應該怎么傳??能貼上代碼嗎,謝謝!
uj5u.com熱心網友回復:
給我200分。我包你hook通過轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/95947.html
