OpenArk(open Anti-Rootkit) 恶意程序分析工具包

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

openark简介

OpenArk是一款Windows平台上的开源Ark工具. Ark是Anti-Rootkit(对抗恶意程序)的简写, OpenArk目标成为逆向工程师、编程人员的工具,同时也能为那些希望清理恶意软件的用户服务。以后也将会支持更多功能和命令。

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

功能

  • 进程 – 查看进程、线程、模块、句柄、内存、窗口等信息,还有进程注入等功能。
  • 内核 – 系统内核工具,例如:内存管理、驱动、热键、回调、过滤驱动、存储、IDT/SDT/NDIS/WFP等功能。
  • 编程助手 – 程序员的工具箱。
  • 扫描器 – PE/ELF文件解析器,以后会变成病毒分析助手。
  • 捆绑器 – 目录和多个程序可以捆绑成一个exe程序,同时支持脚本。
  • 实用工具 – 垃圾清理功能、系统工具等等。
  • 逆向工具 – 精心挑选了许多有用的小工具,这些和OpenArk既有功能互补,高效率,我们一直在思考。
  • 控制台 – 这里有很多有用的命令。
  • 语言 – 目前支持中文和英文,以后会支持更多。
  • 更多强大的功能正在开发中。。。
OpenArk(open Anti-Rootkit) 恶意程序分析工具包

发布

  • 程序:独立的exe,无DLL依赖,支持32位、64位。
  • 支持系统:Windows XP … Win7 … Win10 20H2 …

编译

参与/捐赠

  • 欢迎提交Issue和PR.
  • 如果你喜欢OpenArk,可以捐赠支持我们的开发工作。
  • OpenArk 代码风格
OpenArk(open Anti-Rootkit) 恶意程序分析工具包
OpenArk(open Anti-Rootkit) 恶意程序分析工具包
OpenArk(open Anti-Rootkit) 恶意程序分析工具包

OpenArk下载地址

GitHub:

云中转网盘:

yunzhongzhuan.com/#sharefile=b5ZxEn8q_146555
解压密码:
www.ddosi.org

OpenArk使用手册

openark.blackint3.com/manuals/

查看被占用的系统热键

介绍

经常会遇到系统热键/快捷键被占用,但是不知道被谁占用。OpenArk现已加入可以枚举和摘除系统热键的功能,支持Win7/Win8/Win8.1/Win2012/Win2016/Win10 (~2004) x86/x64 Win7及以上所有版本)。

使用步骤
进入内核模式
  • 右下角进入内核模式,会安装驱动,如果杀毒软件提示,需放行。进入内核模式,安装驱动成功后会变为绿色。
OpenArk(open Anti-Rootkit) 恶意程序分析工具包
查看对应热键
  • 如图所示,热键可以排序,可以删除,定位等。
OpenArk(open Anti-Rootkit) 恶意程序分析工具包

注意:如果上面没获取对应的热键,请检查你输入法的快捷键(比如:微软拼音/搜狗/谷歌输入法等),因为输入法的快捷键是单独管理的,不在系统全局热键中。

解锁被占用的文件

介绍

经常会遇到文件或文件夹被占用,但是却不知道被谁占用着,故OpenArk加入了类似Unlocker(老一代软件)的文件解锁功能,能够快速地帮用户解决文件占用问题。

使用步骤
进入内核模式
  • 右下角进入内核模式,会安装内核驱动,如果杀毒软件提示,需放行。进入内核模式成功后会变为绿色。
OpenArk(open Anti-Rootkit) 恶意程序分析工具包
输入文件路径
  • 左下角中输入文件路径,其中路径支持模糊匹配,不区分大小写。
OpenArk(open Anti-Rootkit) 恶意程序分析工具包
解锁文件
  • 按回车键或点击”查看占用”,界面就会列出匹配到的被占用项目,展示相关进程、文件路径、文件句柄、文件对象、模块地址等信息。
  • 其中展示结果分为两种类型,一种是FILE类型,表示是文件被其他程序打开占用;另外一种是DLL类型,表示DLL类型的文件被其他程序加载占用。
  • 获得结果之后,可以使用右键菜单或者右下角的功能按钮进行操作。
OpenArk(open Anti-Rootkit) 恶意程序分析工具包

