分离加载shellcode(通过参数加载shellcode)

admin 2024年1月21日03:36:58评论16 views字数 1131阅读3分46秒阅读模式

免责声明

     文章所涉及内容,仅供安全研究教学使用,由于传播、利用本文所提供的信息而造成的任何直接或间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任

前言:众所周知加载shellcode的方法有很多很多,在本文中我们运用到的就是其中的一种也很常见的一种加载方式。

    为了避免杀毒软件的监测,我们通过将shellcode与加载器(loader)分开放置,达到一个防止杀软监测的原理,如果使用无阶段shellcode(stagerless)进行上线,那么shellcode的文件大小会很大,我们的loader大小还没有shellcode大,如果将shellcode放置在loader中去进行加载,那么文件的熵值会很大(例如:一个loader(含shellcode)1MB大小,那么shellcode就占文件大小的百分之90),很有可能被扫描出来,所以这里我们通过将shellcode和loader分离,然后在通过loader去加载指定路径的文件,将shellcode导入。

这里我们使用到的是main函数的参数进行值,那么我们首先就要搞清楚main函数的参数有那些,和具体功能。

main函数参数

1.int argc 整型变量

2.char *argv[] 字符指针的数组,通俗一点就是字符串数组,每个元素都是字符串

接下里我用代码来带大家理解理解

分离加载shellcode(通过参数加载shellcode)

我们通过代码来打印,看看他们具体是啥。

分离加载shellcode(通过参数加载shellcode)

可以看到args的值是1,argv[0]的值是当前文件的路径,args我们暂时理解为argv这个数组里面有多少个值,那我们继续验证。

分离加载shellcode(通过参数加载shellcode)

我们通过给Project4.exe传递了三个123,他成功全部打印出来,并且这次args的值4,这样可以说明了args的作用,并且在这里我们可以看到argv这个数组里面储存了我们给的值,由此我们就可以实现同过main的参数传递值。

那么接下来我们进入正题,我们来看具体操作和代码:

分离加载shellcode(通过参数加载shellcode)

这里我们使用到上一篇文章的代码进行了一些修改,当然如果觉得自己构造函数麻烦,可以使用CreatfileA或者Creatfile函数来实现,具体实现参看上一篇文章即可。

接下来是具体操作:

分离加载shellcode(通过参数加载shellcode)

这里我们可以看到使用命令行运行成功上线

分离加载shellcode(通过参数加载shellcode)

可以看到火绒没有任何反应。

但是为了更可靠的免杀效果,我们可以对loader进行更多的免杀细节,比如断开函数调用链等等,具体可根据读者自己需求来。

我们可以根据不同的环境去使用不同的方法,通过参数传递更加灵活一下,在此我们可以思考一下如果我们使用http服务远程加载shellcode,是通过参数传递IP地址好些,还是在就在loader中将ip地址写好好一些?

原文始发于微信公众号(泾弦安全):分离加载shellcode(通过参数加载shellcode)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月21日03:36:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   分离加载shellcode(通过参数加载shellcode)http://cn-sec.com/archives/2414830.html

发表评论

匿名网友 填写信息