当前位置:首页 > 教育 >

dll自动注入怎么写(四种常见的dll注入方式及原理)

来源:原点资讯(www.yd166.com)时间:2023-11-03 13:15:03作者:YD166手机阅读>>

最近一直在研究注入,写一篇全的,也给自己做个总结

dll注入其实就是让别的进程的address space去读相关的动态库然后执行代码。他通常是别的用户可以让某个应用程序做一些他的原作者本身不想达到的目的。比如,注入代码可以hook相关的system calls或者读取相关的密码在password框

Windows注入方法:

* 在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs所列出来的dll都会被那些要读取User32.dll进程所加载,时间点是在初始化这个DLL的时候。从Windows Vista开始,AppInit_DLLs默认情况下被关闭。从Windows 7开始,AppInit_DLl机制支持代码签名。从Windows 8开始,整个AppInit_DLL当Secure Boot被打开的时候会完全被关闭,不管任何的代码签名或者安全设置

* 在注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\AppCertDLLs列出来的dll会被调用Win32 API - CreateProcess, CreateProcessAsUser, CreateProcessWithLogonW, CreateProcessWithTokenW, WinExec的进程所加载

* 那些操作CreateRemotethread或者其他注入技术的Process可以被注入程序当他开始被start的时候: 1) 打开target process的句柄,这个可以通过spawn这个process或者寻找一些由这个进程所产生出来的一些东西 - 一个可猜测的window title, 获取一系列的running process然后查询这个target的filename 2)在目标进程进行相关内存的创建,并且把要注入的dll的名字写到里面。这个步骤可以被省略当合适的dll name已经存在在那个target process里,比如当你确定这个目标进程会去读取比如user32.dll, gdi32.dll, kernel32.dll或者任何其他的dll以32.dll结尾的时候,直接读取"32.dll"会成为可能,这个技术是过去防止被注入的一个有效防御做法 3) 直接在目标进程创建一个线程thread,并且把这个thread的start address设置成LoadLibrary这个API的地址,并且把argument设置成上传给这个target的一个string. 也就是说我们可以直接写要被执行的代码本身并且开启线程而不需要在那个target里通过LoadLibrary等来写 4)操作系统随之会去调用这个注入dll的初始化代码。需要注意的是如果没有预防,如果target process关注了DLL_THREAD_ATTACH,这个通知会被发送给这个process因为每个load的module都是一个单独的线程开始

* 直接通过SetWindowsHookeEx设置的windows hook

* 通过SuspendThread / NtSuspendThread去suspend所有的threads,然后利用SetThreadContext / NtSetThreadContext来设置这些存在线程的上下文,来运行注入代码

* 开发Windows中使用LoadLibrary[Ex]不需要完全被限制的关于dll路径的其他限制

* 操作系统级别的shims

* 替换应用程序指定的dll给那些有同名函数导出的dll

Unix-like注入方法:

通过Unix环境下的dynamic linker建立在ld.so(BSD),ld-linux.so(Linux),可以通过指定LD_PRELOAD这个环境变量,任何的libraries都可以被放进这个变量里,这样可以给全局或者单独的设置给一个单一进程。比如你可以这么写

LD_PRELAOD="./test.so" prog

表示在运行prog的时候会优先加载test.so里的函数和符号,我们可以用nm -D来查看比如我们自己写的random.so(里面实现了rand()这个函数),加上LD_PRELOAD=./random.so ldd -r prog,我们可以看到他还依赖我们写的这个random.so.

/etc/ld.so.preload其实也是干这个事情 http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

可以用LD_DEBUG=libs来debug reslove libs的动态行为,你也可以直接LD_PRELOAD=xxx ldd executable_name来进行验证

