12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
查看: 213|回复: 0

shellcode免杀框架内附SysWhispers2_x86直接系统调用

[复制链接]

345

主题

345

帖子

700

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
700
发表于 2022-1-28 19:49:24 | 显示全部楼层 |阅读模式
1、概述
之前分析CS4的stage时,有老哥让我写下CS免杀上线方面知识,遂介绍之前所写shellcode框架,该框架的shellcode执行部分利用系统特性和直接系统调用(Direct System Call)执行,得以免杀主流杀软(火绒、360全部产品、毒霸等),该方式也是主流绕过3环AV、EDR、沙箱的常用手段。Ps:感谢邪八Moriarty的分享课。


2、简要介绍

该框架主要由四个项目构成:GenerateShellCode:负责生成相关功能的shellcode。EncryptShellCode:负责以AES128加密所将执行的shellcode FunctionHash:负责盘算shell中所用到函数的hash值。 XShellCodeLoader:负责执行加密后的shellcode。
2.1 GenerateShellCode

以简单弹窗messagebox生成的shellcode作介绍,定义的入口函数MyEntry(),先定义GetProcAddr()LoadLibaryA()MessageBoxA()三个函数对应的hash,然后通过MyGetProcAddress()传入hash值和kernel32基址返回相关函数地址再举行调用


自定义函数入口需在项目属性->链接器->入口点中举行设置:



通过GetKernel32Base()函数获得kernel32基址:




通过MyGetProcAddress()函数传入hash值找出对应的函数名,函数内容就是解析kernel32的导出表,遍历每个函数并盘算出相应hash并与传入的hash作比较:
GetProcHash()把函数名转为相应的hash:


Release x86模式生成后exe程序后,010editor打开找到.text代码段,将其抠出后得到shellcode



2.2、EncryptShellCode

首先打开已经抠出的shellcode文件,并将器读入内存:

AES循环加密0x10个字节AES加密的实现是WjCryptLib_Aes开源项目:




加密后保存到新文件:




2.3、FunctionHash这个比较简单,盘算所需要用到函数的hash值:



2.4、XShellCodeLoader

下面着重介绍下shellcode的执行实现,因为x86x640环进3环的方式不同,在这里简单介绍下不同版本3环进0环的方式:一、32位的程序在32位系统上运行有两种方式进0环,第一个是停止门int 02Eh,第二种是sysenter二、32位的程序在64位系统上运行,通过FastSystemCall0环三、64位的程序在64位系统上运行,通过syscall0环这里用vs的Release x86来举行编译,所生成的32位exe程序在32位系统运行使用sysenter0环,在64位系统则使用FastSystemCall0环。

下面我们先以32位程序运行在32位系统的sysenter举行解说:首先自定义一个区段,该区段的属性最好只为read,一定不要read、write、execute全上,这种全属性在内存中会显得很可疑,区段名最好为系统常用的而这个程序又没用到的,如.edata,因为360杀毒可能会对不常见的区段名报毒,别的不建议使用#pragma section(".edata",read,execute,nopage) 该方式定义区段名,因为该方式生成的区段会出如今程序中所有区段的最前面,360杀毒报毒,特征较显着。使用以下方式去定义区段,区段的内容为已AES加密的shellcode:

然后通过遍历自身程序的区段查找出自定义的区段:


接着调用NtProtectVirtualMemory()修改自定义区段的属性为可读可写,即readwrite




NtProtectVirtualMemory()是由汇编所写的直接系统调用:


解析上述汇编,首先把001911B13h这个对应NtProtectVirtualMemory函数名的hash值压栈,然后调用SW2_GetSyscallNumber函数(背面解析syswhier框架时会提及),该函数会返回NtProtectVirtualMemory对应的系统调用号,mov ecx,5h是把函数个数赋值给ecx,再把NtProtectVirtualMemory()函数所传入的参数相继压栈,然后调用sysenter。


接着循环把自定义区段解密出来:

把自定义区段的属性还原到read、execute:

执行shellcode:


再来看看32位程序运行在64位系统的KiFastSystemCall,其主要区别只在于汇编部分:




Call internal_cleancall_wow64_gate,internal_cleancall_wow64_gate的值为__readfsdword(0xC0),即FS[0xC0]  WOW32Reserved3、执行结果
3.1、实行情况:


Team server: Kali 2020 ip: 192.168.202.131控制端:win7 32位 ip:192.168.202.134受控端1:win 7 32位 ip: 192.168.202.140受控端2:win10 1907位 ip: 192.168.202.1
3.2、32位系统执行



火绒版本号:






静态查杀,未发现风险:




360安全管家及360杀毒版本号:


静态查杀,未发现风险:





执行均未拦截,运行上线:



卡巴斯基,静态扫描未发现风险:





执行时则被查杀:






原因是stage执行下载后的Beacon.dll在内存中反射调用时被卡巴斯基规则检测到,也有相应的解决办法,等下篇文章魔改cobalt strike再来相应解决。


3.3、64位系统执行
同样成功执行并上线(测试过程同上)




附上框架项目地址:https://github.com/mai1zhi2/ShellCodeFramework
4、SysWhispers2项目简介

该项目较为简单,主要方法有三个:

一、SW2_HashSyscall()

该方法是盘算传入的函数名的hash值。
二、SW2_PopulateSyscallList()该函数中首先找到ntdll的基址:




遍历ntdll.dll的导出函数,并将其函数名对应的hash值和函数地址保存在SW2_SYSCALL_ENTRY结构体中:


SW2_SYSCALL_ENTRY的列表按照函数地址举行从小到大冒泡排序:

三、SW2_GetSyscallNumber该函数传入需要的函数hash值,遍历列表,返回对应的序号即系统调用号


原版只有64位程序运行在64系统的syscall,最后附上该项目修改后的32位程序运行在32位系统的sysenter和32位程序运行在64位系统的KiFastSystemCall版本,使用方法均与原版一致:
https://github.com/mai1zhi2/SysWhispers2_x86
来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-4-27 04:40 , Processed in 0.125000 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表