2025年10月

/etc/skel 是 Skeleton Directory 的缩写,意为“骨架目录”。它的核心作用是:当一个新用户被创建时,系统会自动将这个目录下的所有文件和目录,复制到新用户的家目录中,作为新用户初始环境的起点。

每次使用useradd命令新建用户时,useradd背后Glibc中的adduser()会负责将/etc/skel的内容复制到/home/<新用户>中。

/etc/skel权限一般是755

//https://www.cnblogs.com/Meteor-Kai/articles/18473549这篇文章不错

  1. 文件头签名
    UPX! 或 UPX0、UPX1、UPX2
  2. 独特的节区名称
    UPX 处理后的 PE 文件通常包含特征明显的节区:
    UPX0 - 通常包含解压后的代码
    UPX1 - 包含压缩的数据
    UPX2 - 在某些版本中使用
  3. 入口点代码模式
    UPX 壳的入口点有特定的汇编指令模式:
    assembly
    pushad ; 保存所有寄存器
    ; ... 解压代码 ...
    popad ; 恢复所有寄存器
    PUSHAD 可能被改为等价的指令序列(如多个PUSH指令),或者被垃圾指令包围,但核心逻辑仍在。你会看到在保存寄存器后,紧接着是一大段复杂的循环、异或操作、MOV指令等,这符合解压代码的特征。
    PUSHAD 将所有寄存器压栈,导致ESP变化。解压代码通常不会在中间频繁操作栈,但在解压结束、执行 POPAD 之前,一定会恢复栈指针(之后的代码就是原始代码)。为了找到OEP,我们在PUSHAD(或多个PUSH保存寄存器操作)之后,对当前栈顶的内存地址下一个硬件断点即可。这个原理对许多UPX变种都有效。
  4. 资源结构异常
    UPX 压缩的文件通常:
    资源段很小或异常
    原始程序的资源被压缩到数据段中
    导入表被压缩和重建
  5. 动态行为分析
    在沙箱环境中运行程序并观察行为:
    内存解压模式:监控进程在运行时是否大量修改自身内存
    API 调用序列:检测典型的解压壳行为模式
    代码自修改:监控程序是否在运行时生成或修改可执行代码

绕过监测的技术:

  1. 修改 UPX 特征
    重命名 UPX! 签名和节区名称
    修改入口点代码模式
    使用自定义编译的 UPX 版本
  2. 多层加壳
    使用多个不同的加壳工具依次加壳:
    text
    原始程序 → UPX压缩 → 其他壳压缩 → 最终文件
  3. 加壳后修改
    在 UPX 压缩后手动修改文件,破坏特征签名但保持功能完整。
  4. 使用保护壳而非压缩壳
    使用 Themida、VMProtect 等高级保护壳,它们提供:
    1)反调试技术
    2)代码虚拟化
    3)更强的加密

UPX魔改对抗可看Linux | UPX变形壳脱壳Tips /// Linux | UPX变形壳脱壳Tips(Bak)