一.初识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体系结构
这里我们主要了解一下内存结构
明天开始学习x86的指令合集