pe-elf 文件加壳时的处理

Linux下ELF二进制文件加壳,pe/elf 文件加壳时的处理 ==Ph4nt0m Security Team==Issue 0x02, Phile #0x0A of 0x0A|=—————————————————————————=||=———————-=[ pe/elf 文件加壳时的处理 ]=———————-=||=—————————————————————————=||=—————————————————————————=||=————————–=[ ... 阅读详情
 |=---------------------------------------------------------------------------=|
|=----------------------=[  pe/elf 文件加壳时的处理  ]=----------------------=|
|=---------------------------------------------------------------------------=|
|=---------------------------------------------------------------------------=|
|=--------------------------=[      By dummy     ]=--------------------------=|
|=-----------------------=[  <dummy_at_ph4nt0m.org>  ]=----------------------=|
|=---------------------------------------------------------------------------=|

               
前言:

    最初的壳是在感染型的病毒技术上发展出来的,加壳目的一般是压缩或加密。本文主要
就x86平台下win32 pe和linux elf 加壳程序的实现做简单介绍和总结,以自己以前写相关
程序做线索叙述,其中程序源码是开源的,有兴趣的朋友可以继续进行改进。

    ps: 其中有些地方很久没碰,可能有地方描述有误,还请见谅:)

正文:

    -------------------------------------------------------
    slm        x86 win32 r3 pe packer
    mimisys    x86 win32 r0 pe packer
    elfp       x86 linux r3 elf packer
    -------------------------------------------------------

一、一个壳的组成

    一个完整的壳程序主要由 2 个部分组成 packer 和 loader。它们具体的作用分别是:

    (1) packer
       
    负责将待加壳程序压缩和加密处理、把loader写到待加壳程序上。以slm的pakcer
    为例具体操作包括,pe有效性判断、优化可压缩数据、压缩和加密、添加loader、存放
    加壳参数和待加壳程序原数据(oep等等)、改写入口点等等。

    (2) loader
       
    主要工作是解压或解密被加壳的程序,以slm的loader为例具体的操作包括:获取自
    身位置、获取加壳参数、进行解压或解密、填充导入表、重定位、tls 初始化等等。

二、slm (x86 win32 r3 pe packer)

资料:
    http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx

工具:
    lordpe    pe 文件格式查看编辑工具
    dumpbin    vc 自带coff文件格式查看工具
    ollydbg    r3 调试工具

源码结构:
    ./slm/cm 公共头文件和模块
    ./slm/pk    packer 实现
    ./slm/sc    loader 实现

    在做这个时候对 pe 也是刚刚了解,所以 slm 很多地方现在看来有些问题:)。在第一