由于某些程序的自身实现逻辑,解锁某些文件后,会导致该程序退出;另外有时候结束相关的进程也许不够优雅,但是却是一种比较实用的方式。

查看PE文件结构

介绍

PE文件是Windows下的可执行程序,与之对应的是Linux下的ELF,macOS下的Mac-O,都是遵从COFF结构标准,两个基本要素是:头Header + 区段(Section),头是属于Meta数据,区段是具体内容。

PE文件结构大致如下图所示:

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

使用方法

  • 可从进程列表或模块列表,右键Sendto Scanner
  • 可在Scanner标签页上,直接打开PE
  • 直接拖动PE文件到窗口中(内置管理员模式)
OpenArk(open Anti-Rootkit) 恶意程序分析工具包

查看基本信息

这里可看到PE文件的大小、版本、描述、编译时间、PDB、编译器等信息。

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

查看DOS头

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

查看PE头

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

查看区段表

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

查看导入表

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

查看导出表

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

查看重定位表

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

查看调试目录

SymbolID和windbg的下载符号路径是一致的。

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

其他信息(资源/延迟绑定等等)

[TODO] OpenArk查看功能后续会更新。

查看RVA

RVA = 偏移地址VA – 基址ImageBase, R即是Relative(相对)。

这里的Rebase常在使用IDA和Windbg时,ASLR导致的基址重定位,用于临时转换。

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

制作一个捆绑程序

介绍

捆绑程序是将一个或多个程序绑定成一个独立的exe,避免依赖的文件(如DLL)过多而影响传输/存储,常用于一些恶意软件。 OpenArk的Bundler即是这样一个功能,支持文件以及文件夹等捆绑成一个exe,同样支持脚本。

制作步骤

准备要捆绑的文件

这里我们选了winhex(一款流行的编辑器),把它们放入文件夹中,命名shadow

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

winhex 17.2 SR-6目录是winhex安装后的文件夹

shadow.bat (用于测试)

@echo off
echo shadow BAT running
pause>nul

shadow.vbs (用于测试)

msgbox "shadow VBS running"
选择文件,编写脚本
  • 选择该shadow文件夹(Open Folder),可以拖动文件夹到程序中(默认管理员)
OpenArk(open Anti-Rootkit) 恶意程序分析工具包
  • 写入要执行的脚本:
cmd net user shadow 123 /add     //添加一个用户shadow
start cmd /c %root%\shadow.bat   //执行测试的bat
start wscript %root%\shadow.vbs  //执行测试vbs
call %root%/./winhex 17.2 SR-6/WinHex.exe  //启动winhex
clean //清理释放后的文件
  • 选择捆绑后程序的图标

在列表里找到winhex.exe,直接右键 Use this ICON,或者Select ICON选择一个图标(exe/ico皆可)。

  • 生成捆绑程序

Save to 保存到exe即可,例如Winhex.exe。

OpenArk(open Anti-Rootkit) 恶意程序分析工具包
测试程序

运行程序前,先使用OpenArk的命令工具,输入.cmd net user查看当前用户列表。

OpenArk(open Anti-Rootkit) 恶意程序分析工具包
OpenArk(open Anti-Rootkit) 恶意程序分析工具包

运行程序,结果如图:

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

此时,再来看我们cmd添加用户,发现已经shadow用户已经成功添加:

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

OpenArk的捆绑器Bundler是一个通用的功能,同时也在不断完善,读者可自行测试。

时间戳转换

使用命令.ts,查看说明:

C:\>.help .ts
.ts - show unix timestamp
.ts 1234566/0n22222/0x431203BC [show timestamp]

获取当前时间戳

C:\>.ts
1560134527

时间戳转换

C:\>.fmt 0n1560134527
HEX: 5CFDC37F

C:\>.ts 0x5CFDC37F
2019-06-10 10:42:07

查看文字编码

介绍

文字编码种类繁多,常见的是ASCII、UTF-8、UTF-16、GBK、BIG5等。对于汉化人员或者经常遇到乱码的开发人员来说,查看文字编码显得尤为重要。本文介绍OpenArk查看文字编码的功能,能通过十六进制互相转换。

查看英文编码

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

查看中文编码

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

查看窗口消息ID

查看消息处理过程函数原型,窗口消息ID即是uMsg,通常我们逆向分析跟踪消息处理过程时经常会用到。