有时候我们会有需求就是想在hack的函数里去调用原来的那个函数,这个时候我们可以include <dlfcn.h>然后在头文件之上加上#define _GNU_SOURCE目的是为了我们在之后的symbol获取的地方可以用RTLD_NEXT这个宏。这个宏的意思就是dlsym(RTLD_NEXT, “open”)会让其找到下一个的open函数,也就是说当前是我们这个fake open,下一个就是真正的原函数,这个技法是需要通过dlopen & dlsym来实现的。这样我们可以通过hack open的方法来得到某个应用程序会打开哪些文件,只需要fake一个open函数在这个open函数里面加上print然后返回真正的open即可 https://rafalcieslak.wordpress.com/2013/04/02/dynamic-linker-tricks-using-ld_preload-to-cheat-inject-features-and-investigate-programs/

在OS X下,我们可以这么写

DYLD_INSERT_LIBRARIES=“./test.dylib” DYLD_FORCE_FLAT_NAMESPACE=1 prog

另外Unix-like systems其实也可以用debugger-based的技术来进行相关注入

栏目热文

dll文件怎么注入(简单的dll注入教程)

dll文件怎么注入(简单的dll注入教程)

何为dll注入DLL注入技术,一般来讲是向一个正在运行的进程插入/注入代码的过程。我们注入的代码以动态链接库(DLL)的...

2023-11-03 12:58:47查看全文 >>

dll注入工具有什么用(四种常见的dll注入方式及原理)

dll注入工具有什么用(四种常见的dll注入方式及原理)

本文中我将介绍DLL注入的相关知识。不算太糟的是,DLL注入技术可以被正常软件用来添加/扩展其他程序,调试或逆向工程的功...

2023-11-03 13:06:34查看全文 >>

dll注入工具源码官方完整版(dll文件怎么注入)

dll注入工具源码官方完整版(dll文件怎么注入)

不关注《一碳科技》?好吧,你错过了很多东西!DLL注入是什么?它有多厉害?它能让360安全卫士执行你的“破坏”代码!首先...

2023-11-03 13:21:13查看全文 >>

dll注入辅助工具(dll注入式外挂教程)

dll注入辅助工具(dll注入式外挂教程)

原理:DLL注入技术,一般来讲是向一个正在运行的进程插入/注入代码的过程。我们注入的代码以动态链接库(DLL)的形式存在...

2023-11-03 13:06:52查看全文 >>

mc指令辅助器(最好用的mc指令辅助器)

mc指令辅助器(最好用的mc指令辅助器)

使用方便功能强大的我的世界指令生成工具升级啦,本次升级新增了MOD模块,你再也不用为不懂MOD指令而烦恼!智能搜索功能,...

2023-11-03 13:37:45查看全文 >>

注入dll有什么用(dll注入后怎么使用)

注入dll有什么用(dll注入后怎么使用)

Hook概述Hook也就是钩子,在Windows中大部分的应用程序都是基于消息机制,会根据不同的消息使用消息过程函数完成...

2023-11-03 12:57:21查看全文 >>

cdr自动排版怎么弄(cdr一键自动排版)

cdr自动排版怎么弄(cdr一键自动排版)

CorelDRAW/cdr插件077例:根据页面大小自动排版。大家好,这一集接着讲cdr插件第77例:根据页面大小自动排...

2023-11-03 13:38:58查看全文 >>

cdr怎么一键排版(cdr一键排版怎么安排)

cdr怎么一键排版(cdr一键排版怎么安排)

我们今天来学习CDR的智能排版技巧。我们可以将企业或学校的工作证进行智能排版,因为每个人的姓名、职位和编号都不一样,手动...

2023-11-03 13:24:48查看全文 >>

cdr如何快速排版设计(cdr排版方法和技巧)

cdr如何快速排版设计(cdr排版方法和技巧)

来源公众号:平面设计CDR在线学习(ID:cdr696969)CorelDRAW 2019(Win版)是一款专业的平面设...

2023-11-03 13:16:09查看全文 >>

cdr中的排版工具在哪(cdr排版工具怎么调出)

cdr中的排版工具在哪(cdr排版工具怎么调出)

我们经常能够看到文字排版成某一种形状,这些文字大小有别,乱中有序。大多情况下都是用的专业的排版软件,当然还有特殊情况下,...

2023-11-03 13:27:42查看全文 >>

文档排行