Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863105279

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

Golang二进制文件的命令行Windows Windows API跟踪工具。

Note:此工具是POC,并且是在进行中的工作原型,因此请这样对待。总是欢迎反馈!

它如何工作?

虽然Golang程序对它们的构建方式和运行时的行为有很多细微差别,但它们仍然需要与OS层进行交互,这意味着在某个时候,他们确实需要从Windows API调用功能。

GO运行时软件包包含一个称为ASMSTDCALL的函数,此功能是一种用于与Windows API交互的“网关”。由于该功能可以调用Windows API函数,因此我们可以假设它需要访问信息,例如该功能的地址及其参数,这就是事物开始变得更加有趣的地方。

ASMSTDCALL接收一个单个参数,该参数指向与以下结构相似的东西的指针:

struct libcall {

dword_ptr addr;

dword argc;

dword_ptr argv;

dword_ptr returnValue;

[.]

}这些字段中的某些字段被填充后,称为API函数(例如返回值,Asmstdcall收到的返回值),例如函数地址,参数数量和参数列表。无论何时设置这些设置,很明显,ASMSTDCALL函数会操纵有关Golang编译程序执行的许多有趣信息。

GFTRACE利用ASMSTDCALL及其在监视上述结构的特定字段并将其记录到用户的工作方式。该工具能够记录函数名称,它的参数以及Golang应用程序调用的每个Windows函数的返回值。所有这些都无需连接单个API功能或为其具有签名。

该工具还试图忽略GO运行时初始化中的所有噪声,而仅在其之后调用的日志函数(即来自主包装的函数)。

如果您想了解更多有关此项目的信息,请检查博客文章。

安装

下载最新版本。

用法

确保gftrace.exe,gftrace.dll和gftrace.cfg在同一目录中。指定您要在gftrace.cfg文件中跟踪的API功能(如果没有应用API过滤器,该工具就无法使用)。运行gftrace.exe将目标golang程序路径作为参数。 gftrace.exe filepath params

配置

您需要做的只是指定要在gftrace.cfg文件中跟踪的功能

createFilew,readfile,createProcessw确切的Windows API功能一个软件包的Golang方法X在特定方案中只能通过分析方法本身或试图猜测来确定。可以使用一些有趣的特征来确定它,例如,Golang应用程序似乎总是更喜欢从“宽”和“ ex”集中调用功能(例如CreateFilew,createProcessw,getComputernameexw等),因此您可以在分析过程中考虑它。

默认配置文件包含我已经测试过的多个功能(至少其中的大部分),并且可以确保在某个时候可以通过Golang应用程序调用它们。我将最终尝试更新它。

示例

跟踪CreateFilew()和ReadFile()在一个简单的Golang文件中,该文件调用'os.ReadFile'Twice:

-CreateFileW('C: \ USER \ USER \ desktop \ doc.txt',0x80000000,0x3,0x0,0x3,0x3,0x1,0x0)=0x168(360)

- readfile(0x168,0xc000108000,0x200,0xc000075d64,0x0)=0x1(1)

-CreateFileW('C: \ USER \ USER \ desktop \ doc2.txt',0x80000000,0x3,0x0,0x3,0x1,0x1,0x0)=0x168(360)

- readfile(0x168,0xc000108200,0x200,0xc000075d64,0x0)=0x1(1)在隧道Malware:中跟踪CreateProcessw()

