逆向工程之Windows Software(一)

免责声明

本文仅作为科学研究之用,不作为任何形势下违反本地区法律法规、道德标准之依据。我们提倡在反编译任何软件之前,都要先进行合法性检查。

用处

  • 安全漏洞及威胁检测分析
  • DIY应用(版权保护范围内)
    • 新增功能
    • 自定义软件界面
    • 提高软件兼容性

工具

Disassemblers

Disassemblers(反编译程序)是将可执行文件转换为汇编语言的程序。目前最受欢迎的反编译程序为IDA Pro

IDA Pro

IDA Pro

是目前最棒的一个静态反编译软件,为众多0day世界的成员和ShellCode安全分析人士不可缺少的利器!IDA Pro是一款交互式的,可编程的,可扩展的,多处理器的,交叉Windows或Linux WinCE MacOS平台主机来分析程序, 被公认为最好的花钱可以买到的逆向工程利器。IDA Pro已经成为事实上的分析敌意代码的标准并让其自身迅速成为攻击研究领域的重要工具。它支持数十种CPU指令集其中包括Intel x86,x64,MIPS,PowerPC,ARM,Z80,68000,c8051等等。

Radare

Radare

Radare是一款开放源代码的逆向工程平台,它的强大超越你的想象,包括反汇编、分析数据、打补丁、比较数据、搜索、替换、虚拟化等等,同时具备超强的脚本加载能力,并且可以运行在几乎所有主流的平台(GNU/Linux, .Windows *BSD, iOS, OSX, Solaris…)上。

Windows Sysinternals

Windows Sysinternals通常用于管理,诊断,故障排除和监视Microsoft Windows环境。但是它们也适用于反向工程Windows软件。

TCPView

tcpview是一个网络嗅探器,它显示来自所有进程的有关TCP / UDP数据包的所有信息。

PortMon

用来监听上下位机串口相关操作,并截获收发数据的串口工具。不占用串口资源。

WinObj

WinObj是一个32位Windows NT程序,它使用本机Windows NT API(由NTDLL.DLL提供)来访问和显示NT对象管理器的名称空间上的信息。

Network monitoring tools

Wireshark

Wireshark

Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。

Fiddler

Fiddler

Fiddler是一个http调试代理,它能够记录所有的你电脑和互联网之间的http通讯,Fiddler 可以也可以让你检查所有的http通讯,设置断点,以及Fiddle 所有的“进出”的数据(指cookie,html,js,css等文件,这些都可以让你胡乱修改的意思)。 Fiddler 要比其他的网络调试器要更加简单,因为它仅仅暴露http通讯还有提供一个用户友好的格式。

API Monitor

API Monitor

API Monitor是一款功能十分强大、并且非常实用的API调用监控软件,使用可帮助用户监视和显示应用程序进行的Win32 API调用,还可跟踪任何导出的API,包括win32 API和其他第三方API,不需要知道函数的原型。

Debuggers

对于开发人员来说,调试器是开发中必不可少的工具。

目前最受欢迎的调试器是OllyDbg, WinDbg和Windbg Preview。

OllyDbg

OllyDbg

当涉及软件逆向工程时,OllyDbg(及其后继x64dbg)可能是最好的调试器。它是专门为满足逆向需求而开发的,并且具有用于此目的的所有功能:

  • 内置的反汇编程序,能够分析和识别关键数据结构
  • 导入和导出分析功能
  • 内置的编写引擎

解析API函数及其参数的能力使逆向与系统的交互更容易。堆栈视图提供了有关调用堆栈的很多信息。另一个重要的优点是,您可以在受调试保护的应用程序中使用OllyDbg,而通常的调试器却没有办法。

WinDbg

WinDbg

尽管界面简单,但WinDbg具有强大的调试工具。它具有内置的反汇编程序,各种命令,它几乎可以满足有关要调试的进程/系统的所有信息要求,并且可以执行内核模式调试,这可能是最有价值的功能。对于反编译驱动程序,尤其是内核级驱动程序,这是一个很大的优势。

Windbg Preview

Windbg Preview

Windbg Preview 版是Microsoft开发的Windbg的新版本。它可以通过Windows应用商店获取。它具有经典Windbg的所有功能以及新的UI和一些新功能。比如Time Travel Debugging。

简单逆向工程示例

假如有一个可疑的可执行文件。你需要了解该程序的功能以及对用户而言是否安全。

考虑到这种情况,最好不要直接在工作计算机上运行此可执行文件,而要使用虚拟机,在虚拟机中测试此程序。

流程创建服务

如上所示,此文件创建一个名为TestDriver的Windows服务。继续使用Sysinternals Suite中的ProcessMonitor进行监控。当打开ProcessMonitor时,我们可以设置过滤器以仅向我们显示感兴趣的流程中的文件活动。其活动日志如下所示:

FileMon信息

驱动程序运行文件该程序运行过程中创建的,该过程将该文件放置在用户的temp目录中。无需在temp文件夹中查找文件,因为我们看到该程序在使用后立即将其删除。那么该文件做了什么呢?我们使用 Resource Hacker 提取文件并在反编译程序中将其打开:

Disassembler

众所周知,DriverEntry是Windows系统中驱动程序加载的入口函数,因此我们可以知道这是驱动程序。

对驱动程序进行逆向工程

要对驱动程序进行逆向工程,我们逐一检查从DriverEntry调用的函数。如果查看sub_14005,并没有发现可用的信息,而我们转向sub_110F0可以找到以下代码:

代码段1

代码段1

 

代码段2

代码段2

 

代码段3

代码段3

 

代码段4

代码段4(别看了没有5)

在代码段1中,创建了一个unicode字符串,该字符串指向路径C:\\hello.txt。之后,结构OBJECT_ATTRIBUTES将填充常规值;我们知道在调用ZwCreateFile之类的函数时通常需要这样。

在代码段2中,我们看到确实调用了ZwCreateFile,此时我们已经非常确定驱动程序已创建文件,并且我们知道该文件在创建之后的位置。

从代码段3和代码段4中,我们可以看到驱动程序采用unicode字符串并将其写入缓冲区(这将在sub_11150  函数中执行  ),然后将使用ZwWriteFile函数将缓冲区写入文件。最后,驱动程序使用ZwClose API 关闭文件。

综上,我们可以得知原始程序从其资源中提取了驱动程序文件,将其放置在 当前用户的  temp文件夹中,为该驱动程序创建Windows服务,然后运行它。之后,程序将停止并从temp  目录中删除服务和原始驱动程序文件。由此看来,驱动程序除了在C盘上创建一个名为hello.txt的文件并写入字符串“ Hello from driver”之外,什么都不做。

现在运行程序并检查C盘:

查看该程序创建的文件

果然,程序在C盘创建了一个内容为“Hello from driver”的txt文件,现在我们可以知道它可以被安全地使用。

 

点赞
  1. 周松松博客说道:

    大神

  2. 智库说道:

    学习了 好多都没用过 太厉害了

发表回复

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