- 博客(20)
- 资源 (3)
- 收藏
- 关注
原创 第18节 神级开源shellcode工具:donut
Donut是一款shellcode生成器,可将C/C++、C#生成的PE文件转换为shellcode文件,同时支持JS、XSL、VBS脚本转换为shellcode。以下“原生”EXE/DLL指非托管PE文件(包括并不限于C/C++、delphie等编写生成的可执行文件),可以直接由系统加载运行,区别于.Net生成的托管文件。被处理exe/dll为32位程序,则需要用32为的shellcode加载器启用,exe/dll为64位的就用64位shellcode加载器启用。
2024-05-15 10:38:10 1250 1
原创 第17节 实战:shellcode进程注入
我最近做了一个关于shellcode入门和开发的专题课👩🏻💻,主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考。传统的exe文件执行都是在自己的进程空间中,而shellcode本身没有固定的执行进程,它取决于加载器将它“安排”到哪个进程,它就在哪个进程执行。这种以进程“寄宿”方式执行的方式就被称为进程注入。
2024-05-15 09:50:50 364
原创 第16节 实战:文件转shellcode
我最近做了一个关于shellcode入门和开发的专题课👩🏻💻,主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考。
2024-05-14 18:15:00 1759 1
原创 第15节 编写shellcode加载器
我最近在做一个关于shellcode入门和开发的专题课👩🏻💻,主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考。我们编写一个最简单的shellcode加载工具,应用于将本地的shellcode文件执行起来。一个人走得再快,不如一群人走得更远!
2024-05-14 10:37:53 438 1
原创 第14节 第二种shellcode编写实战(3)
使用ADVobfuscator来自动处理双引号字符串时,不能禁用项目“优化”选项,即工程 “属性”--->“C/C++”--->“优化”中,“优化”选项可以选择“/O1”、“/O2”,或者“/Ox”,不能使用“已禁用 (/Od)”,否则字符换处理无效。对于上述代码,表面看使用了双引号字符串,实际上在编译时对代码中O("xxx")的内容都是以宏定义的方式进行了转换处理,生成的PE文件中并没有双引号字符串的直接暴露,既符合shellcode编写规范,又一定程度提高了开发效率。
2024-05-13 10:45:14 565
原创 第13节 第二种shellcode编写实战(2)
在类CDoShellcode中,将所有函数功能执行的参数都传递一个CAPI的指针变量,那么所有功能都可以使用CAPI中的函数。如此一来,对类CDoShellcode而言,我们只关注功能的实现,不必再顾及函数动态调用的问题。所有用到的动态函数的实现都可以共享CAPI中的实现。的基础上,新增加一个CAPI类,将所有用到的函数都在这个类中做动态调用的处理,这样使得整个shellcode功能结构更加清晰。
2024-05-12 14:15:25 508 1
原创 第12节 第二种shellcode编写实战(1)
我最近在做一个关于shellcode入门和开发的专题课👩🏻💻,主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考🫡。
2024-05-11 14:53:50 855 1
原创 第11节 多文件函数生成位置规律
但如果对已经创建的cpp文件重命名,当关闭VS项目后,再重新打开项目,就会发现显示的规律仍然符合先0-9,再a-z,但编译的顺序,却不受重命名影响,还是与最初重命名前编译的顺序一致。在新建项目中,所有首次创建的cpp文件,在“解决方案资源管理器”中的显示排序,是以文件名首字母,先由0-9,再由a-z从上到下顺序显示。上面所说cpp文件显示顺序与编译顺序的对应,仅仅是表象,真正编译顺序的体现,是在我们编译项目时,输出窗口的显示日志。多文件项目编译时,函数生成顺序仅与项目中.cpp文件有关,与.h文件无关。
2024-05-09 23:28:00 865 1
原创 第10节 单文件函数生成位置规律
函数声明是对一个函数的类型,包括参数、返回值等,提前做一个存在的说明。通过这个声明我们可以知道有这样的一个函数,但这个函数内具体是怎么实现的,有什么功能,我们要看函数定义。定义是函数内部具体实现的一个展示。// 函数声明// 函数定义。
2024-05-07 22:35:02 1017
原创 第09节 第一种shellcode编写实战
我把多年的shellcode开发经验浓缩在了这个专题课👩🏻💻里,主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考。
2024-05-05 17:00:00 1589
原创 第08节 原则:手动加载动态库
比如我们shellcode代码中要使用MessageBoxA这个函数,那么在使用这个函数前,必须要先将MessageBoxA所在的动态链接库,即user32.dll加载到内存:LoadLibraryA("user32.dll");同样,在用到其他函数,比如socket(),这个函数所在的动态链接库是ws2_32.dll,就要在使用这个函数前先执行LoadLibraryA("ws2_32.dll"),其他函数亦是如此。开发经验浓缩在了这个专题课👩🏻💻里,主要面向对网络安全技术感兴趣的小伙伴。
2024-05-04 13:00:00 400 1
原创 C语言神奇的经典程序
因为C语言语法格式的特殊性,还诞生了一个C语言乱码大赛,从1984年开始,一直办到现在。在它官网上能看到历年所有的参赛获奖的作品。这个比赛的目的不是写出最好看,最易懂的代码,而是比赛写出最有创意的最让人难以理解的,最难看懂的C语言代码。
2024-05-03 21:28:13 1215 1
原创 第07节 原则:避免全局变量的使用
在shellcode编写过程中,所有的全局变量都不能直接使用,因为代码中的全局变量都是被编译在PE结构的数据段(.data)或只读数据段(.rdata),在调用时,是以绝对地址的形式进行调用的,所以不能使用全局变量。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考🫡。上述代码中的g_nTime编译后被保存在了数据段(.data)中,在代码调用该变量的时候就会产生全局变量的使用,不适应shellcode的编写原则。一个人走得再快,不如一群人走得更远!
2024-05-03 18:00:00 286 1
原创 第06节 原则:函数地址的动态获取
实现对GetProcAdress函数地址的获取后,就可以结合kernel32的基址,再次获取到LoadLibraryA(或LoadLibraryW)这个函数的地址,然后就可以LoadLibraryA+GetProcAdress实现对任意函数的动态调用。上述GetProcAddress地址的获取,是基于PE结构导出表定位函数地址的原理。上一讲我们介绍了kernel32基址的获取,这一节来介绍如何解决GetProcAddress动态调用的问题。在上述代码中,我们测试了MessageBoxA函数的动态调用。
2024-05-02 19:00:00 72 1
原创 第05节 原则:Kernel32基址的获取
简单说,kernel32基址是指kernel32.dll这个动态链接库加载到内存中后,它内存最开始的位置。任何一个exe加载到内存执行的时候,它所用到的动态链接库(dll)也都需要加载到内存中,才能够使用这个dll中的导出函数。在shellcode中,因为不存在PE结构,所以对每一个用到的函数所对应的dll文件,都需要我们手动去加载(即映射到内存)。比如我们要使用socket()这个函数,就需要先将这个函数所在的ws2_32.dll映射到内存,一般我们可以使用LoadLibrary这个函数来实现。
2024-05-01 12:45:00 1002 2
原创 第04节 原则:函数的动态调用
一般在编程中我们都是直接调用 Windows API 的函数名来使用这个函数,以这种方式在生成exe文件的过程中,链接器会构建一个“导入表”,来记录程序中所有用到的Windows API信息,而当程序被加载到内存的时候,系统会再将“导入表”中的信息,“还原”到代码中相应的位置。也就是说,一个exe文件中使用了哪些Windows API,是以固定的“信息”存在了导入表中,这是常规的函数(Windows API)使用方法。
2024-04-30 13:30:00 846 1
原创 第03节 原则:避免使用双引号字符串
C语言正常情况下字符串可以用双引号写,比如char* a="hello world",但在shellcode开发的时候,不能使用这种双引号写法,要用单引号替代,写为:char s[] = {'h','e','l','l','o',' ','w','o','r','l','d',0};
2024-04-29 10:30:00 821
原创 第02节 Shellcode项目属性规范
在VS中开发shellcode不同于普通程序的开发,要进行一些特殊的设置。比如修改原main入口点函数,关闭缓冲区安全检查,修改运行库,关闭生成清单,关闭调试信息等等。
2024-04-28 11:00:00 1073
原创 第01节 什么是shellcode
这是我做的一个关于shellcode入门和开发的专题课👩🏻💻,主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考🫡
2024-04-27 21:05:46 1285
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人