- CreateProcessW('C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe', 'powershell /c 'Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn; Get-Recipient | Select Name -ExpandProperty EmailAddresses -first 1 | Select SmtpAddress |。

- CreateProcessW('C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe', 'powershell /c 'Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn; Get-Recipient | Select Name -ExpandProperty EmailAddresses -first 1 | Select SmtpAddress |。

- CreateProcessW('C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe', 'powershell /c 'Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn; Get-Recipient | Select Name -ExpandProperty EmailAddresses -first 1 | Select SmtpAddres s |。

- CreateProcessW('C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe', 'powershell /c 'Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn; Get-Recipient | Select Name -ExpandProperty EmailAddresses -first 1 | Select SmtpAddress |。

- CreateProcessW('C:\WINDOWS\system32\cmd.exe', 'cmd /c 'wmic computersystem get domain'',0x0,0x0,0x1,0x80400, '=C:=C:\Users\user\Desktop',0x0,0xc0000c4ef0,0xc0000c4dc0)=0x1(1)

- CreateProcessW('C:\WINDOWS\system32\cmd.exe', 'cmd /c 'wmic computersystem get domain'',0x0,0x0,0x1,0x80400, '=C:=C:\Users\user\Desktop',0x0,0xc0000acc0,0xC0000ACD90)=0x1(1)

- CreateProcessW('C:\WINDOWS\system32\cmd.exe', 'cmd /c 'wmic computersystem get domain'',0x0,0x0,0x1,0x80400, '=C:=C:\Users\user\Desktop',0x0,0xc0000bcec0,0xC0000BCD90)=0x1(1)

[.]在Sunshuttle Malware:中追踪多个功能

- CreateFileW('config.dat.tmp',0x80000000,0x3,0x0,0x3,0x1,0x0)=0xffffffffffffffffffffff (-1)

-CreateFileW('config.dat.tmp',0xc0000000,0x3,0x0,0x2,0x80,0x0)=0x198(408)

-CreateFileW('config.dat.tmp',0xc0000000,0x3,0x0,0x3,0x80,0x0)=0x1a4(420)

-WriteFile(0x1a4,0xc000112780,0xeb,0xc000000c79d4,0x0)=0x1(1)

-getAddrinFow('reyweb.com',0x0,0xc00000031f18,0xc000031e88)=0x0(0)

-wsasocketw(0x2,0x1,0x0,0x0,0x81)=0x1f0(496)

-wsasend(0x1f0,0xc00004f038,0x1,0xc0000004f020,0x0,0xc0000004eff0,0x0)=0x0(0)

-WSARECV(0x1f0,0xc00004ef60,0x1,0xc000048,0xc0000004efd0,0xc0000004ef18,0x0)=0xffffffff(-1)

-getAddrinFow('reyweb.com',0x0,0xc00000031f18,0xc000031e88)=0x0(0)

-wsasocketw(0x2,0x1,0x0,0x0,0x81)=0x200(512)

-wsasend(0x200,0xc00004f2b8,0x1,0xc00004f2a0,0x0,0xc0000004f270,0x0)=0x0(0)

-wsarecv(0x200,0xc00004f1e0,0x1,0xc00004f1c8,0xc0000004f250,0xc0000004f198,0x0)=0xffffffff(-1)

[.]在DEIMOSC2框架代理:中追踪多个功能

-wsasocketw(0x2,0x1,0x0,0x0,0x81)=0x130(304)

-setSockopt(0x130,0xffff,0x20,0xc000000b7838,0x4)=0xffffffff(-1)

- 插座(0x2,0x1,0x6)=0x138(312)

-wsaioctl(0x138,0xc8000006,0xaf0870,0x10,0xb38730,0x8,0x8,0xc000000b746c,0x0,0x0,0x0)=0x0(0)

-getModuleFilenameW(0x0,'C: \ users \ user \ desktop \ samples \ deimos.exe',0x400)=0x2f(47)

-getUserProfofileDirectoryW(0x140,'C: \ User \ User',0xc0000b7a08)=0x1(1)

-lookupaccountsidw(0x0,0xc00000E250,'用户',0xc0000b796c,'桌面检测',0xc000000b7970,0xc000000b79f0)=0x1(1)(1)

-netusergetInfo('桌面测试','用户',0xa,0xc0000b7930)=0x0(0)

-getComputerNameExw(0x5,'桌面测试',0xc000000b7b78)=0x1(1)

-getAdaptersAddresses(0x0,0x10,0x0,0xc000120000,0xc0000b79d0)=0x0(0)

-createToolHelp32snapshot(0x2,0x0)=0x1b8(440)

-getCurrentProcessID()=0x2584(9604)

-getCurrentDirectoryW(0x12c,'C: \ users \ user \ user \ appdata \ local \ program \ program \ retoolkit \ bin')=0x39(57)

[.]

未来功能:

[x]支持对32个位文件的检查。 [x]通过“ IAT JMP表”而不是直接在ASMSTDCALL中的API调用来添加支持文件的支持。 [X]为目标过程的CMDLINE参数添加支持[]将跟踪日志输出发送到文件默认情况下,以使其更好地过滤。当前,目标文件和GFTRACE输出之间没有分离。另一种方法是使用命令行重定向GFTRACE输出到文件。

:警告:警告

该工具会动态检查目标二进制,这意味着执行了所跟踪的文件。如果您正在检查恶意软件或未知软件,请确保在受控的环境中进行。 Golang程序可能会非常嘈杂,具体取决于文件和/或函数的追踪(例如,通过运行时软件包始终将VirtualAlloc多次调用,在呼叫CreateProcessw等调用之前,CreateFilew多次被称为createfilew)。该工具忽略了Golang运行时初始化噪声,但此后,用户可以决定哪种功能在每种情况下都更好地过滤。

许可证

GFTRACE以GPL V3许可发布。有关更多信息,请参考名称许可证的文件。