首页
社区
课程
招聘
[旧帖] 32位dll以及exe文件在64位系统上注入问题 0.00雪花
发表于: 2010-8-23 23:56 17510

[旧帖] 32位dll以及exe文件在64位系统上注入问题 0.00雪花

2010-8-23 23:56
17510
Dll文件是32位的。而目标exe也是32位的
在32位系统上可以正常注入,而在64位系统上(测试系统为:64位win7)无法注入。
谁能帮忙修改下代码可以让其在64位系统上可注入。

代码是通过网络上找到的注入代码:
{ 注入远程进程 } 
function InjectTo(const Host, Guest: string; const PID: DWORD = 0): DWORD; 
var 
  { 被注入的进程句柄,进程ID} 
  hRemoteProcess: THandle; 
  dwRemoteProcessId: DWORD; 
 
  { 写入远程进程的内容大小 } 
  memSize: DWORD; 
 
  { 写入到远程进程后的地址 } 
  pszLibFileRemote: Pointer; 
 
  iReturnCode: Boolean; 
  TempVar: DWORD; 
 
  { 指向函数LoadLibraryW的地址 } 
  pfnStartAddr: TFNThreadStartRoutine; 
 
  { dll全路径,需要写到远程进程的内存中去 } 
  pszLibAFilename: PwideChar; 
begin 
  Result := 0; 
  { 设置权限 } 
  EnabledDebugPrivilege(True); 
 
  { 为注入的dll文件路径分配内存大小,由于为WideChar,故要乘2 } 
  Getmem(pszLibAFilename, Length(Guest) * 2 + 1); 
  StringToWideChar(Guest, pszLibAFilename, Length(Guest) * 2 + 1); 
 
  { 获取进程ID } 
  if PID > 0 then 
     dwRemoteProcessID := PID 
  else 
     GetMyProcessID(Host, False, dwRemoteProcessID); 
 
  { 取得远程进程句柄,具有写入权限} 
  hRemoteProcess := OpenProcess(PROCESS_CREATE_THREAD + {允许远程创建线程} 
      PROCESS_VM_OPERATION + {允许远程VM操作} 
      PROCESS_VM_WRITE, {允许远程VM写} 
      FALSE, dwRemoteProcessId); 
 
  { 用函数VirtualAllocex在远程进程分配空间,并用WriteProcessMemory中写入dll路径 } 
  memSize := (1 + lstrlenW(pszLibAFilename)) * sizeof(WCHAR); 
  pszLibFileRemote := PWIDESTRING(VirtualAllocEx(hRemoteProcess, nil, memSize, MEM_COMMIT, PAGE_READWRITE)); 
  TempVar := 0; 
  iReturnCode := WriteProcessMemory(hRemoteProcess, pszLibFileRemote, pszLibAFilename, memSize, TempVar); 
 
  if iReturnCode then 
  begin 
    pfnStartAddr := GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryW'); 
    TempVar := 0; 
    { 在远程进程中启动dll } 
    Result := CreateRemoteThread(hRemoteProcess, nil, 0, pfnStartAddr, pszLibFileRemote, 0, TempVar); 
  end; 
 
  { 释放内存空间 } 
  Freemem(pszLibAFilename); 
end;

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 59
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
可以在应用程序属性里设置兼容性运行,XP可以运行的win7都可以以这种方式运行,试试
再就是我分少。希望可以施舍点。。
2010-8-27 17:46
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
检查下是否是权限问题导致的
2010-8-27 20:36
0
雪    币: 130
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我用管理员身份和兼容sp3都不行....
2010-8-27 22:49
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
我听说(尚未亲自动手证实)win7系统即便是系统的dll,在不同的程序中,在加载的时候也不会加载到到同一个基址去,如果这个属实,那么LZ的代码显然不能完成任务,因为注入的程序和被注入的程序两者的LoadLibraryW的地址不相同。
2010-8-28 13:38
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
聪明啊,这都猜到了,我就没猜到.不过我还想到一点如果32位的应用程序注入了64位应用程序的话,函数一种是4字节的,一种是8字节的,肯定会出问题的了
顺便问下大家,在64位程序中内嵌汇编的方法是什么
2011-6-25 11:50
0
雪    币: 732
活跃值: (192)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
win7-64中,加上 PROCESS_QUERY_INFORMATION 权限
2020-7-2 10:18
0
游客
登录 | 注册 方可回帖
返回
//