帮忙用delphi翻译一段vc的代码,谢谢大神

ky_chenchen 2014-08-21 12:48:26
这两天在弄远程注入,发现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的,大神门帮帮忙,发下翻译后的代码哈
...全文
1018 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mypk 2014-11-23
  • 打赏
  • 举报
回复
给我200分。我包你hook通过
ky_chenchen 2014-08-27
  • 打赏
  • 举报
回复
引用 12 楼 fang098 的回复:
ntdll.dll中没看到你所说的NtCreateThreadEx函数, [quote=引用 10 楼 ky_chenchen 的回复:] [quote=引用 8 楼 fang098 的回复:] pfnStartAddr这个也应该是个函数指针吧。pfnStartAddr这个你的定义在哪里?
vc 就直接定义的, 我的delphi定义: pfnStartAddr: TFNThreadStartRoutine; //lib函数地址 pfnStartAddr := TFNThreadStartRoutine(GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryW')); 麻烦帮分析下[/quote] 你使用的是宽字符函数(LoadLibraryW)你传进去的也要是宽字符哦。[/quote] 不懂,应该怎么传??能贴上代码吗,谢谢!
fang 2014-08-25
  • 打赏
  • 举报
回复

ntdll.dll中没看到你所说的NtCreateThreadEx函数,

引用 10 楼 ky_chenchen 的回复:
[quote=引用 8 楼 fang098 的回复:]
pfnStartAddr这个也应该是个函数指针吧。pfnStartAddr这个你的定义在哪里?

vc 就直接定义的,
我的delphi定义:
pfnStartAddr: TFNThreadStartRoutine; //lib函数地址
pfnStartAddr := TFNThreadStartRoutine(GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryW'));
麻烦帮分析下[/quote]
你使用的是宽字符函数(LoadLibraryW)你传进去的也要是宽字符哦。
ky_chenchen 2014-08-22
  • 打赏
  • 举报
回复
引用 8 楼 fang098 的回复:
pfnStartAddr这个也应该是个函数指针吧。pfnStartAddr这个你的定义在哪里?
vc 就直接定义的, 我的delphi定义: pfnStartAddr: TFNThreadStartRoutine; //lib函数地址 pfnStartAddr := TFNThreadStartRoutine(GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryW')); 麻烦帮分析下
ky_chenchen 2014-08-22
  • 打赏
  • 举报
回复
引用 8 楼 fang098 的回复:
pfnStartAddr这个也应该是个函数指针吧。pfnStartAddr这个你的定义在哪里?
这个前面有定义的,测试通过的,就我翻译的这部分,不知道对不对,麻烦斧正下,谢谢
木头刀 2014-08-22
  • 打赏
  • 举报
回复
关注,楼主解决了没
ky_chenchen 2014-08-21
  • 打赏
  • 举报
回复
主要是上面那个结构体,在delphi中怎么写,和红色标注的那部分怎么翻译成delphi的,谢谢大家了
fang 2014-08-21
  • 打赏
  • 举报
回复
引用 1 楼 ky_chenchen 的回复:
主要是上面那个结构体,在delphi中怎么写,和红色标注的那部分怎么翻译成delphi的,谢谢大家了
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 ); 这可不是一个结构体啊,这定义的是一个函数指针,只是带的参数比较多而已。
ky_chenchen 2014-08-21
  • 打赏
  • 举报
回复
引用 3 楼 wr960204 的回复:
NtCreateThreadEx这些NativeAPI函数Delphi的JEDI项目的Native都有对应的翻译.具体自己找
能帮忙翻译下吗,就翻译最上面的结构体和下面的红色字体部分就行,拜托啦。。。
武稀松 2014-08-21
  • 打赏
  • 举报
回复
NtCreateThreadEx这些NativeAPI函数Delphi的JEDI项目的Native都有对应的翻译.具体自己找
xhz8000 2014-08-21
  • 打赏
  • 举报
回复
其实就是定义一个函数
fang 2014-08-21
  • 打赏
  • 举报
回复
pfnStartAddr这个也应该是个函数指针吧。pfnStartAddr这个你的定义在哪里?
ky_chenchen 2014-08-21
  • 打赏
  • 举报
回复
我感觉这个结构体我翻译的不对,然后 TNtCreateThreadEx(pFunc)(hThread,$1FFFFF,nil,hRemoteProcess,pfnStartAddr,pszLibFileRemote,False,0,0,0,nil); 这句话可能也翻译的不对?能来个大神指点下?
ky_chenchen 2014-08-21
  • 打赏
  • 举报
回复
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,求指点!

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