imbyter师哥
码龄12年
关注
提问 私信
  • 博客:17,939
    17,939
    总访问量
  • 20
    原创
  • 137,120
    排名
  • 315
    粉丝
  • 0
    铁粉
  • 学习成就

个人简介:一枚从事网络安全行业十余年的小师哥。之前给红队做过技术支持,也做过项目开发leader。乐于分享技术,喜欢结交志同道合的朋友。

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:山东省
  • 加入CSDN时间: 2012-11-15
博客简介:

imbyter师哥的博客

查看详细资料
  • 原力等级
    成就
    当前等级
    3
    当前总分
    240
    当月
    3
个人成就
  • 获得419次点赞
  • 内容获得13次评论
  • 获得278次收藏
  • 代码片获得149次分享
创作历程
  • 20篇
    2024年
成就勋章
TA的专栏
  • shellcode入门与实战
    付费
    18篇
TA的推广
兴趣领域 设置
  • 编程语言
    c++c语言c#汇编
  • 网络与通信
    wireshark网络安全网络协议
  • 学习和成长
    程序人生学习方法创业创新
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

174人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

程序员必备操作技巧(实用版)

程序员必备电脑操作技巧(实用版)
原创
发布博客 2024.05.16 ·
588 阅读 ·
13 点赞 ·
0 评论 ·
7 收藏

第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 ·
1279 阅读 ·
14 点赞 ·
1 评论 ·
9 收藏

第17节 实战:shellcode进程注入

我最近做了一个关于shellcode入门和开发的专题课👩🏻‍💻,主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考。传统的exe文件执行都是在自己的进程空间中,而shellcode本身没有固定的执行进程,它取决于加载器将它“安排”到哪个进程,它就在哪个进程执行。这种以进程“寄宿”方式执行的方式就被称为进程注入。
原创
发布博客 2024.05.15 ·
389 阅读 ·
1 点赞 ·
0 评论 ·
4 收藏

第16节 实战:文件转shellcode

我最近做了一个关于shellcode入门和开发的专题课👩🏻‍💻,主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考。
原创
发布博客 2024.05.14 ·
1781 阅读 ·
40 点赞 ·
1 评论 ·
28 收藏

第15节 编写shellcode加载器

我最近在做一个关于shellcode入门和开发的专题课👩🏻‍💻,主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考。我们编写一个最简单的shellcode加载工具,应用于将本地的shellcode文件执行起来。一个人走得再快,不如一群人走得更远!
原创
发布博客 2024.05.14 ·
447 阅读 ·
10 点赞 ·
1 评论 ·
0 收藏

第14节 第二种shellcode编写实战(3)

使用ADVobfuscator来自动处理双引号字符串时,不能禁用项目“优化”选项,即工程 “属性”--->“C/C++”--->“优化”中,“优化”选项可以选择“/O1”、“/O2”,或者“/Ox”,不能使用“已禁用 (/Od)”,否则字符换处理无效。对于上述代码,表面看使用了双引号字符串,实际上在编译时对代码中O("xxx")的内容都是以宏定义的方式进行了转换处理,生成的PE文件中并没有双引号字符串的直接暴露,既符合shellcode编写规范,又一定程度提高了开发效率。
原创
发布博客 2024.05.13 ·
572 阅读 ·
25 点赞 ·
0 评论 ·
5 收藏

第13节 第二种shellcode编写实战(2)

在类CDoShellcode中,将所有函数功能执行的参数都传递一个CAPI的指针变量,那么所有功能都可以使用CAPI中的函数。如此一来,对类CDoShellcode而言,我们只关注功能的实现,不必再顾及函数动态调用的问题。所有用到的动态函数的实现都可以共享CAPI中的实现。的基础上,新增加一个CAPI类,将所有用到的函数都在这个类中做动态调用的处理,这样使得整个shellcode功能结构更加清晰。
原创
发布博客 2024.05.12 ·
512 阅读 ·
4 点赞 ·
1 评论 ·
9 收藏

第12节 第二种shellcode编写实战(1)

我最近在做一个关于shellcode入门和开发的专题课👩🏻‍💻,主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考🫡。
原创
发布博客 2024.05.11 ·
857 阅读 ·
26 点赞 ·
1 评论 ·
10 收藏

第11节 多文件函数生成位置规律

但如果对已经创建的cpp文件重命名,当关闭VS项目后,再重新打开项目,就会发现显示的规律仍然符合先0-9,再a-z,但编译的顺序,却不受重命名影响,还是与最初重命名前编译的顺序一致。在新建项目中,所有首次创建的cpp文件,在“解决方案资源管理器”中的显示排序,是以文件名首字母,先由0-9,再由a-z从上到下顺序显示。上面所说cpp文件显示顺序与编译顺序的对应,仅仅是表象,真正编译顺序的体现,是在我们编译项目时,输出窗口的显示日志。多文件项目编译时,函数生成顺序仅与项目中.cpp文件有关,与.h文件无关。
原创
发布博客 2024.05.09 ·
868 阅读 ·
13 点赞 ·
1 评论 ·
12 收藏

第10节 单文件函数生成位置规律

​函数声明是对一个函数的类型,包括参数、返回值等,提前做一个存在的说明。通过这个声明我们可以知道有这样的一个函数,但这个函数内具体是怎么实现的,有什么功能,我们要看函数定义。定义是函数内部具体实现的一个展示。// 函数声明// 函数定义。
原创
发布博客 2024.05.07 ·
1022 阅读 ·
29 点赞 ·
0 评论 ·
17 收藏