节已经简单描述 slm 的工作流程,下面主要就我当初做的时候遇到的问题做一些描述:

    (1) 资源的处理
       
    slm 的资源处理做的比较烦琐,当初目的是为了把可压缩资源数据归并到一起,进
    行一次压缩,不可压缩单独存放。下面简单介绍一下资源的目录数据格式,详细还是看
    看微软的文档和相关源码:)
       
        从IMAGE_NT_HEADERS.IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_RESOURCE]
    取出资源数据的地址res_rva,经过转换后第一个结构体是IMAGE_RESOURCE_DIRECTORY

        IMAGE_RESOURCE_DIRECTORY:

            NumberOfIdEntries       目录下 id 名称入口项个数
            NumberOfNamedEntries    目录下 name 名称入口项个数

        紧跟着IMAGE_RESOURCE_DIRECTORY后面是IMAGE_RESOURCE_DIRECTORY_ENTRY结构
    数组,这个数组的元素个数是 NumberOfIdEntries + NumberOfNamedEntries。

        IMAGE_RESOURCE_DIRECTORY_ENTRY:

            Id                  目录id,只有NameIsString非真才有效
            NameIsString        目录名称是否是字符串,如果为真NameOffset有效
            NameOffset          目录名称串的偏移, 偏移是相对与res_rva*的。
            DataIsDirectory     如果为真 OffsetToData 有效,否则OffsetToDirectory
                                有效
            OffsetToData        指向资源数据,偏移类型rva
            OffsetToDirectory   指向子目录,偏移类型rva

        如果目录入口名称是字符串,通过NameOffset获取PIMAGE_RESOURCE_DIR_STRING_U
    的结构指针,目录名是unicode格式,并且不是以零结尾的字符串。如果目录名不是字符
    串而是id, 那么其值在winnt.h 定义。常见id有RT_ICON、RT_VERSION等等。

        结构大致简单描述完了,有点要注意OffsetToDirectory、OffsetToData修改时要
    进行 DWORD 对齐,否则会出现奇怪的现象。

    (2) 导入表处理

        从IMAGE_NT_HEADERS.IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_IMPORT]
    取出导入表的地址imp_rva,经过转换后第一个结构体是IMAGE_IMPORT_DESCRIPTOR。
       
    IMAGE_IMPORT_DESCRIPTOR:

            Name               指向导入 dll 的名称,偏移类型 rva
            FirstThunk         指向 IMAGE_THUNK_DATA 结构体,偏移类型 rva
            OriginalFirstThunk 指向FirstThunk 的副本, 可以为空。偏移类型 rva
       
        导入由IMAGE_IMPORT_DESCRIPTOR结构数组组成,数组长度由一个Name域为空的结
    构表明。
       
        FirstThunk和OriginalFirstThunk都是指向以IMAGE_THUNK_DATA数组组成的数据
    结构,系统的加载器在进行导入表填充时,会把FirstThunk指向的结构修改掉。

    (3) TLS 处理

        这里说的tls是所谓的静态tls(在pe文件结构上进行实现),关于什么是tls可以看看
    《windows 核心编程》线程那章。
       
        1、tls 是怎样的

        比如要在vc中声明一个tls变量需要这样__declspec(thread) int x = 0;在链接
    时这个变量会被链接器放入.tls的节中。这个节从外边看和其他的节没有什么不同,唯
    一的区别在IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_TLS]指向的一个结构会对
    此节进行描述,这个结构是IMAGE_TLS_DIRECTORY。

        IMAGE_TLS_DIRECTORY:

            StartAddressOfRawData   tls数据开始地址类型va
            EndAddressOfRawData     tls数据结束地址类型va
            AddressOfIndex;         tls slot的地址,默认tls slot为0

            AddressOfCallBacks      指向一个PIMAGE_TLS_CALLBACK的数组,这个数组
                                    以0结尾,每个PIMAGE_TLS_CALLBACK都是va类型
           
            SizeOfZeroFill          数据区需要进行清 0 数据的大小
            Characteristics
       
        2、系统加载器怎样处理exe的tls

            系统加载器在完成重定位和输入表填充后,就开始处理tls。如果存在tls_dir,
    求出tls数据的大小EndAddressOfRawData - StartAddressOfRawData +
    SizeOfZeroFill, 按照大小分配一块内存,地址存入(PDWORD)fs:[0x2c] +
    tls_slot, 接着拷贝StartAddressOfRawData -> EndAddressOfRawData之间的数
    据到新分配的内存中,然后使用SizeOfZeroFill 清零剩下的数据,然后进行循环回
    调AddressOfCallBacks中的函数,PIMAGE_TLS_CALLBACK函数和DllMain原型很像,
    只是没有返回值。

        3、系统加载器怎样处理dll的tls

            首先明确dll是可以使用tls的,唯一的不同是AddressOfCallBacks调用方式会
    有些区别。如果目标dll是被静听链接到其他文件上,在进程创建完成时即被加载,
    那么他的tls callback会触发,而LoadLibrary方式加载不会触发。

    (4) rva & raw 转换

        pe 文件中许多结构域的指针类型是rva, rva是pe文件由系统加载后,方法相关数
    据的相对偏移量。而我们进行加壳处理时,是直接map的文件数据访问都是使用文件指
    针,这就需要rva进行转换。(每次做pe相关工具时,我都会习惯写一个这样的函数,现在
    不下10中版本,竟然没有一个可以保证是正确的 - -)

        下面这个是最新的rva2raw版本,不保证正确性。

三、mimisys (x86 win32 r0 pe packer)

资料:
    Windows Research Kernel
        wrk/base/ntos/mm/sysload.c:MmLoadSystemImage
