wrtm,终于成功了,进程注入终于成功了
wr啊,要我出动汇编才把tmd搞掂
最后要提出的是,很多朋友在debug下会出现access violation,这是因为在debug下,vc默认在函数返回前调用_checkstack这个crt函数导致的(该函数以偏移量调用,当去到另一个进程时,偏移量就不准确了),可以去掉/Gz编译器选项以解决这个问题。以后还要请大家多多指教,谢谢

解决方案 »

  1.   

    收到! debug下会出现access violation,这是因为在debug下,vc默认在函数返回前调用_checkstack这个crt函数导致的(该函数以偏移量调用,当去到另一个进程时,偏移量就不准确了),可以去掉/Gz编译器选项以解决这个问题
      

  2.   

    就是那个createremotethread
    使用它之前需要准备:
    1.提升本进程特权,通常debug就够了
    2.准备线程函数
    3.使用writeprocessmemory把线程函数写到目标进程
    4.createremotethread启动线程
    ok
    其他什么的如何获取进程句柄,virtualallocex之类就不多说了,msdn上大把事例代码
    最为重要的就是那个线程函数,即step2
    该函数在正常情况下是不能调用任何函数的,包括crt、api和自定义的函数。但有些是例外的,例如kernel32.dll内的,因为这些函数总是映射到每一个进程的特定位置,有了kernel32.dll的loadlibrary和getprocaddress,你就可以为所欲为了,要注意的是,loadlibrary和getprocaddress也不能用函数名来调用,一定要通过地址来调用,就像:
    PLoadLibraryA pllba = (PLoadLibraryA)0x7C801D77;
    HMODULE huser32 = pllba(tmp);// tmp="my.dll"
    还有就是在线程内不能使用常量,特别是字符串常量,因为常量的地址不是对应目标进程的
    必要时可在线程内嵌入汇编
    _asm
    {
    int 3;// 这个的作用不用说了吧
    }
    这是为了在release下也能启动调试器来调试目标进程内我注入的那个线程
    以上,个人见解
    请指点一下,谢了