zoukankan      html  css  js  c++  java
  • 一些常用的注入技巧

    远程线程注入DLL
    远线程注入原理是利用Windows 系统中CreateRemoteThread()这个API,其中第4个参数是准备运行的线程,我们可以将LoadLibrary()填入其中,这样就可以执行远程进程中的LoadLibrary()函数,进而将我们自己准备的DLL加载到远程进程空间中执行。
    选LoadLibrary 函数原因: 首先,它可以把一个Dll载入内存空间,并执行DLL初始化函数。 第二,LoadLibrary在Kernel32.dll中,Kernel32.dll的加载基址在每个进程中都是一样的所以,LoadLibrary在每个进程的地址就是一样的。
    注意事项:在DLL中,载入窗口命令中,必须用“对话框方式”!比如,载入(窗口1,,真)
    参考资料:https://bbs.125.la/forum.php?mod=viewthread&tid=13724049&highlight=ע��ר��

    消息钩子注入
    消息钩子注入原理是利用Windows 系统中SetWindowsHookEx()这个API,他可以拦截目标进程的消息到指定的DLL中导出的函数,利用这个特性,我们可以将DLL注入到指定进程中
    使用SetWindowsHookEx()之前首先需要将HOOK的DLL 加载到本身的进程中,以此得到DLL的模块句柄,再使用GetProcAddress()得到DLL中公开的函数XXX()的函数地址,最后遍历出待注入进程的线程ID,这样SetWindowsHookEx()就可以利用这些参数进行HOOK了。
    注意事项:消息钩子注入需要有窗口
    参考资料:https://bbs.125.la/forum.php?mod=viewthread&tid=13722272&highlight=ע��ר��

    输入法注入
    输入法注入原理是利用Windows系统中在切换输入法需要输入字符时,系统就会把这个输入法需要的ime文件装载到当前进程中,而由于这个Ime文件本质上只是个存放在C:WINDOWSsystem32目录下的特殊的DLL文件,因此我们可以利用这个特性,在Ime文件中使用IMESetPubString()注入DLL文件
    也可以直接编写IME文件在其中使用oadLibrary()函数载入注入的DLL文件
    参考资料:https://www.52pojie.cn/forum.php?mod=viewthread&tid=428396

    注册表注入
    注册表注入原理是利用在Windows 系统中,当注册表以下键值中存在有DLL文件路径时,会跟随EXE文件的启动加载这个DLL文件路径中的DLL文件。当如果遇到有多个DLL文件时,需要用逗号或者空格隔开多个DLL文件的路径。
    本注入器是采用的是Appinit_Dlls注册表项, 此注册表项下的每个dll文件都会随着User32.dll的加载而同样加载到进程中
    本注入器写入注册表的全路径为:HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindows NTCurrentVersionWindowsAppInit_DLLs
    注意事项:注册表注入会对每一个进程都有效,针对某个进程的话需要在DLL中进行编写
    参考资料:http://blog.csdn.net/programmingring/article/details/18954193

    EIP注入
    挂起目标进程,停止目标进程EIP的变换,在目标进程开启空间,然后把相关的指令机器码和数据拷贝到里面去,然后修改目标进程EIP使其强行跳转到我们拷贝进去的相关机器码位置,执行相关,然后跳转回来。
    修改EID实现代码注入的汇编思路如下
    SuspendThread();
    get eip
    push ad
    push fd
    push AddressDllFilePath
    call LoadLibrary
    pop fd
    pop ad
    jmp eip //这个是为了让程序执行完我们的代码之后自己跳转回去继续执行
    ResumeThread();
    参考资料:http://blog.csdn.net/u013761036/article/details/52885552

    APC注入(应用层)
    APC注入的原理是利用当线程被唤醒时APC中的注册函数会被执行的机制,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的,其具体流程如下:
    1)当EXE里某个线程执行到SleepEx()或者WaitForSingleObjectEx()时,系统就会产生一个软中断(或者是Messagebox弹窗的时候不点OK的时候也能注入)。
    2)当线程再次被唤醒时,此线程会首先执行APC队列中的被注册的函数。
    3)利用QueueUserAPC()这个API可以在软中断时向线程的APC队列插入一个函数指针,如果我们插入的是Loadlibrary()执行函数的话,就能达到注入DLL的目的。
    注意事项:目标程序必须有执行SleepEx()或者WaitForSingleObjectEx(),否则DLL不会加载
    参考资料:http://blog.csdn.net/u013761036/article/details/53338322

    内存注入
    内存注入和远程线程注入差不多,不同地方在于这里将DLL整个文件都写进了目标进程内存中,采用了汇编指令加载DLL,调用DLL函数,但是核心还是使用VirtualAllocEx、WriteProcessMemory、CreateRemoteThread
    注意事项:自己调试了几次DLL需要黑月编译
    参考资料:超级模块源码

    IAT永久注入
    通过添加一个新节注入,改变PE文件的大小,将原有的导入表复制到新节中,并添加自己的导入表描述符,最后将数据目录项中指向的导入表的入口指向新节,生成新的文件
    注意事项:无法注入一些加壳的文件和自校验文件,会生成一个新的文件,DLL需要黑月编译
    参考资料:http://www.pudn.com/Download/item/id/1996578.html

    内存永久注入
    高配版IAT永久注入,不仅添加了区段,把DLL也写进了内存,采用汇编装载DLL
    注意事项:无法注入一些加壳的文件和自校验文件,会生成一个新的文件
    参考资料:http://bbs.eyuyan.com/read.php?tid=382106&fpage=2

    有想讨论的可以添加作者QQ,作者QQ:495214225 请备注:精易

  • 相关阅读:
    git命令 提交/拉取代码
    java获得当前时间
    jsp中下拉菜单显示数据库里的内容
    commons-fileupload.jar包和 commons-io.jar包下载地址
    java.sql.SQLSyntaxErrorException
    jsp跳转前加入提示语句
    java.sql.SQLException: No value specified for parameter 12
    Tomcat 常见 "The value for the useBean class attribute is invalid" 错误
    java.lang.ClassNotFoundException
    数据库知识
  • 原文地址:https://www.cnblogs.com/csnd/p/11532366.html
Copyright © 2011-2022 走看看