工具:
    syser     内核调试器,你也可以选择其他的r0调试器
    vmware    如果不想频繁重启,需要一个虚拟机

    文件格式的一些处理参考slm, 这里主要就r0 pe和r3 pe区别做介绍:

    (1) 节和页

        r0空间的内存常常很紧张,就导致sys section属性有几个特殊地方

        1、可换出和禁止换出
           
        在内存不足时,系统内存管理器,会枚举已加载的section object, 如果存在
    pageout属性,那么系统内存管理器就会换出这个节对应的页(这个节经过系统页对
    齐后换出内存)节对齐原则VirtualAddress向上、VirtualSize向下。禁止换出如
    名字所名这个节将永驻内存。

        2、节对齐小于一页
           
        大多数sys的节对齐指数都是小于一页,系统加载器在处理这类文件时相当很
    简单。加载后文件和磁盘上的文件布局基本一致。当节对齐小于一页时,
    SizeOfRawData必须大于等于VirtualSize,即不支持未初始化节。mimisys通过增
    加SizeOfImage在文件加载后分配一个未初始化的缓冲区,保证解压过程。

    (2) checksum校验

        一句话: 只有正确的checksum sys文件才允许被加载。

    (3) win2k相关问题

        win2k的系统加载器和其他nt系统有几处不同,r3和r0都会有一些区别,比如r3 pe
    的必须要有导入表,否则拒绝加载,r0 pe必须要有重定位信息,否则也会拒绝加载。这
    种情况需要构造一个空的重定位目录即可。

        mimisys采取的是合并节,导致加壳后只剩下两个节,第一个节是loader, 存放
    loader和各种加壳参数,第二个节是原程序优化压缩后的数据(移动重定位,移动资源等
    等)。两个节的属性都是不允许换出的。

四、elfp (x86 linux r3 elf packer)

资料:
    Tool Interface Standard (TIS) Executable and Linking Format
        http://www.x86.org/ftp/manuals/tools/elf.pdf
    毛德操 《漫谈内核兼容》8,9 ELF映像的装入
        http://linux.insigma.com.cn/jszl.asp?docid=132762762
        http://linux.insigma.com.cn/jszl.asp?docid=133617926
    linux 内核源码
        linux/fs/binfmt_elf.c:load_elf_binary

工具:
    objdump    进行elf文件格式的结构查看
               http://www.gnu.org/software/binutils/binutils.html
               
    ald        汇编级调试器,gdb无法调试没有调试信息文件的。
               http://ald.sourceforge.net/
   
    elfp是在magiclinux完成的linux elf文件压缩壳。

    elf的格式是linux下主要的可执行文件格式,它也是在coff上基础上设计的,所以它和
pe文件的格式很相似,下面的叙述过程中会和 pe 文件以对比形式进行描述。

    elf文件的第一个数据结构是以Elf32_Ehdr开始

    typedef struct
    {
      unsigned char e_ident[EI_NIDENT];     /* Magic number and other info */
      Elf32_Half    e_type;                 /* Object file type */
      Elf32_Half    e_machine;              /* Architecture */
      Elf32_Word    e_version;              /* Object file version */
      Elf32_Addr    e_entry;                /* Entry point virtual address */
      Elf32_Off     e_phoff;                /* Program header table file offset */
      Elf32_Off     e_shoff;                /* Section header table file offset */
      Elf32_Word    e_flags;                /* Processor-specific flags */
      Elf32_Half    e_ehsize;               /* ELF header size in bytes */
      Elf32_Half    e_phentsize;            /* Program header table entry size */
      Elf32_Half    e_phnum;                /* Program header table entry count */
      Elf32_Half    e_shentsize;            /* Section header table entry size */
      Elf32_Half    e_shnum;                /* Section header table entry count */
      Elf32_Half    e_shstrndx;             /* Section header string table index */
    } Elf32_Ehdr;

    e_ident        在 elf.h 中对应的 ELFMAG 宏,长度是四个字节
    e_entry        入口点映像偏移(映像偏移即 pe 中所说的 rva)
    e_phoff        Elf32_Phdr 数组的文件偏移
    e_shoff        Elf32_Shdr 数组的文件偏移
    e_ehsize       Elf32_Ehdr 结构的大小
    e_phentsize    Elf32_Phdr 结构大小
    e_phnum        Elf32_Phdr 数组成员个数
    e_shentsize    Elf32_Shdr 结构大小
    e_shnum        Elf32_Shdr 数组成员个数
   
    在Elf32_Ehdr之后即Elf32_Phdr数组,Elf32_Phdr的地址通过Elf32_Ehdr.e_ehsize来
