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

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

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

代码是通过网络上找到的注入代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
{ 注入远程进程 }
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;

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费
支持
分享
最新回复 (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
活跃值: (197)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
win7-64中,加上 PROCESS_QUERY_INFORMATION 权限
2020-7-2 10:18
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册