本文为笔者从零基础学习系统安全相关内容的笔记,如果您对系统安全、逆向分析等内容感兴趣或者想要了解一些内容,欢迎关注。本系列文章将会随着笔者在未来三年的读研过程中持续更新,由于笔者现阶段还处于初学阶段,不可避免参照复现各类书籍内容,如书籍作者认为侵权请告知,笔者将立刻删除。强调本系列所有内容仅作为学习研究使用,作者对此文章中的代码造成的任何后果不负法律责任。

前文链接
[系统安全] PE文件格式详解1
[系统安全] PE文件格式详解2
[系统安全] Windbg Preview调试记录
[系统安全]《黑客免杀攻防》MFC逆向基础实战
[系统安全] windows下C++编写第一个加壳程序
[系统安全] PE文件格式分析实战基础—分析helloworld文件
[系统安全]《黑客免杀攻防》逆向基础之经典脱壳基础
[系统安全] 反病毒与免杀原理概论
[系统安全] 恶意代码分析实战基础之必备知识点和常用工具记录
[系统安全] Windows逆向必备知识、逆向分析小实战
[系统安全] 逆向分析之高级动态分析技术笔记
[系统安全] 系统虚拟化之容器底层原理实验
[系统安全] 万字总结系统虚拟化之容器底层原理实验
[系统安全] malloc的底层原理—ptmalloc堆概述

文章目录

  • 静态角度——对抗反汇编
    • 线性反汇编
    • 面向代码流反汇编
    • 对抗反汇编
  • 动态角度——反调试
    • 使用windows api探测
    • 手动检测数据结构
    • 系统痕迹
    • int指令扫描
    • 执行代码校验和检查
    • 时钟检测
  • 动态角度——反虚拟机
    • VMware痕迹
  • 代码加壳
    • 手动脱壳入门

静态角度——对抗反汇编

反汇编算法主要分为两种:线性反汇编和面向代码流的反汇编算法。

线性反汇编

线性反汇编策略是遍历每一个代码段,根据二进制码进行反汇编,缺点是不会区分某个二进制码是数据还是指令,全部按照指令来反汇编。其中的一种对抗方法是植入多字节指令机器码,比如标准本地call指令有5个字节,以0xE8开头。如果在一个函数开头加上这个字节码,则反汇编器会认为是一个call指令,这条call指令占用了函数开头的4个字节,从而破坏掉要这个完整的函数。

面向代码流反汇编

IDA用的就是面向代码流的反汇编。它检查每一条指令,然后建立一个需要反汇编的地址列表。另外当遇到条件分支时,反汇编器从true或false两个分支处选择一个进行反汇编。大多数面向代码流的反汇编器会首先处理条件跳转的false分支。

对抗反汇编

  • 相同目标的跳转指令
    相同跳转目标到0xE8后,如下所示,这样会跳转到next+1处,但是如果是线性反汇编,那会将E8看成时call指令。解决方法是光标选中E8,按D键设置成数据。
jz next+1
jnz next+1
next:E8malware-code
  • 固定条件的跳转指令
    跳转条件总是相同,如下代码,反汇编优先处理false分支,这样会执行next后的E8指令
xor eax, eax
jz next+1
next:E8malware-code
  • 共同引用的字节码,如下图,EB字节作为jmp跳转指令,后面需要FF,而FF C0又是inc eax,反汇编器会破坏掉inc eax指令,处理方法是将EB字节按D键定义为数据。
  • 滥用ret指令
    如一下代码,call时将返回地址压栈,add时起始就是将返回地址加5,变成了004011CA出的push ebp指令,当ret的时候eip指向了这条指令。但是反汇编器却蒙圈了。

动态角度——反调试

当恶意代码意识到自己被调试时,可以改变正常的执行路径或者修改自身程序导致崩溃而对抗调试。

使用windows api探测

通过使用windwos提供的api可以判断自己是否正在被调试,比如下面的一些函数,如果在分析的代码中看到这些函数,就说明这个代码样本在检测自身是否被调试

IsDebuggerPresent
CheckRemoteDebuggerPresent
NtQueryInformationProcess
OutputDebugString

手动检测数据结构

PEB结构体中的一些标志会暴漏调试器存在的信息,进程运行时fs:[30h]指向PEB基址

  • BeingDebugged标志位
    通过检查BeingDebugged标志位可以确定自身是否被调试
  • NTGlobalFlag标志位
    调试器启动进程和正常模式下启动进程不同,创建的内存堆方式不同,使用PEB中偏移量0x68处值来判断如何创建堆结构。如果是0x70则在被调试中。

系统痕迹

当然就是查看注册表了。

int指令扫描

扫描内存中代码段中是否有0XCC字节,如果有的话说明是调试器下的断点。代码编写者自己插入int 3或者int 2D指令,当调试者调试时可以混淆其中断操作。

执行代码校验和检查

对代码求哈希,和硬编码的哈希值比较

时钟检测

被调试时,进程运行速度大大降低,可以利用代码执行时间间隔来判断是否被调试。可以使用rdtsc指令获取从开机到当前的时间间隔,两次调用做差得到代码执行时间。

动态角度——反虚拟机

VMware痕迹

  • 安装了VMware Tools的主机里有三个进程VMwareService.exeVMwareTray.exeVMwareUser.exe
  • 在注册表中也可以看到VMware的相关信息。
  • 正常情况下windows不会使用LDT结构,但是vmware会使用。host系统中ldt位置的值位0,而在虚拟机中的值位非零。
  • 其他的一些可以实现反虚拟机技术的常用指令包括sidt,sgdt,sldt,smsw,str,in,cpud等。

