美文网首页
夺取应用程序的 “制空权”:内存数据

夺取应用程序的 “制空权”:内存数据

作者: 代码熬夜敲666 | 来源:发表于2022-02-25 13:58 被阅读0次

技术背景

在病毒查杀,应用安全对抗,静态逆向应用,动态逆向应用,最重要的对象就是,应用程序的内存数据。

病毒查杀对抗:需要获取查杀对象的内存数据进行和病毒库的特征做比对。

应用安全对抗:需要保护自身的内存数据不被转存。

静态逆向应用:遇到应用程序加密保护,那这用IDA就歇菜了,这时获取解密后内存数据就非常重要。

动态逆向应用:用ollydbg进行动态调试应用主要还是调试运行时释放的内存数据。

综上:应用程序的重重之中就是内存数据,我们就来用代码实现获取应用程序的 “制空权”。

效果展示

下面展示的是,读取并操作,正在运行的ClearData进程的内存数据。

  • 图片第一部分是正确读取到的内存数据,并写入到新创建的文件里面,文件大小和进程的原始文件是一致的。
  • 图片第二部分是工作窗口,展示的是读取操作的一些信息。
  • 图片第三部分展示,正在运行的进程信息。
夺取应用程序的 “制空权”:内存数据

代码实现

功能:获取正在运行进程的Pid

实现原理:通过创建一个系统快照,进行遍历所有的进程名称。通过比对进程

名称,来获取进程的PID值。

夺取应用程序的 “制空权”:内存数据

功能:获取正在运行进程的指定模块的基地址数据。

实现步骤:通过PEB获取进程所加载的模块。

1、获取正在运行指定进程的_PEB结构。

2、通过_PEB的Ldr成员获取_PEB_LDR_DATA结构。

3、通过_PEB_LDR_DATA的InMemoryOrderModuleList成员获取_LIST_ENTRY结构。

4、通过_LIST_ENTRY的Flink成员获取_LDR_DATA_TABLE_ENTRY结构,注意:这里的Flink指向的是_LDR_DATA_TABLE_ENTRY结构中的InMemoryOrderLinks成员,因此需要计算真正的_LDR_DATA_TABLE_ENTRY起始地址。

5、输出_LDR_DATA_TABLE_ENTRY的BaseDllName或FullDllName成员信息。

夺取应用程序的 “制空权”:内存数据 夺取应用程序的 “制空权”:内存数据

功能:获得到整个进程的内存数据

实现步骤:

1、打开要操作的指定进程,并获取进程的句柄。

2、通过读取PE文件结构方式,进行读取正在运行的内存数据:

    DosHeader->NtHeader->区段表。

3、将读取到的内存数据,写入到文件。

夺取应用程序的 “制空权”:内存数据 夺取应用程序的 “制空权”:内存数据

知识清单

PE结构概述

PE(Portable Execute)文件,它是Windows下可执行文件的总称,也是windows系统下标准的文件格式。

在window系统上常见的后缀为DLL,EXE,OCX,SYS等文件都是属于PE文件。但事实上,一个文件是否是PE文件与其扩展名无关,PE文件可以是任何扩展名。

PE文件结构概括起来就是:它主要由 “头”(DOS头,NT头,可选头)和“节”(text节,data节)组成。

在代码中去实现,判断一个可执行文件,是否是PE文件结构。主要有两个判断:

1.DOS头的魔法值字段是否是 “MZ” ,也就是 0x5A4D 值。

2.NT头的签名字段信息是否是 “PE00” ,也就是 0x00004550 值。

下图是一个标准PE文件结构图

夺取应用程序的 “制空权”:内存数据

PEB结构概述

PEB结构(Process Envirorment Block Structure):进程环境信息块。

PEB:它主要是用于存放进程信息,每个进程都有属于自己的PEB信息。

PEB:它位于用户地址空间。

调用系统未导出函数方法

1.ReadProcessMemory函数

夺取应用程序的 “制空权”:内存数据

2. _LIST_ENTRY结构

夺取应用程序的 “制空权”:内存数据

3. _PEB_LDR_DATAS结构

夺取应用程序的 “制空权”:内存数据

4. _LDR_MODULE 结构

夺取应用程序的 “制空权”:内存数据

相关文章

  • 夺取应用程序的 “制空权”:内存数据

    技术背景 在病毒查杀,应用安全对抗,静态逆向应用,动态逆向应用,最重要的对象就是,应用程序的内存数据。 病毒查杀对...

  • 堆区、栈区的区别

    栈和堆 应用程序在运行的过程中,应用程序保存的数据都保存内存中,不同数据类型的数据保存的内存区域不同。 栈:具有先...

  • iOS程序的内存分配(栈区、堆区、全局区)

    应用程序在运行过程中,应用程序的数据都保存在内存中,不同类型的数据,保存的内存区域不同。 栈区 栈区(stack)...

  • 3. Spring Boot SQL Databases

    说明 嵌入式数据库使用内存中的嵌入式数据库开发应用程序通常很方便。显然,内存数据库不提供持久存储。您需要在应用程序...

  • 013-内存分析(内存泄露)

    应用程序可以访问的用户内存空间,由只读段、数据段、堆、栈以及文件映射段等组成。其中,堆内存和内存映射,需要应用程序...

  • 2018-04-16

    在计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存的内存区域不同。 一、内存分区 栈区(...

  • iOS程序中的内存分配 栈区堆区全局区

    在计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存的内存区域不同。 一、内存分区 栈区(...

  • iOS中的内存分配(栈区、堆区、全局区)

    在计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存的内存区域不同。 一、内存分区 栈区(...

  • 编码篇-iOS程序中的内存分配 栈区堆区全局区等相关知识

    前言 在计算机的系统中,运行的应用程序中的数据都是保存在内存中,不同类型的数据,保存的内存区域不同。内存区域大致可...

  • 理解循环引用是怎么产生的

    一、 内存区域划分 在计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存在不同的内存区域中...

网友评论

      本文标题:夺取应用程序的 “制空权”:内存数据

      本文链接:https://www.haomeiwen.com/subject/ccvxrrtx.html