LRESULT CALLBACK WindowProc(
  _In_ HWND   hwnd,
  _In_ UINT   uMsg,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);

查看所有消息ID,可通过.msg命令。

OpenArk(open Anti-Rootkit) 恶意程序分析工具包
OpenArk(open Anti-Rootkit) 恶意程序分析工具包

查看.msg使用说明:

C:\>.help .msg
.msg - show window message id
.msg [show message id list]
.msg -name button [show message name matched *button*, eg:WM_LBUTTONDOWN...]
.msg -id 201/0x201/0n513 [implies WM_LBUTTONDOWN]

搜索某类消息,则可输入.msg -name button,模糊匹配

C:\>.msg -name button
0x00A1 (161) WM_NCLBUTTONDOWN
0x00A2 (162) WM_NCLBUTTONUP
0x00A3 (163) WM_NCLBUTTONDBLCLK
0x00A4 (164) WM_NCRBUTTONDOWN
0x00A5 (165) WM_NCRBUTTONUP
0x00A6 (166) WM_NCRBUTTONDBLCLK
0x00A7 (167) WM_NCMBUTTONDOWN
0x00A8 (168) WM_NCMBUTTONUP
0x00A9 (169) WM_NCMBUTTONDBLCLK
0x0122 (290) WM_MENURBUTTONUP
0x0201 (513) WM_LBUTTONDOWN
0x0202 (514) WM_LBUTTONUP
0x0203 (515) WM_LBUTTONDBLCLK
0x0204 (516) WM_RBUTTONDOWN
0x0205 (517) WM_RBUTTONUP
0x0206 (518) WM_RBUTTONDBLCLK
0x0207 (519) WM_MBUTTONDOWN
0x0208 (520) WM_MBUTTONUP
0x0209 (521) WM_MBUTTONDBLCLK

也可通过值反查名称

C:\>.msg -id 0x201
0x0201 (513) WM_LBUTTONDOWN

系统错误值查看

可使用图形化工具,也可使用.err命令.

图形化工具:

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

查看.err命令使用说明:

C:\>.help .err
.err - show LastError or NTSTATUS
.err 2 [show LastError]
.err -s c0000034 [show NTSTATUS]

查看LastError

C:\>.err 2
系统找不到指定的文件。

查看NTSTATUS

C:\>.err -s c0000022
拒绝访问。

进制转换

值修饰前缀和Windbg保持一致。
二进制:0y    (BIN)
八进制:0t    (OCT)
十进制:0n    (DEC)
十六进制:0x  (HEX)
默认值:针对不同命令可能不一致,如.ps 和 .wnd具体查看对应命令的使用说明

.fmt使用帮助:

C:\>.help .fmt
.fmt - show value formats, default radix is 16(hex)
.fmt 0x400/0n1024 [Hex(0x),Dec(0n),Oct(0t),Bin(0y)]
C:\>.fmt 123
HEX: 123
DEC: 291
OCT: 443
BIN: 00000001 00100011
STR: ..

16进制

C:\>.fmt 0x123
HEX: 123
DEC: 291
OCT: 443
BIN: 00000001 00100011
STR: ..

10进制