确定。Elf32_Ehdr数组(或叫段表),你可以把phdr看做pe的节表。

    typedef struct
    {
      Elf32_Word    p_type;            /* Segment type */
      Elf32_Off     p_offset;        /* Segment file offset */
      Elf32_Addr    p_vaddr;        /* Segment virtual address */
      Elf32_Addr    p_paddr;        /* Segment physical address */
      Elf32_Word    p_filesz;        /* Segment size in file */
      Elf32_Word    p_memsz;        /* Segment size in memory */
      Elf32_Word    p_flags;        /* Segment flags */
      Elf32_Word    p_align;        /* Segment alignment */
    } Elf32_Phdr;
   
    p_type    描述这个段的加载行为属性
    p_offset  段数据在文件中偏移,类似pe节中的PointerToRawData
    p_vaddr   段数据加载后在映像中偏移, 类似pe节中的VirtualAddress
    p_filesz  段数据在文件中大小,类型pe节中的SizeOfRawData
    p_memsz   段数据加载后在映像中大小,类型pe节中的VirtualSize
    p_flags   描述这个段的内存属性,类似pe节中的节属性
    p_align   段对齐粒度

    p_type主要的类型有

        PT_LOAD      这个段需要装载到内存中
        PT_PHDR      这个段存放的是Elf32_Phdr数组
        PT_INTERP    这个段存放一个解释器名,请求系统加载器把映像装载需求转给这
             个解释器,关于elf的解释器问题,可以理解为windows下ntdll装载
     pe文件,elf文件的解释器主要负责重定位、导入表填充等操作

    p_flags 主要类型有

        PF_X         这个段可执行
        PF_W         这个段可写
        PF_R         这个段可读

    在Elf32_Ehdr(段表)之后便是Elf32_Shdr数组(节表),你可能到这里很奇怪了,怎么这
个叫节表?如果你熟悉pe应该知道节表对pe文件的重要性,但这个可不是pe中的那个节表,你
应该把它看做nt header中data_dir[]结构,加载器或调试器等工具会通过节名确定节具体
用途,比如存储调试信息、版本信息、字符串表等等、elfp在加壳过程会丢弃节表。

    下面简单讲讲elfp的loader处理过程(加壳过程很简单),在一个elf文件被加载后,它的
入口点在执行之前,堆栈中会由系统加载器push的一些参数。

    //  堆栈结构:
    //  +-------------------+
    //  |   return address  |        返回地址
    //  +-------------------+
    //  |   argc            |        参数个数
    //  +-------------------+
    //  |   argv[?], NULL   |        参数表,以 NULL 结尾
    //  +-------------------+
    //  |   envp[?], NULL   |        环境表,以 NULL 结尾
    //  +-------------------+
    //  |   auxv[?]         |        中文不知道叫什么它,这个主要是给解释器使用,
    //  +-------------------+        存放这个elf的相关信息如果被加壳程序需要解
                                     释器,你需要重写正确填写这个参数,让解释器可
     以正确的找到相关数据的地址。
                                    
    elfp壳loader的执行流程大致如下:

        申请内存-->把每个段解压到指定的地址上-->获取被加壳程序原始信息-->检查原
    始段表、重写 auxv-->加载解释器-->调用解释器

    关于 elf 的解释器,可以参考资料链接上的文字,那里比我描述的完整。

五、附录

[1] 本文代码
    ./pstzine_0A_01.zip
一个ELF文件分析和逆向的过程 一个安卓平台上ELF文件的逆向分析过程,使用IDA加断点进行动态调试 阅读详情

相关推荐

pe/elf 文件加壳时的处理

前言:    最初的壳是在感染型的病毒技术上发展出来的,加壳目的一般是压缩或加密。本文主要就x86平台下win32 pe和linux elf 加壳程序的实现做简单介绍和总结,以自己以前写相关程序做线索叙述,其中程序源码是开源的,有兴趣的朋友可以继续进行改进。    ps: 其中有些地方很久没碰,可能有地方描述有误,还请见谅:)正文:    -----------------------------

