首页
社区
课程
招聘
[求助]一个非常奇怪的问题
发表于: 2009-4-11 14:47 3371

[求助]一个非常奇怪的问题

2009-4-11 14:47
3371
我用vc6.0编写了一个DLL注入的程序,即将我在c盘下的DLL注入到ie进程中去。步骤是:
1、创建一个无窗口的ie进程作为目标进程
2、将要注入的DLL的路径写入目标进程地址空间
3、获取LoadLibrary的地址
4、创建远程线程
现在的情况是编译、连接、执行都没有问题,执行的结果也是正确的。问题就是换一个分区或者换一台电脑就不能运行。比如我建的工程是在e:\study\Inject目录下,我的程序就只能在e盘下运行,换到c盘或者d盘就不能运行了(双击之后没任何反应),放到我同学电脑上也不行。我想了几天也没想出来怎么回事,这个太诡异了。。。不知道有没有谁遇到过这样的问题?
所有源代码如下:
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
  // 创建一个无窗口的IE进程作为目标进程
  STARTUPINFO si = { sizeof(si) };                // 初始化结构
  PROCESS_INFORMATION pi;                      // 进程信息结构,由系统填充
  si.cb =  sizeof(STARTUPINFO);                  // si.cb为si的大小
  si.wShowWindow = SW_HIDE;                    // 创建一个没有窗口的IE进程
  si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;      // 设置si使用哪些标志位
  TCHAR szCommandLine[] = TEXT              
    ("C:\\Program Files\\Internet Explorer\\iexplore.exe");    // 指定要创建进程的主程序
  BOOL bRet = CreateProcess(NULL,szCommandLine,NULL,NULL,  
        FALSE,0,NULL,NULL,&si,&pi);              // 创建进程
  if(!bRet)
  {
    MessageBox(NULL,"创建进程失败!",NULL,MB_OK);
    return -1;
  }
  CloseHandle(pi.hThread);
  HANDLE hProcess = pi.hProcess;                  // 保存进程句柄
    
  // 将DLL路径字符串写入目标进程地址空间
  PTSTR pszLibFile = TEXT("C:\\MyDll.dll");          // DLL的完整路径
  int cch = 1 + strlen(pszLibFile);                // DLL路径的字符数
  int cb = cch * sizeof(TCHAR);                  // DLL路径的字节数
  PTCHAR pszLibFileRemote = (PTCHAR)
    VirtualAllocEx(hProcess,NULL,cb,MEM_COMMIT,PAGE_READWRITE); // 在目标进程地址空间分配内存
  WriteProcessMemory(hProcess,
    pszLibFileRemote,(PVOID)pszLibFile,cb,NULL);        // 将DLL路径写入目标进程
 
  // 获取LoadLibrary的地址
  PTHREAD_START_ROUTINE pfnStartAddr;
  pfnStartAddr = (PTHREAD_START_ROUTINE)GetProcAddress
    (GetModuleHandle("Kernel32"),"LoadLibraryA");

  // 创建远程线程
  CreateRemoteThread(hProcess,NULL,0,pfnStartAddr,pszLibFileRemote,0,NULL);
  
  CloseHandle(hProcess);
  return 0;
}

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 103
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
是DLL版本的问题吧...
2009-4-11 15:00
0
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
icetea能否说得详细点?你指的是我写的DLL的版本还是哪个DLL?我的DLL是用vc6写的。还有一个现象就是工程里的程序即e:\study\Inject\Release里的Inject.exe用od可以正常载入,但是把Inject.exe复制出来放到除e盘外其他任何盘再用od载入就会直接终止。
2009-4-11 15:41
0
游客
登录 | 注册 方可回帖
返回
//