申明:本次测试只作为学习用处,请勿未授权进行渗透测试,切勿用于其它用途!
近期在进行免杀操作时,遭遇了些让人哭笑不得的难题。我费尽心思编写的代码,终于实现了零检出,但…
可就在我沾沾自喜时,微x监测系统却仍报告有毒。更头疼的是,连我的服务器IP地址也暴露了。
面对无奈,决定尝试Fuzzing技术。虽然程序绕过了传统杀毒软件,但沙箱监测却揭露了它的特征。现在的计划是,如果检测到运行在沙箱中,程序就不会执行。
时间检测:利用沙箱的限时运行特性,通过监测系统时间或延长执行来规避检测。
用户交互检测:寻找鼠标或键盘活动的迹象,无用户互动则可能处于沙箱环境。
环境检测:识别虚拟化软件的迹象,检查文件、进程、注册表,甚至硬件特征。
资源利用检测:观察系统程序、服务数量及CPU、内存使用,与沙箱环境的差异可能成为关键线索。
网络活动检测:分析IP地址和网络连接,判断是否在沙箱中。
硬件和系统配置检测:沙箱的硬件和系统配置可能与常规用户设备不同,这些差异可能被用来识别沙箱环境。
根据特征来fuzz
利用了Windows API的 GetTickCount64
和 Sleep
函数。
GetTickCount64调用:
GetTickCount64
函数返回自系统启动以来的毫秒数。这是一个常用于测量时间间隔的函数。
Sleep函数调用:
Sleep(300u)
使程序暂停300毫秒。Sleep
函数用于暂停当前线程指定的毫秒数。
import ctypes
import time
# 定义所需的Windows API函数
GetTickCount64 = ctypes.windll.kernel32.GetTickCount64
Sleep = ctypes.windll.kernel32.Sleep
def is_sandbox():
start_tick = GetTickCount64()
Sleep(300) # 暂停300毫秒
end_tick = GetTickCount64()
elapsed = end_tick - start_tick
# 检查实际暂停时间是否显著小于预期时间
# 这里我们检查时间差是否大于100毫秒
return elapsed - 300 > 100
def execute_shellcode(shellcode):
# shellcode执行的函数
pass
def main():
# 检测沙箱环境
if is_sandbox():
print("可能处于沙箱环境,不执行shellcode。")
else:
# 如果没有检测到沙箱,执行shellcode
-----------------------------
这里放loader
-----------------------------
if __name__ == "__main__":
main()
"在巧妙的is_sandbox
函数中,我们运用了GetTickCount64
和Sleep
来巧妙地评估程序的运行环境是否被人为加速。当发现实际的暂停时间显著低于预期时,我们便推断该程序可能处于沙箱环境中。基于这样的检测结果,main
函数会慎重地决定是否执行shellcode。
这里仅展示了一个示例。由于沙箱技术不断演进,加上系统性能的变数可能会影响计时函数的准确性,这种方法有可能出现误报或漏报。因此,强调始终在合法和安全的环境下对你的代码进行测试。
随信附上图示,祝各位专家在杀毒软件的世界中驰骋无阻。
往期精彩推荐
1.关注公众号「明暗安全」!
2.本文已收录在明暗官方网站:http://www.php1nf0.top/
3.看到这里了就点个关注支持下吧,你的「关注」是我创作的动力。
公众号:明暗安全
官方网站:http://www.php1nf0.top/
这是一个终身学习的团队,他们在坚持自己热爱的事情,欢迎加入明暗安全,和师傅们一起开心的挖洞~
关注和转发是莫大鼓励❤️