873

Linux二进制保护(文末福利)

本文将会探索Linux程序混淆的基本技术和动机。通过对二进制文件进行混淆或者加密来保护二进制文件不被篡改的技术被称作软件保护。说到软件保护,指的是二进制保护或者二进制加固技术。二进制加固并不是Linux所独有的,事实上,Windows操作系统有许多关于二进制加固的产品,可供讨论的例子非常多。 许多人没有意识到的是,Linux在这方面也有一定的市场,尽管这方面的技术主要应用于政府使用的反篡改软件产

人邮异步社区 5480

第三章 编译器基础知识之ELF文件格式简介

因为接下来要介绍llvm相关知识,作为一个通用编译器,除了要了解编译原理、汇编等专业知识之外,还需要了解像PE文件结构,ELF文件结构等。上述知识我会在后续的章节之中简单介绍,同时在文章最后给大家分享一些相关书籍。 本章我主要介绍ELF文件格式的相关知识,不过本文不是要将所有知识全部讲清楚,更多的一些学习方法和心得,以帮助那些对编译、操作系统等知识感兴趣的同学学习。 一 什么是ELF文件 ELF文件是一种二进制文件,类似于windows下的exe文件,是unix系统家族中的可执行文件,符合ELF文件结

jinggege_7758521的博客 3260

写一个PE的壳_Part 5:PE格式修复+lief源码修改

文章目录1.CFF查看2.python再次加载3.异常2的Raw问题step 1:运行程序step 2:调试器运行程序step 3:单步调试step 4:CFF查看二进制step 5:查看LIEF源码step 6:解决办法step 7:结果验证step 8:源码修改建议4.参考 用原教程中Part 4的py文件处理test.exe,生成名为packed_bug1.exe程序;运行时直接报错 下面给出了整个修复的思路 1.CFF查看 CFF看一下packed_bug1.exe,直观上会发现2处异常,导致PE

可乐松子的博客 1172

基于UPX的可执行程序加壳工具源码解析与实战

加壳(Pack)技术是一种通过在原始可执行文件(如PE文件)外部包裹一层加载代码(称为“壳”)来改变其存储形式的技术。壳的主要作用包括压缩体积、加密内容、增强反逆向能力等。加壳后的程序在运行时首先执行壳代码,完成解压或解密操作后,再将控制权交还给原始程序入口点。这种机制广泛应用于软件保护、恶意代码隐藏等领域。从作用来看,加壳不仅可以减少文件体积,还能有效增加逆向分析的难度。例如,UPX加壳工具通过高效的压缩算法显著减小文件大小,而商业级加壳工具则集成反调试、虚拟化等高级保护机制。

weixin_42476987的博客 1184

pe、elf文件加壳时的处理

关于PE加壳的信息文档。。。。。。。。。。。。。。。。。。大家下来看看就可以了,,,呼呼,是一位黑客牛人写的

linux srelf 加壳代码,浅谈被加壳ELF文件的DUMP修复

前面的文章中,我已经介绍了如何调试被加壳的ELF,这里不在叙述,直接进入正题,以某加固为例,如何DUMP和修复被加壳的ELF,使其能调试加载我们先来看看被加壳ELF的头和Program Header首先我要让调试器停在入口点0x3860的位置开始DUMP修复之旅,我的第一次DUMP修复的方法,延续了PE的思路,结果失败了失败的原因并不是思路不对,而是细节上出现问题第一次DUMP的方法:1.废除不影...

weixin_31232695的博客 797

elf文件压缩工具

在linux-i386平台上直接运行, 对elf等文件压缩, 压缩率30~70%

Rizin文件格式解析技巧:ELF、PE、Mach-O等格式深度分析

掌握二进制文件格式解析是逆向工程的核心技能!Rizin作为功能强大的UNIX-like逆向工程框架,提供了全面而高效的文件格式解析工具。本文将深入探讨如何使用Rizin解析ELF、PE、Mach-O等主流二进制格式,帮助您快速掌握逆向工程的关键技术。🚀 ## 为什么需要专业的文件格式解析工具? 在逆向工程和安全分析中,理解二进制文件的结构是首要任务。不同的操作系统使用不同的可执行文件格式:L

