美文网首页
远程线程注入-下

远程线程注入-下

作者: Asura_Luo | 来源:发表于2018-05-21 00:24 被阅读0次

    远程线程的几个关键点

    1. 被创建的线程在别的进程中执行
    2. 呗创建的线程锁依赖的代码或数据都来自于目标进程

    如果想要在目标进程中干我们想干的事,我们就需要吧自己的功能代码加入到目标进程内部,这个也就是常说的代码注入

    我们目前学过的知识就可以实现一些注入的功能

    1. 内存的操作
    2. 动态链接库

    通过直接读写内存的方式

    1. 利用VirtualAllocEx在目标进程中申请一段内存空间
    2. 通过WriteProcessMemory在目标进程中刚申请的空间内将我们的功能代码的硬编码写入
    3. CreateRemoteThread 启动我们的目标代码

    优点: 操作简单不易呗发现
    缺点: 因为远程线程锁执行的代码和利用的资源只能是目标进程提供的,那么我们写入的这段硬编码必须得脱离其他依赖独立运行,只能直接调用API,不能使用静态库提供的函数,不能直接使用动态库使用的函数,不能出现随意的调用或者jmp,在构造这种代码的时候会非常复杂,当然按照以上要求构造出来的代码我们还有一种叫法,叫做ShellCode

    DllMain

    BOOL WINAPI DllMain
    (
            HINSTANCE hinstDLL;//DLL模块举办(DLL 被加载的位置)
            DWORD fwdReason, //  制定本地DLLMain被调用的原因
            LPVOID ipvReserved; //保留位
    )
    
    //fdwReason的一些宏说明:
    
    DLL_PROCESS_ATTACH:
          当进程第一次将该DLL映射到内存空间时,我们的进程就会调用一次这个DllMain并传入这个参数
    DLL_PROCESS_DETACH:
          当进程将当前DLL从内存空间解除映射的时候,就会调用一次DllMain并传入这个参数
    DLL_THREAD_ATTCH:
          每当有一个新的线程创建,都会调用一次DllMain并传入这个参数
    DLL_THREAD_DEACH:
          每当有一个线程结束(ExitThread)时就会调用一次DllMain并传入这个参数,如果线程是因为TerminateThread函数而结束的则不会调用
    
    

    通过动态链接库的方式

    1. 利用一些手段加载带有我们功能函数的DLL
    2. 通过DLLMAIN来启动我们的功能

    优点:操作简单实现也简单,写在DLL中的功能函数不需要想 ShellCode那样做到什么也不依赖,因为DLL被加载后重定位会替我们搞定这些麻烦事,所以在DLL中可以像写我们普通的正常程序一样来写我们的功能代码
    缺点:容易被检测

    加载DLL:

    image.png

    相关文章

      网友评论

          本文标题:远程线程注入-下

          本文链接:https://www.haomeiwen.com/subject/osyxjftx.html