恶意代码分析系列-几种常用技术(1)

简介: 恶意代码分析系列-几种常用技术(1)

开发环境和工具


环境: Windows10x641909

开发工具和语言: VS2017 C/C++

以下内容都是debug版本


介绍


最近一种在分析恶意样本,对于各种恶意代码的行为特征和运行机制有了一些总结,抱着知己知彼才能百战百胜的态度,重新梳理一下分析时遇到的一些恶意代码的技术的手段,从一个病毒的释放、注入、隐藏和免杀等过程采用的思路和实现方法出发来进一步刨析这些代码的原理,在今后的分析中对于细节才能更加的得心应手,下面先介绍常见的和释放有关的手段。


单一实例运行


这个在分析的两个勒索病毒都有发现,起先会检查自己是否在运行,在开始的时候都使用了一个函数

WINAPI
CreateMutexA(
    _In_opt_ LPSECURITY_ATTRIBUTES lpMutexAttributes,     // 指向安全属性指针,可以为null
    _In_ BOOL bInitialOwner,                  // 初始化互斥体对象的所有者
    _In_opt_ LPCSTR lpName                  // 指向互斥体对象名称指针
    );


需要注意的是,使用 CreateMutex()创建的互斥体对象名称不能与现有的事件、信号量、或者文件映射对象名称相同,否则互斥体对象会创建失败。


资源释放


很多的木马程序会使用资源释放的技术,这样可以让一些额外的 DLLEXE、文本和图片等文件作为资源插入到程序里面,等到程序正式运行的时候再把他们释放到本地上,这样编译出的只有一个exe文件,降低了被发现的风险。


关键API函数


// 发现资源
HRSRC
WINAPI FindResource(
    _In_opt_ HMODULE hModule,    // 模块名称
    _In_ LPCWSTR lpName,         // 指定资源名称
    _In_ LPCWSTR lpType          // 资源类型
    );
// 获取资源大小
DWORD
WINAPI SizeofResource(
    _In_opt_ HMODULE hModule,
    _In_ HRSRC hResInfo
    );
// 加载资源
HGLOBAL
WINAPI LoadResource(
    _In_opt_ HMODULE hModule,    // 模块名称
    _In_ HRSRC hResInfo          // 资源句柄
    );
// 锁定资源字节
LPVOID
WINAPI LockResource(
    _In_ HGLOBAL hResData
    );
// 其它详细的函数信息可以参见MSDN文档


实现原理


  1. 通过 FindResource定位程序里的资源,通过资源类型和资源名称来定位
  2. 通过 SizeofResource获取资源的大小之后再通过 LoadResource把资源加载到程序内存中
  3. 最后使用 LockResource锁定加载到内存中的资源防止程序的其它操作影响这块内存,其中返回值就是资源在进程内存中的起始地址


DLL延迟加载


DLL延迟加载是在正式调用 DLL的时候,才会加载 DLL文件,这样在正式调用 DLL前,都是可以正常执行的,只需要在VS的开发环境设置链接器即可完成,


下面以测试程序为例:


fe369d5a54438709bef1f4e9eb44b3d5_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


在VS的链接器中编辑 ucrtbased.dll,重新生成


72aed0f86ea805ed1d208820d402f71a_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


再次查看发现这个 DLL已经不见了,延迟载入成功



如果通过编码来实现,它的字段是在PE文件NT头中的 DataDirectory—> IMAGE_DIRECTORY_ARRY,具体的编码这里就不演示了。


0291fe36f6b2d6227b738a7aa867fb71_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


启动方法


按照常规的步骤在将资源中的程序释放出来后会启动它,下面是常见的几种启动方式


函数 WinExec


UINT
WINAPI
WinExec(
    _In_ LPCSTR lpCmdLine,  // 要执行的程序的命令行
    _In_ UINT uCmdShow      // 显示选项
    );


函数 ShellExecute