gitblog_00096的博客 766

一款加壳 工具 源代码

我自己硬盘上的,拿出来分享, 写加壳软件要先参考别人的的代码啊

【STM32】CubeMx系列教程之移植FreeRTOS

本文详细介绍了在STM32F429上通过CubeMX工具移植FreeRTOS的方法。主要内容包括:1)配置系统时钟源,将TIM1替换SysTick作为时钟基准;2)FreeRTOS的创建与配置,包括任务创建、堆栈大小设置等;3)关键配置参数说明,如堆大小建议设为RAM的50%-70%;4)常用函数如堆栈监控、任务挂起/恢复等。文章提供了从基础配置到深入优化的完整移植指南,适合STM32开发者参考使用。

JackieJin123的博客 785

Detect It Easy深度解析:从PE到ELF,全面掌握文件检测技术

你是否曾在分析恶意软件时因无法快速识别文件类型而束手无策?在逆向工程过程中是否因缺乏高效工具而浪费大量时间?本文将系统介绍Detect It Easy(DiE)这一跨平台文件类型识别工具,帮助你从基础操作到高级分析,全面掌握文件检测核心技术。读完本文,你将能够: - 快速搭建DiE分析环境并掌握基础使用方法 - 深入理解PE与ELF文件格式的检测原理 - 运用DiE高级功能进行恶意软件特征识别 -...

gitblog_00773的博客 739

ADP在线自适应动态规划之持续激励条件

在线自适应动态规划之持续激励条件 在在线自适应动态规划算法中,需要通过满足持续激励条件(Persistent Excitation Condition)保证critic网络权值的收敛性,一般的做法都是在算法初期在输入端引入探测噪声(Probing Noises)来保证数据的丰富性,但是由于在输入端引入噪声会给系统带来一些不好的影响,甚至可能破坏系统的稳定性。因此,出现了一些其他的方法来避免引入探测噪声,受阅读所限,我目前了解两种: Concurrent Learning(CL) Experience Re

qq_43435956的博客 6161

Android Native So加壳技术

这是13年12月份做的一个项目,难度相对较大,花了一个月的时间,不断试错,最后终于在元旦前晚完成,整理一下写出来,部分细节出于公司技术保护所以没有细说。 目前市面上针对Apk的保护主要是基于Dex,公开的有DexGuard、梆梆、爱加密、ApkProtect等,私底下相信很多涉及到技术保密的App开发商都在做自己的保护策略。 而针对so的保护就相对滞后了一些,这里有so在app中扮演的

hwuyule的专栏 1364

数字音频接口之I2S总线协议详解

1、SDATA,也就是串行数据信号,使用二进制传输数字信号。请注意数据的传输形式为补码的方式2、例如音频的采样率是8K,一s内存采样8K个点,一个点包含一个左声道,一个右声道,所以LRCK是8K,BCLK是2×采样频率×采样位数3、同时双向(TX和RX)音频流:串行数据同步移位到时钟信号SCK和LRCK。在SCK的下降沿将TX数据写入SDOUT引脚,并在SCK的上升沿从SDIN引脚读取RX数据。始终首先发送最高有效位(MSB);TX和RX均可在主模式和从模式下使用。

卓学课堂 3万+

交叉验证选型指南:k折、留一法、时序与分层CV实战决策

交叉验证是评估机器学习模型泛化能力的基础技术,其核心在于通过系统性数据重划分,缓解有限样本对真实分布估计的偏差。原理上,它通过控制训练-验证数据的独立性与代表性,诊断过拟合风险并提升性能指标的稳定性。技术价值体现在避免单次切分导致的结果偶然性、数据利用低效及验证集污染等问题。典型应用场景涵盖分类任务中的类别不平衡处理、时间序列预测的因果约束、用户行为建模中的数据泄露防控等。本文聚焦k折交叉验证、留一法、时间序列交叉验证与分层抽样等主流方法的适用边界与工程落地要点,结合过拟合诊断和泛化能力评估两大热词,提供可

dienangpiao2051的博客 476

