逆向工程第一本书--恶意代码分析实战--day1

一.初识windows静态分析

1.常见DLL程序

Kernel32.dll

这是一个很常见的DLL,它包含核心系统功能,如访问和操作内存,文件和硬件等等

Advapi32.dll

这个DLL提供了对核心Windows组件的访问,比如服务管理器和注册表

User32.dll

这个DLL中包含了所有用户界面组件,如按钮,滚动条以及控制和响应用户操作的组件

Gdi32.dll

这个DLL中包含了图形显示和操作的函数

Ntdll.dll

这个DLL是Windows内核的接口。可执行文件通常不直接导入这个函数,而是由Kernel32.dll间接导入,如果一个可执行文件导入了这个文件,这意味着作者企图使用那些不是正常提供给Windows程序使用的函数。一些如隐藏功能和操作进程等任务使用这个接口

Wsock32.dll和Ws2_32.dll

这两个是联网DLL,访问其中任一个DLL的程序非常可能连接网络,或是执行网络相关的任务

Wininet.dll

这个DLL包含了更高层次的网络函数,实现了如FTP、HTTP、NTP等协议

2.PE文件头和分节

.text

包含可执行代码

.rdata

包含程序中全局可访问的只读数据

.data

存储程序中都可以访问的全局变量

.idata

有时会显示和存储导入函数信息,如果这个节不存在时,导入函数信息会存储在.rdata节中

.edata

有时会显示和存储导出函数信息,如果这个节不存在时,导出函数信息会存储在.rdata节中

.pdata

只在64位可执行文件中存在,存储异常处理信息

.rsrc

存储可执行文件所需的资源

.reloc

包含用来重定位库文件的信息

3.PE文件头概述

信息域

揭示的信息

导入函数

恶意代码使用了那些库中的哪些函数

导出函数

恶意代码期望被其他程序或库中所调用的函数

时间戳

程序是在什么时候被编译的

分节

文件分节的名称,以及它们在磁盘与内存中的大小

子系统

指示程序是一个命令行还是图形界面应用程序

资源

字符串,图标,菜单项和文件中包含的其他信息

主要了解这一部分的知识,课后实验部分(附大佬项目):

GitHub - Vxer-Lee/MalwareAnalysis: 恶意代码分析实战系列文章

二.x86反汇编

1.代码层次示例

微指令:微指令层又称为固件(fireware)。微指令只能在为它设计的特定电路上执行。这层由一些微指令构成,它们从更好的机器码层翻译而来

机器码:机器码层由操作码(code)组成,操作码是一些十六进制形式的数字,用于告诉处理器你想要它做什么

低级语言:低级语言是计算机体系结构指令集的人类易读版本,主要是汇编语言。

高级语言:大部分程序员使用高级语言。高级语言对机器层做了很强的抽象,从而可以很轻松地使用程序逻辑和流控制机制。

解释型语言:解释型语言位于最高层。例如C#,Per, .NET,Java等,这一层的代码不会被编译成机器码,而是被编译成了字节码。字节码(bytecode)是特定于该语言的一种中间表示,他在解释器中执行。解释器(interpreter)是一个在运行时将字节码实时翻译成可执行机器码的程序。

2.x86体系结构

这里我们主要了解一下内存结构

逆向工程第一本书--恶意代码分析实战--day1_第1张图片

明天开始学习x86的指令合集

你可能感兴趣的:(逆向,windows)