第09节 第一种shellcode编写实战

我把多年的shellcode开发经验浓缩在了这个专题课👩🏻‍💻里,主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考。
原创
发布博客 2024.05.05 ·
1593 阅读 ·
41 点赞 ·
0 评论 ·
24 收藏

第08节 原则:手动加载动态库

比如我们shellcode代码中要使用MessageBoxA这个函数,那么在使用这个函数前,必须要先将MessageBoxA所在的动态链接库,即user32.dll加载到内存:LoadLibraryA("user32.dll");同样,在用到其他函数,比如socket(),这个函数所在的动态链接库是ws2_32.dll,就要在使用这个函数前先执行LoadLibraryA("ws2_32.dll"),其他函数亦是如此。开发经验浓缩在了这个专题课👩🏻‍💻里,主要面向对网络安全技术感兴趣的小伙伴。
原创
发布博客 2024.05.04 ·
407 阅读 ·
8 点赞 ·
1 评论 ·
5 收藏

C语言神奇的经典程序

因为C语言语法格式的特殊性,还诞生了一个C语言乱码大赛,从1984年开始,一直办到现在。在它官网上能看到历年所有的参赛获奖的作品。这个比赛的目的不是写出最好看,最易懂的代码,而是比赛写出最有创意的最让人难以理解的,最难看懂的C语言代码。
原创
发布博客 2024.05.03 ·
1246 阅读 ·
33 点赞 ·
1 评论 ·
13 收藏

第07节 原则:避免全局变量的使用

在shellcode编写过程中,所有的全局变量都不能直接使用,因为代码中的全局变量都是被编译在PE结构的数据段(.data)或只读数据段(.rdata),在调用时,是以绝对地址的形式进行调用的,所以不能使用全局变量。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考🫡。上述代码中的g_nTime编译后被保存在了数据段(.data)中,在代码调用该变量的时候就会产生全局变量的使用,不适应shellcode的编写原则。一个人走得再快,不如一群人走得更远!
原创
发布博客 2024.05.03 ·
296 阅读 ·
4 点赞 ·
1 评论 ·
10 收藏

第06节 原则:函数地址的动态获取

实现对GetProcAdress函数地址的获取后,就可以结合kernel32的基址,再次获取到LoadLibraryA(或LoadLibraryW)这个函数的地址,然后就可以LoadLibraryA+GetProcAdress实现对任意函数的动态调用。上述GetProcAddress地址的获取,是基于PE结构导出表定位函数地址的原理。上一讲我们介绍了kernel32基址的获取,这一节来介绍如何解决GetProcAddress动态调用的问题。在上述代码中,我们测试了MessageBoxA函数的动态调用。
原创
发布博客 2024.05.02 ·
79 阅读 ·
11 点赞 ·
1 评论 ·
7 收藏

第05节 原则:Kernel32基址的获取

​简单说,kernel32基址是指kernel32.dll这个动态链接库加载到内存中后,它内存最开始的位置。任何一个exe加载到内存执行的时候,它所用到的动态链接库(dll)也都需要加载到内存中,才能够使用这个dll中的导出函数。在shellcode中,因为不存在PE结构,所以对每一个用到的函数所对应的dll文件,都需要我们手动去加载(即映射到内存)。比如我们要使用socket()这个函数,就需要先将这个函数所在的ws2_32.dll映射到内存,一般我们可以使用LoadLibrary这个函数来实现。
原创
发布博客 2024.05.01 ·
1016 阅读 ·
16 点赞 ·
2 评论 ·
20 收藏

第04节 原则:函数的动态调用

​一般在编程中我们都是直接调用 Windows API 的函数名来使用这个函数,以这种方式在生成exe文件的过程中,链接器会构建一个“导入表”,来记录程序中所有用到的Windows API信息,而当程序被加载到内存的时候,系统会再将“导入表”中的信息,“还原”到代码中相应的位置。也就是说,一个exe文件中使用了哪些Windows API,是以固定的“信息”存在了导入表中,这是常规的函数(Windows API)使用方法。
原创
发布博客 2024.04.30 ·
851 阅读 ·
30 点赞 ·
1 评论 ·
23 收藏

第03节 原则:避免使用双引号字符串

C语言正常情况下字符串可以用双引号写,比如char* a="hello world",但在shellcode开发的时候,不能使用这种双引号写法,要用单引号替代,写为:char s[] = {'h','e','l','l','o',' ','w','o','r','l','d',0};
原创
发布博客 2024.04.29 ·
826 阅读 ·
32 点赞 ·
0 评论 ·
28 收藏

第02节 Shellcode项目属性规范

在VS中开发shellcode不同于普通程序的开发,要进行一些特殊的设置。比如修改原main入口点函数,关闭缓冲区安全检查,修改运行库,关闭生成清单,关闭调试信息等等。
原创
发布博客 2024.04.28 ·
1080 阅读 ·
28 点赞 ·
0 评论 ·
17 收藏

第01节 什么是shellcode

这是我做的一个关于shellcode入门和开发的专题课👩🏻‍💻,主要面向对网络安全技术感兴趣的小伙伴。这是视频版内容对应的文字版材料,内容里面的每一个环境我都亲自测试实操过的记录,有需要的小伙伴可以参考🫡
原创
发布博客 2024.04.27 ·
1330 阅读 ·
41 点赞 ·
0 评论 ·
29 收藏
加载更多