代码加壳

手动脱壳入门

https://blog.csdn.net/weixin_42172261/article/details/122275587

参考《恶意代码分析实战》

[系统安全] 逆向工程进阶篇之对抗逆向分析相关推荐

  1. 进阶篇---PPO代码逐行分析

    进阶篇-PPO代码逐行分析 一.TRPO.PPO.DPPO PG (Policy gradient) 最常用的策略梯度估计其表达形式如下 TRPO(Trust Region Policy Optimi ...

  2. 第5篇 熊猫烧香逆向分析(下)

    本实验仅用于信息防御学习,请勿用于非法用途!!! 目录 一.前言 二.实验环境 三.函数sub_408024分析 1.函数sub_40532C分析 2.函数sub_4054BC分析 3.函数sub_4 ...

  3. 逆向工程--苹果移动端app逆向分析技术(一)

    0x01 基础准备 关于iphone移动端app逆向程序相关初级基础大家可以自己提前学习.本 文主要给大家分享关于脱壳加密app程序的技术.学习之前大家先搭建系 统环境,准备相应的工具,参考链接教程自 ...

  4. 第4篇 熊猫烧香逆向分析(中)

    仅用于信息防御学习,请勿用于非法用途!!! 目录 一.实验环境 二.函数sub_408024分析 1.函数sub_ 40277C分析 2.函数sub_ 405684分析 3.函数sub_ 403ED4 ...

  5. NSA释出逆向工程工具GHIDRA针对恶意软件逆向分析

    2019独角兽企业重金招聘Python工程师标准>>> 美国国安局(National Security Agency,NSA)准备在今年3月举行的RSA安全会议上免费释出名为GHID ...

  6. 使用 inline 内联函数对抗逆向分析

    在 ARM 汇编里函数调用是使用 bl 指令跳转到函数地址,攻击者逆向分析很容易找到调用过程,分析参数和返回值. 可以将一些敏感的函数,比如将加密函数写成 inline 内联,无论代码里调用了多少次函 ...

  7. 视频教程-2019版抓包分析-Wireshark从入门到精通【进阶篇】-其他

    2019版抓包分析-Wireshark从入门到精通[进阶篇] G-LAB IT实验室创始人.知名讲师.同时拿到路由交换.网络安全.数据中心3个方向的CCIE专家级别认证.教学风趣幽默,广受学员好评 郭 ...

  8. 微信逆向分析(三)——逆向分析的实现思路

    前言 找到偏移之后,就是写辅助工具了.这一篇聊聊写辅助工具的原理.具体的代码细节,等到实战会展开细说. 明确一下 逆向两个目的 1.调用功能 2.获取数据 对应的实现方法 1.调用功能 找到偏移,直接 ...

  9. [安全攻防进阶篇] 四.逆向分析之条件语句和循环语句源码还原及流程控制逆向

    从2019年7月开始,我来到了一个陌生的专业--网络空间安全.初入安全领域,是非常痛苦和难受的,要学的东西太多.涉及面太广,但好在自己通过分享100篇"网络安全自学"系列文章,艰难 ...

  10. [安全攻防进阶篇] 一.什么是逆向分析、逆向分析应用及经典扫雷游戏逆向

    从2019年7月开始,我来到了一个陌生的专业--网络空间安全.初入安全领域,是非常痛苦和难受的,要学的东西太多.涉及面太广,但好在自己通过分享100篇"网络安全自学"系列文章,艰难 ...

最新文章

  1. codevs1258 关路灯(☆区间dp)
  2. 远程办公要降薪?谷歌带头:最高下降 25%
  3. 劳力士格林尼治价格_劳力士行情暴跌后回涨,什么时候才是入手的最佳时机?...
  4. 数字类 default 0和 default 0_04Optional类和接口中的default、static方法
  5. linux 如何格式化ext2,Linux的Ext2文件系统(InodeBlock)详解
  6. zabbix 获取不到自定义脚本的值解决
  7. hmm 求隐藏序列_自然语言处理(3)隐马尔科夫模型 HMM
  8. 建立SAP Router后,开放SAP访问的步骤
  9. 【摘要】抽取式摘要:TextRank和BertSum。
  10. 几款制作帮助文档的工具汇总
  11. 2.4G频段的无线收发芯片 SI24R1 问题汇总解答
  12. 三星6818LED驱动的编写
  13. linux7.6安装gcc,Centos7.6 安装gcc9
  14. 京东商城网页数据爬取
  15. 软件工程(2019)第四次作业
  16. router跳转外部链接
  17. 8年开发,连登陆接口都写这么烂...
  18. 真的!这么写参数校验 (Validator) 就不会被劝退了。。。
  19. [1057]VMware安装的虚拟机窗口如何自适应屏幕大小
  20. 百度百聘企业简单信息获取

热门文章

  1. qq传输文件为什么服务器忙,win10系统qq接收文件慢一直显示传输连接中的教程
  2. 了解talkingData
  3. HTML 页面 meta 的作用
  4. 齐博cms基础教程之认识齐博cms
  5. H.264/AVC 的各大主流编解码器
  6. 图像压缩-《Learned Image Compression with Discretized Gaussian Mixture Likelihoods and Attention Modules》
  7. 10分钟入门Python,花5小时写了7个案例和这篇文章值得收藏
  8. VASP+VTST编译安装
  9. 移动Ad Hoc网络路由协议汇总
  10. Vue项目设置浏览器小图标