- 博客(47)
- 资源 (3)
- 收藏
- 关注
原创 第10章 shellcode实战:07 原则:避免全局变量的使用
在shellcode编写过程中,所有的全局变量都不能直接使用,因为代码中的全局变量都是被编译在PE结构的数据段(.data)或只读数据段(.rdata),在调用时,是以绝对地址的形式进行调用的,所以不能使用全局变量。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考🫡。上述代码中的g_nTime编译后被保存在了数据段(.data)中,在代码调用该变量的时候就会产生全局变量的使用,不适应shellcode的编写原则。一个人走得再快,不如一群人走得更远!
2024-05-03 18:00:00
462
1
原创 第10章 shellcode实战:06 原则:函数地址的动态获取
实现对GetProcAdress函数地址的获取后,就可以结合kernel32的基址,再次获取到LoadLibraryA(或LoadLibraryW)这个函数的地址,然后就可以LoadLibraryA+GetProcAdress实现对任意函数的动态调用。上述GetProcAddress地址的获取,是基于PE结构导出表定位函数地址的原理。上一讲我们介绍了kernel32基址的获取,这一节来介绍如何解决GetProcAddress动态调用的问题。在上述代码中,我们测试了MessageBoxA函数的动态调用。
2024-05-02 19:00:00
250
1
原创 第10章 shellcode实战:05 原则:Kernel32基址的获取
简单说,kernel32基址是指kernel32.dll这个动态链接库加载到内存中后,它内存最开始的位置。任何一个exe加载到内存执行的时候,它所用到的动态链接库(dll)也都需要加载到内存中,才能够使用这个dll中的导出函数。在shellcode中,因为不存在PE结构,所以对每一个用到的函数所对应的dll文件,都需要我们手动去加载(即映射到内存)。比如我们要使用socket()这个函数,就需要先将这个函数所在的ws2_32.dll映射到内存,一般我们可以使用LoadLibrary这个函数来实现。
2024-05-01 12:45:00
1355
2
原创 第10章 shellcode实战:04 原则:函数的动态调用
一般在编程中我们都是直接调用 Windows API 的函数名来使用这个函数,以这种方式在生成exe文件的过程中,链接器会构建一个“导入表”,来记录程序中所有用到的Windows API信息,而当程序被加载到内存的时候,系统会再将“导入表”中的信息,“还原”到代码中相应的位置。也就是说,一个exe文件中使用了哪些Windows API,是以固定的“信息”存在了导入表中,这是常规的函数(Windows API)使用方法。
2024-04-30 13:30:00
998
1
原创 第10章 shellcode实战: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
1007
1
原创 第10章 shellcode实战:02 Shellcode项目属性规范
在VS中开发shellcode不同于普通程序的开发,要进行一些特殊的设置。比如修改原main入口点函数,关闭缓冲区安全检查,修改运行库,关闭生成清单,关闭调试信息等等。
2024-04-28 11:00:00
1318
1
原创 第10章 shellcode实战:01 什么是shellcode
这是我做的一个关于shellcode入门和开发的专题课👩🏻💻,主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考🫡
2024-04-27 21:05:46
2874
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