windows:shellcode生成框架和加载
2021-01-04 01:27
标签:代码 read 字符 hand 提取 work 需要 编译 顺序 https://www.cnblogs.com/theseventhson/p/13194646.html 分享了shellcode 的基本原理,核心思路是动态获取GetProcAddress和LoadLibrary函数地址,再通过这两个函数获取其他windows dll提供的函数地址;需要注意的是shellcode不能有全局变量和字符串,只能用局部变量和字符数组替代,这样才能在函数执行时在栈动态分配存储空间,不会和目标进程现有的空间冲突。 实战中,通过这种方式生成shellcode技术上可行,但比较麻烦,需要改动的地方太多,下面介绍一种shellcode现成的框架,开发人员可直接在特定的地方添加特定的代码即可,简单、灵活、易用; 1、先介绍一下vs的编译顺序 一个大型的工程,往往有多个cpp文件组成,最后都被编译成一个exe文件,那么exe中那么多函数,这些函数都是怎么排序的了? (1)文件之间:比如有多个文件,默认是按照文件名排序,比如先按照0-9排序,再按照a-z排序;下面默认先编译A.cpp,再编译B.cpp,最后编译main.c;但是也可以认为调整配置文件中的顺序,让B最先编译,A稍后编译,这样一来生成exe中函数顺序就按照这个来排序; (2)文件内部:按照定义/实现的顺序;比如下面的例子:函数实现的顺序分别是main、FuncB、FuncA,那么编译器在生成exe时编译的顺序也是这样的。 上面说了这么多编译顺序,能用来干啥了?------> 确认shellcode 的范围和提取代码,比如上面用户把shellcode写进A和B函数,那么FuncA-FuncB者之间的代码都是shellcode,再调用CreateFile函数就能很容易保存到磁盘了; 2、shellcode框架介绍 (1)先来看看shellcode生成框架:四个文件起名很有讲究,这样一来编译器就会按照这个顺序来编译源文件了,生成的exe中也会按照这个顺序排列函数; 0.entry文件中,并不执行shellcode,只是通过shellcodeEnd-shellcodeStart 确认shellcode 的范围和起始地址,然后写入磁盘的bin文件; (2)a.start: shellcodeStart函数直接jmp到shellcodeEntry;InitFuntions初始化需要用到的几个关键函数;最关键的shellcodeEntry函数:用户可以在这里添加shellcode的自定义逻辑; (3)b.works:开发人员可以在这里自定义shellcode的执行逻辑(包装在单独的函数里),然后在上面的shellcodeEntry中调用该函数即可; (4)最后一个z.end:收尾工作,目前是空白的,啥也没做,开发人员可根据实际业务逻辑添加比如删除行为日志、回后/清除内存空间等代码; 上面是整个框架的简介,最核心的地方是a.start的shellcodeEntry和b.works,开发人员直接在这里添加自定义的处理逻辑就好,其他地方一般都不用更改了,整个框架的复用性非常好;编译的时候也能看到各个文件编译的顺序: 用IDA查看如下:函数的编译顺序确实是按照上面讲的顺序编译的: 3、shellcode代码加载 利用上述框架生成的shellcode,保存在磁盘bin文件,怎么加载和运行了?这里先介绍一个简单的方法:自己编写一个loader; 核心原理很简单:调用VirtualAlloc分配一段内存,然后把shellcode拷贝到这段内存,最后call跳转到shellcode执行; 用该加载器成功加载shellcode并运行: 4、这里的shellcode是自己loader加载的,运行空间也是loader分配的,容易被查出来;后续会介绍一些其他方法,比如把shellcode注入其他进程执行,增加被查找到的难度; 最后感谢这两个链接的作者(特别是视频介绍,由浅入深,通俗易懂),供初学者参考: https://www.freebuf.com/articles/system/93983.html (有现成的工程供参考使用) https://www.bilibili.com/video/BV1y4411k7ch?p=10 (有详细的视频过程演示和说明) windows:shellcode生成框架和加载 标签:代码 read 字符 hand 提取 work 需要 编译 顺序 原文地址:https://www.cnblogs.com/theseventhson/p/13197776.html#include
上一篇:c# 截取字符串
文章标题:windows:shellcode生成框架和加载
文章链接:http://soscw.com/index.php/essay/39933.html