为什么我在注入的函数里使用GetCurrentProcessId()就会崩溃?
应该怎么调用呢?

解决方案 »

  1.   

    沙发
    up
    不太明白
    这个可以用吗?
    CreateRemoteThread
      

  2.   

    注入的函数,函数地址,参数内存地址,都要是远程process里面的地址!
      

  3.   

    那么我怎样才能调用GetCurrentProcessId() 呢?
      

  4.   

    你需要了解
    1.地址空间.
    2.进程.
    再说了.为什么只注入一个函数,不直接注入一个DLL.那样就可以直接调用了.
      

  5.   

    嘿嘿!之后在你得到该Process ID之后才可以做坏事。
    也就是说只有当你得到了该Process ID之后才能ReadProcessMemory/WriteProcessMemory
    由于2K以后的OS都为虚拟地址所以还需要VirtualAllocEx进程内分配内存。
      

  6.   

    怎么崩溃的
    你是把GetProcessId放在注入的DLL中吗
    CreateRemoteThread因为要求函数原型的关系, 是不会支持调用GetProcessId的
      

  7.   

    你可以看一下
    http://download.csdn.net/source/297095
    的实现,可以加载你自己的PE文件.
      

  8.   

    我是把一个函数注入到别的进程里.在函数里调用GetProcessId 就挂掉了.
      

  9.   

    这几个都要用到
    OpenProcessToken(); 
    LookupPrivilegeValue(); 
    AdjustTokenPrivileges(); 
    OpenProcess(); 
    VirtualAllocEx(); 
    WriteProcessMemory(); 
    GetProcAddress(); 
    CreateRemoteThread();
    但是用即使以能够注入成功,大部分杀毒软件会报警的啊!
      

  10.   

    把以个函数注入到别的进程?你把整个函数的机器码写到那个进程空间了,还是只是在你的进程空间有这个函数?不要以为CreateRemoteThread会把你要执行的函数体写到另一个进程里,他只是从参数所给的地址开始执行,这个地址在你的进程空间是你自定义的函数但在别的进程空间确几乎必然是一个非法地址,所以出错是非常正常的,不知道这么说你能看明白不?
      

  11.   

    两种方法。
    WriteProcessMemory -- 通过改写地址
    CreateRemoteThread -- 建立进程内线程。
      

  12.   

    GetCurrentProcessId"是获取当前进程一个唯一的标识符  所以你用他访问其他应该会有问题