HINSTANCE ShellExecuteW(
    _In_opt_ HWND hwnd,           // 父窗口句柄
    _In_opt_ LPCWSTR lpOperation, // 要执行的操作:edit、explore、find、open等
    _In_ LPCWSTR lpFile,          // 指向shell名称空间对象
    _In_opt_ LPCWSTR lpParameters,// 指向一个可执行文件
    _In_opt_ LPCWSTR lpDirectory, // 指向默认操作的目录
    _In_ INT nShowCmd);           // 打开窗口如何显示 SW_HIDE


函数 CreateProcess


BOOL
WINAPI
CreateProcessW(
    _In_opt_ LPCWSTR lpApplicationName,   // 执行模块名可以为 NULL
    _Inout_opt_ LPWSTR lpCommandLine,     // 执行命令行可以为NULL
    _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, // 进程安全属性指针
    _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,  // 线程安全属性指针
    _In_ BOOL bInheritHandles, 
    _In_ DWORD dwCreationFlags,     // 控制优先级和创建进程标志
    _In_opt_ LPVOID lpEnvironment,  // 指向新进程的环境块的指针
    _In_opt_ LPCWSTR lpCurrentDirectory,  // 指向进程当前目录的完整路径
    _In_ LPSTARTUPINFOW lpStartupInfo,    // STARTUPINFOW结构指针
    _Out_ LPPROCESS_INFORMATION lpProcessInformation // PROCESS_INFORMATION结构的指针
    );

使用这些 API主要就是对参数的理解,例如 WinExecShellExecute函数设置位 SW_HIDE方式可以隐藏程序窗口,并且成功隐藏执行 CMD命令行的窗口。


总结


上面是罗列了几种常规的恶意代码常用手段,在分析的时候看到这些 API就应该有所警觉了,不过这是一些最基本的手段,在下一篇注入篇会继续探讨稍微有点难度的东西,总结常见的注入手段。


参考:《Windows黑客编程技术详解》、《黑客大曝光》


相关文章
|
5月前
|
安全 JavaScript 前端开发
Web安全-逻辑错误漏洞
Web安全-逻辑错误漏洞
38 1
|
7月前
|
SQL API Python
`bandit`是一个Python静态代码分析工具,专注于查找常见的安全漏洞,如SQL注入、跨站脚本(XSS)等。
`bandit`是一个Python静态代码分析工具,专注于查找常见的安全漏洞,如SQL注入、跨站脚本(XSS)等。
|
8月前
|
安全 前端开发 Java
代码审计-Java项目&Filter过滤器&CNVD分析&XSS跨站&框架安全
代码审计-Java项目&Filter过滤器&CNVD分析&XSS跨站&框架安全
|
SQL 安全 测试技术
常见的Web安全漏洞有哪些,Web安全漏洞常用测试方法介绍
常见的Web安全漏洞有哪些,Web安全漏洞常用测试方法介绍
407 0
|
安全 API Windows
恶意代码分析系列-几种常用技术(2)
恶意代码分析系列-几种常用技术(2)
|
安全 API 数据库
恶意代码分析系列-几种常用技术(3)
恶意代码分析系列-几种常用技术(3)
|
存储 算法 安全
​恶意代码之静态分析
​恶意代码之静态分析
|
SQL 安全 测试技术
[网络安全]SQL注入原理及常见攻击方法简析
一般而言,登录验证逻辑语句为: select * from 表名 where name(用户名)='$输入' and pass(密码)='$输入' 当数据表中同时存在输入的name和pass字段时,页面将回显登录成功。
876 0
|
Java
[恶意代码分析]恶意代码种类以及分析环境介绍
[恶意代码分析]恶意代码种类以及分析环境介绍
440 1
[恶意代码分析]恶意代码种类以及分析环境介绍
|
SQL 存储 安全
web渗透之sql注入
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。黑客通过SQL注入攻击可以拿到网站数据库的访问权限,之后他们就可以拿到网站数据库中所有的数据,恶意的黑客可以通过SQL注入功能篡改数据库中的数据甚至会把数据库中的数据毁

热门文章

最新文章