游戏里DLSS太旧?替换dll升到新版本,翻车还能一键还原——DLSS Swapper 快速上手指南

DLSS Swapper 直接替换游戏里的 DLSS、FSR、XeSS dll,不更新游戏本体就能升级或回退到任意版本。适合想折腾画质设置的玩家;它不能给不支持 DLSS 的游戏加上该功能,也不承诺替换后帧数更高或一定不崩溃。 ## 能力边界 - ✅ 游戏内置的 DLSS / FSR / XeSS dll 可以换成任意版本,新版旧版都行 - ✅ 替换前自动备份原始 dll,随时可以一键还原 -

gitblog_00902的博客 703

学习STM32的无人机控制

下面是一个基于STM32的无人机控制的简单示例代码,包括四旋翼的PID控制、遥控器信号解析和电机控制。本示例以STM32F103系列为例,使用Keil C编译器进行开发。

qq_67153941的博客 706

H2O 3 REST API 实战指南:从版本约定到 GBM 端到端调用

H2O 3 的所有客户端能力——包括 Flow Web UI、R 与 Python 绑定——本质上都通过同一套基于 JSON over HTTP 的 REST API 实现。本文以官方文档 [h2o_3_rest_api_overview.md](https://link.gitcode.com/i/06578eec71d81e05e70a2e162446a086) 为核心骨架,结合 h2o-co

gitblog_00862的博客 418

Matlab波动光光学系统

波动光学是一种研究光波传播过程的理论,按照其处理的信息类型不同,可以分为相干和非相干波动光学,相干波动光学可以用作特定光学系统的分析和设计,其主要依赖物理光学和电磁波的基本原理,以及光学干涉和衍射的经验方程式,其中光波传播过程是以复数形式表示的,包括振幅和相位两个方面。近年来光学技术得到了广泛的应用和发展,波动光光学系统是其中一种重要的光学系统,它主要是利用波动光学原理,通过计算机模拟实现各种光学系统的设计、分析和优化,可应用于大气光传输、光束整形、分析系统的衍射和干涉特性,包括利用。

weixin_50547796的博客 260

NSX-T 4.1部署搭建

NSX-T4.1 部署搭建

weixin_58250887的博客 564

二进制解析与修改工具完整指南:一招用 LIEF 看懂并改写 ELF、PE、MachO

凌晨两点,你在新配的服务器上部署程序,代码逻辑反复核查了十几遍都没问题,服务却始终起不来——直到你用十六进制编辑器打开那个二进制文件,才发现某个 ELF 段的校验值被工具链悄悄改过。二进制解析与修改这件事,LIEF 就是那把能帮你省掉无数熬夜的钥匙。 ## 它是什么?快问快答 **问:它到底是个什么东西?** 答:LIEF(Library to Instrument Executable Fo

gitblog_01098的博客 430

手把手教你学Simulink——基于Simulink的输入输出线性化精确转矩控制

由于IOFL控制律中实时引入了当前状态的反馈(id​,iq​,ωe​),电感的变化被非线性项自动补偿,转矩仅出现微小幅度的波动(< 2%),展现出极强的参数鲁棒性。:电压方程中的耦合项(ωe​Lq​iq​和 −ωe​Ld​id​)仅通过前馈补偿,当转速 ωe​较高时,微小的前馈误差会导致显著的d-q轴电流交叉耦合;其中,ud​,uq​为定子电压,id​,iq​为定子电流,Rs​为定子电阻,Ls​为定子电感,ωe​为电角速度,ψf​为永磁体磁链,p为极对数。(步长 Ts​=10μs,即100ns?

MHD0815的博客 83

加壳问题

目前市面上针对Apk的保护主要是基于Dex,公开的有DexGuard、梆梆、爱加密、ApkProtect等,私底下相信很多涉及到技术保密的App开发商都在做自己的保护策略。 而针对so的保护就相对滞后了一些,这里有so在app中扮演的角色的原因,也有so自身特点的原因。 我个人理解,elf文件相对Windows的PE来说松散一些,物理磁盘上的文件和内存里的文件镜像差异更大,所以在处理上

GuiM_007的博客 875

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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...

上一篇: 绕过卡巴斯基主动防御系统方法的讨论
下一篇: SWAN访谈
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值