C:\>.fmt 0n123
HEX: 7B
DEC: 123
OCT: 173
BIN: 01111011
STR: {

8进制

C:\>.fmt 0t123
HEX: 53
DEC: 83
OCT: 123
BIN: 01010011
STR: S

2进制

C:\>.fmt 0y01010111
HEX: 57
DEC: 87
OCT: 127
BIN: 01010111
STR: W

进程管理

创建进程Dump

Dump介绍

Dump文件是进程或系统的快照,对于进程Dump来说,里面包含进程的各种信息,主要包括异常信息、模块、内存信息、句柄、线程等可选信息。Linux上与之对应的是Core文件。

Dump又分Minidump和Fulldump,Minidump文件小,信息量少,便于传输。Fulldump文件大,信息量多,不便传输。根据实际情况选择即可,遵从够用原则。

分析工具

Windows上一般使用Windbg,Linux一般使用gdb,对于Linux的Core文件来说几乎是内存VMA信息,里面含有的元信息极少,因此多数发行版如CentOS都会有自己的Dump程序,保存LWP状态、fd等信息。Windows下的Dump这些信息基本上很全,可使用API MiniDumpWriteDump 通过参数设置。

进程Dump实例

使用OpenArk,选定进程,右键创建Dump,可选Fulldump或Minidump,一般进程内存使用不多的情况下,Dump都选Fulldump。

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

定位进程文件

进程列表中选择进程,右键Explore File,或者使用快捷键Ctrl + L,即可定位到进程文件路径。

批量结束进程

批量结束进程跟查找进程参数基本一致,仅多了结束进程动作。

使用命令:

.ps -kill -name <进程名模糊匹配>
.ps -kill -path <进程路径模糊匹配>
.ps -kill -pid <进程ID,逗号分隔>

查看内存信息

使用命令.mm 可查看内存信息:

C:\>.help .mm
.mm - show memory information
.mm [show os memory]
.mm -pid 1234 [show process pid=1234 memory information]

查看系统内存使用:

C:\>.mm
PageSize : 4096 B
Memory Usage : 89.11%
-------------------------------------------
CommitTotal : 14.28 GB (14625.38 MB)
CommitLimit : 21.40 GB (21918.15 MB)
CommitPeak : 15.58 GB (15955.36 MB)
-------------------------------------------
PhysicalTotal : 15.95 GB (16337.25 MB)
PhysicalAvailable : 1.74 GB (1778.73 MB)
-------------------------------------------
KernelTotal : 0.94 GB (966.70 MB)
KernelPaged : 0.74 GB (756.39 MB)
KernelNonpaged : 0.21 GB (210.31 MB)
SystemCache : 2.90 GB (2964.89 MB)

查看进程内存使用:

C:\>.mm -pid 488
Working set : 5.48 MB
WS Private : 1.59 MB
Private : 1.91 MB
PeakWorkingSet : 5.55 MB
PageFaultCount : 1875
-------------------------------------------
QuotaPagedPoolUsage : 0.11 MB
QuotaNonPagedPoolUsage : 0.02 MB
QuotaPeakPagedPoolUsage : 0.12 MB
QuotaPeakNonPagedPoolUsage : 0.02 MB
-------------------------------------------
PagefileUsage : 1.91 MB
PeakPagefileUsage : 2.28 MB

查看进程基本信息

进程列表中选定进程,双击或者Ctrl + P查看Properties,如下图所示:

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

属性中可看到进程路径、命令行参数、父进程信息、用户名、进程启动时间、版本描述等信息。

查看进程窗口

在进程列表双击(或者右键查看Properties),选择WindowList,如下:

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

也可通过命令操作,查看.wnd使用说明:

C:\>.help .wnd
.wnd - show window information
.wnd [show system window list]
.wnd -title Worker [show window title name matched *Worker*]
.wnd -class Worker [show window class name matched *Worker*]
.wnd -hwnd 778BC/0x778BC/0n489660 [show HWND=778BC window information]
.wnd -pid 8880 [show process pid=8880 window list]
out: [hwnd] [parent hwnd] [title] [class] [pid.tid] [process name]

查看某个进程的窗口:

C:\>.wnd -pid 0n7736
000102F8 000102EE [] [ApplicationFrameTitleBarWindow] [1E38.2A50] explorer.exe
000102F6 000102EE [] [ApplicationFrameTitleBarWindow] [1E38.2A50] explorer.exe
000102FA 000102EE [] [ApplicationFrameInputSinkWindow] [1E38.2A50] explorer.exe
000102DE 000202D4 [] [ApplicationFrameTitleBarWindow] [1E38.2A2C] explorer.exe
000102DC 000202D4 [] [ApplicationFrameTitleBarWindow] [1E38.2A2C] explorer.exe
000102E0 000202D4 [] [ApplicationFrameInputSinkWindow] [1E38.2A2C] explorer.exe
000102CA 000202BA [] [ApplicationFrameTitleBarWindow] [1E38.2A08] explorer.exe
000102C8 000202BA [] [ApplicationFrameTitleBarWindow] [1E38.2A08] explorer.exe
000102CC 000202BA [] [ApplicationFrameInputSinkWindow] [1E38.2A08] explorer.exe
000102AC 000302A2 [] [ApplicationFrameTitleBarWindow] [1E38.29DC] explorer.exe
000102AA 000302A2 [] [ApplicationFrameTitleBarWindow] [1E38.29DC] explorer.exe
000102AE 000302A2 [] [ApplicationFrameInputSinkWindow] [1E38.29DC] explorer.exe
00010292 00020286 [] [ApplicationFrameTitleBarWindow] [1E38.297C] explorer.exe
00010290 00020286 [] [ApplicationFrameTitleBarWindow] [1E38.297C] explorer.exe
00010294 00020286 [] [ApplicationFrameInputSinkWindow] [1E38.297C] explorer.exe
00020060 00020038 [] [ApplicationFrameTitleBarWindow] [1E38.25D0] explorer.exe
00030056 00020038 [] [ApplicationFrameTitleBarWindow] [1E38.25D0] explorer.exe
0002005E 00020038 [] [ApplicationFrameInputSinkWindow] [1E38.25D0] explorer.exe
00010188 00000000 [] [ForegroundStaging] [1E38.221C] explorer.exe
0001015C 00000000 [] [ForegroundStaging] [1E38.2110] explorer.exe
.....

也可根据标题和类名搜索系统中任意窗口

C:\>.wnd -title wo
0001022A 00010228 [Network Flyout] [ATL:00007FFF5E257230] [1E38.266C] explorer.exe
0002053E 000201F4 [UIRibbonWorkPane] [UIRibbonWorkPane] [0A98.0E78] explorer.exe

查看进程线程

在进程列表双击(或者右键查看Properties),选择Thread,如下:

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

属性中可看到线程数目、ID、用户态、内核态时间等信息。

模糊查找进程

使用命令:

.ps -name <进程名模糊匹配>
.ps -path <进程路径模糊匹配>
.ps -pid <进程ID,逗号分隔>

例如:使用.ps -name ls ,可以把匹配的进程列出来,如图所示:

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

例如:使用.ps -path c:\windows\syswow64 ,可以把匹配的进程列出来,如图所示:

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

通过PID选择进程

使用快捷键Ctrl + G,可输入进程ID(10进制或16进制)来定位进程,如下图所示:

OpenArk(open Anti-Rootkit) 恶意程序分析工具包

注入Dll到进程

创建进程

  • 打开64位计算器:C:/windows/system32/notepad.exe
  • 打开32位计算器:C:/windows/SysWOW64/notepad.exe

刷新进程列表能看到两个,*32 代表32位进程,反之。

编译测试Dll
  • 选择平台,分别编译64位(x64)和x86(32位)
  • 得到inject-demo.dll,可用OpenArk的FileScanner查看位数
OpenArk(open Anti-Rootkit) 恶意程序分析工具包
// dll inject demo source code
#include <Windows.h>
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved )
{
  switch (ul_reason_for_call) {
  case DLL_PROCESS_ATTACH: {

#ifdef _AMD64_
    // 64-bit dll
    MessageBoxW(NULL, L"x64 dll load ok", L"", MB_OK);
#else
    // 32-bit dll
    MessageBoxW(NULL, L"x86 dll load ok", L"", MB_OK);
#endif

    // current process exit
    exit(1);
    break;
  }
  case DLL_THREAD_ATTACH:
  case DLL_THREAD_DETACH:
  case DLL_PROCESS_DETACH:
    break;
  }
  return TRUE;
}

注入进程

  • 找到要注入的进程,例如注入64位模块到notepad.exe进程。
  • 可直接在进程右键菜单中选择 Inject Dll, 或者使用快捷键Ctrl + J
OpenArk(open Anti-Rootkit) 恶意程序分析工具包

当然,也可以使用命令来注入,进程ID用十进制表示,需要前缀0n,如下图所示:

OpenArk(open Anti-Rootkit) 恶意程序分析工具包
  • 注入成功后Console Window也会输出日志:
[+] inject pid:11248 path:"I:\demo\inject-demo64.dll" ok
  • Dll注入成功:
OpenArk(open Anti-Rootkit) 恶意程序分析工具包
  • 点击确定后,Dll会调用exit函数,记事本进程会自动退出。

总结

  • 本文讲解了如何使用OpenArk实现了32位、64位进程注入。
  • 一般地,使用32位Dll注入32位进程,64位Dll注入64位进程,如需了解更多,可搜索Windows WOW64机制。

官方链接

项目地址:

GitHub:
https://github.com/BlackINT3/OpenArk

转载请注明出处及链接

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注