应用Ghidra剖析歹意软件Emotet | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

应用Ghidra剖析歹意软件Emotet

申博_安全预警 申博 140次浏览 已收录 0个评论

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

————————————-

在本文中,我们将为读者演示怎样运用Ghidra来剖析歹意软件Emotet的最新样本。

须要申明的是,我们的剖析事情是在脱壳后的二进制文件的基础上完成的。由于这里主若是为读者展现怎样运用Ghidra的python剧本管理器来对字符串和API挪用举行解密,以是,细致的脱壳历程,就不再这里引见了。

概述

甚么是Ghidra?

  • Ghidra是一个开源的逆向工程东西套件,关于它的细致引见,请参阅https://ghidra-sre.org/。

为什么挑选Emotet?

  • Emotet是一种盛行的银行木马歹意软件。该木马的生命力异常强,其沾染机制还在赓续进化。以后,已有一些关于该歹意软件的剖析文章,感兴趣的读者请接见https://www.google.com/search?q=emotet。

为什么运用Ghidra剖析Emotet?

  • 为啥?还不是由于IDA Pro许可证太贵,哥又不想摒弃本身的歹意软件剖析师职业生涯。
  • 固然,运用免费版IDA v7.0也是一个不错的挑选,然则如许的话,就没法运用IDA Python了。在试用一段时间IDA自家剧本言语IDC以后,我发明Python才是我的最爱。而Emotet不只支撑Python,还供应了很多现成的剖析剧本。

运用Ghidra剖析Emotet

在运用Ghidra时,起首要建立响应的项目。依照屏幕上的提醒,我建立了一个名为“Emotet”的项目。要想将待剖析的文件添加到项目中,只需键入I或挑选File -> Import File菜单项。

应用Ghidra剖析歹意软件Emotet

导入Emotet的二进制文件

导入Emotet的二进制文件后,Ghidra将显现该文件的种种属性。以后,双击文件名,就会在CodeBrowser中翻开该文件。在这里,CodeBrowser是一个反汇编东西。

应用Ghidra剖析歹意软件Emotet

CodeBrowser中的Emotet视图

在符号树下(一般显如今左边;若是没有翻开的话,可以或许经由过程window->symbol tree来翻开它),经由过程过滤“entry”,就可以够找到该二进制文件的进口点。

应用Ghidra剖析歹意软件Emotet

Emotet的进口点

在Listing窗口下面,我们可以或许看到编译后的代码,而右侧显现的是反编译后的代码。由于之前已对这些二进制文件举行了剖析,因而,图中某些子例程挪用和偏移量已被我重命名了。当我们想要对偏移量举行重命名的时刻,请右键单击响应的偏移量,然后,挑选“Edit Label”(或键入L)便可。

Emotet的函数挪用

Emotet不只对本身的字符串举行了加密,同时,还将本身的API挪用称号存储为哈希值情势。因而,静态检察该文件的内容的话,邃晓起来异常难题。

为了深切相识Emotet的payload,一般须要借助Olldbg、Wingdb或其他调试器来剖析一切的函数,以弄清晰其内部运作机制。而本文的目的,就是怎样应用Ghidra让这个历程更轻松一些。

下面,我们将展现怎样应用Emotet弄清晰两个函数的运转机制。个中,第一个函数是一个简朴的xor例程,用于解密字符串。表面上看,这个函数异常复杂(由于在函数中运用了移位运算符),直到在Ollydbg中运转一遍后,我才邃晓它究竟是干甚么的……第二个函数用于查找API称号与哈希值之间的对应干系(细致在后文中引见)。固然,若是您以为我说的还不敷清晰的很,只要在Ollydbg中运转一下响应的代码,就可以很好的邃晓了。

然后,我们将引见Ghidra的剧本管理器,并展现怎样经由过程python剧正本解密字符串并剖析二进制文件中用到的API挪用。

字符串是怎样加密的?

在这个二进制文件中,我们发明很多地方都援用了0x00401b70处的一个函数挪用。实际上,这个挪用是用来解密字符串的,因而,无妨将其重命名为decode_strings。要查找对该函数的援用,请右键单击该函数,然后挑选References -> Show References to便可。

应用Ghidra剖析歹意软件Emotet

对decode_strings函数的援用

应用Ghidra剖析歹意软件Emotet

对decode_strings函数的挪用

函数decode_strings有两个参数,离别位于ECX和EDX中。个中,ECX中寄存的是加密字符串的偏移量,而EDX寄存的则是xor密钥。别的,解密后的字符串将寄存到在堆中分派的内存中,其地点将寄存到EAX中。

(注重:我已将字符串“ecx = offset \n edx = key”添加为该函数的可反复解释(repeatable comment)。细致操纵要领为,右键单击地点,然后挑选Comments -> Set Repeatable Comment,或键入;便可)

位于该偏移量处的第一个dword与举行异或操纵后,就会获得字符串的长度。以后,依据前面获得的字符串长度,对背面响应数目的dword举行异或处置惩罚。

如今,我们将为读者引见最为激动人心的局部——运用Ghidra经由过程python剧本自动完成上述操纵。

运用Python完成自动解密

应用Ghidra剖析歹意软件Emotet

剧本管理器图标

在Ghidra的顶部的东西栏中,我们可以或许看到如图所示的图标。点击该图标,就会翻开剧本管理器。另外,我们也可以或许经由过程Window -> Script Manager来翻开它。

应用Ghidra剖析歹意软件Emotet

剧本管理器

翻开剧本管理器后,我们会看到很多运用Java或Python言语编写的剧本,这些都是软件自带的。另外,剧本管理器还供应了很多python剧本示例。以是,要想进修怎样编写python剧本,我们可以或许经由过程.py过滤响应的剧本。经由过程Python Interpreter,我们还可以或许运用Jython与Ghidra的Java API举行交互。至于Java API的文档,可以或许在Ghidra装置目录下的docs文件夹中的压缩文件中找到。

应用Ghidra剖析歹意软件Emotet

新建剧本图标

要新建python剧本,可以或许点击上图所示的图标;或许,我们也可以或许挑选Python,然后输入为剧本指定的称号便可。

应用Ghidra剖析歹意软件Emotet

示例剧本test.py

另外,发起人人浏览资助文档(请接见Help -> Contents)中“Script Development”一节的内容,那边细致引见了建立新剧本时天生的种种元数据符号。

我已将剧本上传到我的github repo中,接见地点为https://github.com/0xd0cf11e/ghidra/blob/master/ghidra_emotet_decode_strings.py。

应用Ghidra剖析歹意软件Emotet

解密后的字符串以解释的情势显现

该剧本的思绪就是,在将偏移量生存到ECX的指令旁边,以解释的情势显现解密后的字符串。

通过CISCN2019 Day 1 SQL注入思考基于运行时错误的盲注

前言 这次的CISCN WEB题感觉质量还不错。第一天的SQL注入一题,很容易发现服务端的返回有两种,一种是登录失败,另一种数据库操作失败。可以意识到可以盲注,但是与一般的盲注好像不太一样。比较常遇到的是服务端会根据sql语句的逻辑true

应用Ghidra剖析歹意软件Emotet

二进制文件中修补的字节。

然后,修补二进制中的字节。

应用Ghidra剖析歹意软件Emotet

起首,找出援用decode_strings函数的一切代码。

应用Ghidra剖析歹意软件Emotet

为此,须要遍历一切援用,并找出操纵码指令MOV ECX和MOV EDX。实际上,这些指令其实不老是位于函数挪用之前。以是,为了查找这些操纵码,我最多遍历100条指令。

完成上述操纵后,实行xor例程,修补响应的字节,并在响应地位写入解释。

上面,我们引见了怎样运用Ghidra来静态剖析歹意软件Emotet。我们晓得,Emotet经由过程简朴的xor函数对其字符串举行了加密处置惩罚。由于在全部文件中都运用了xor例程,手动解密异常烦琐,以是,我们为人人引见了怎样运用Ghidra的剧本管理器编写python剧本,以自动解码字符串。

接下来,我们将为人人演示怎样应用相似的要领,来将Emotet中编码为哈希值剖析为API称号。

Emotet是怎样剖析API地点的?

关于这款歹意软件的二进制文件来讲,它并没有对API称号字符串举行加密。相反,它将API称号存储为哈希值,以加大平安职员的剖析难度。

这些哈希值数组存储在客栈中,然后,在函数0x401230中经由过程指针来援用这些哈希值。以是,我们已将函数0x401230函数符号为decodeAPINames。

应用Ghidra剖析歹意软件Emotet

生存在客栈中的哈希值

应用Ghidra剖析歹意软件Emotet

传递给函数的其他参数

起首,在挪用decodeAPINames之前须要猎取DLL的句柄。为此,该歹意软件经由过程PEB罗列来查找kernel32.dll和ntdll.dll的句柄。而其他的DLL,则经由过程LoadLibraryW(DLL称号由xor例程举行了编码)举行加载。

该函数运用这个句柄来读取DLL的导出地点表。同时,它会盘算表中的每一个API称号的哈希值,并与压入客栈的哈希值举行对照。若是婚配,则将响应的API地点将生存为文件内部偏移量。

注重,客栈中并不是一切哈希值都是有效的。相反,很多哈希值都是用来鱼目混珠的,以是,乍一看该文件的API地点列表硕大无比,实际上,这只是疑惑平安剖析职员的假象。

运用Python将哈希值剖析为函数称号

这里有一个经由过程哈希值剖析函数称号的剧本,下载地点为:  https://github.com/0xd0cf11e/ghidra/blob/master/ghidra_emotet_decode_hash.py。

固然,另有很多其他要领也可以或许处理这个题目。这里运用的要领一方面须要用户举行介入,同时,还须要将API称号列表生存到一个文件中。恰是由于这个历程有些烦琐,因而,我才编写了一个简朴的剧本,让它来替我们完成这些准备事情。

应用Ghidra剖析歹意软件Emotet

来自Kernel32的局部API称号

起首,我编写了一个剧本,用来将DLL的一切导出函数都生存到一个文件中。

然后,用这个剧正本处置惩罚ntdll.dll、kernel32.dll、advapi32.dll、shell32.dll、crypt32.dll、urlmon.dll、userenv.dll、wininet.dll和wtsapi.dll。

接下来是找到一切援用decodeAPINames的偏移量。在这个历程当中,我在剧本管理器中无意中发明了Ghidra供应的Java剧本ShowCCallScripts.java。依据该剧本名的提醒,我将光标放在decodeAPINames函数中,然后运转了该剧本,效果以下所示:

应用Ghidra剖析歹意软件Emotet

运转ShowCCallScripts.java后,掌握台的输出效果

运转该剧本时,须要注重哪一个援用的偏移量处的函数剖析哪一个DLL的API称号的。
比方,0x4079c0处的函数剖析crypt32.dll API称号。为什么这么说呢?由于我发明,当挪用decode_strings时,其称号是由0x407afa处的函数举行剖析的(详见前文)。然后,会在偏移量0x407b3a处挪用decodeAPINames。

应用Ghidra剖析歹意软件Emotet

输入援用decodeAPINames的偏移量。

剧本运转时,会请求输入响应的偏移量。比方上图中,我们输入的是407b3a。

应用Ghidra剖析歹意软件Emotet

crypt32.list文件,个中含有crypt32.dll导出函数称号列表。

接下来,它会提醒输入文件名,这里,我们输入的是用来生存crypt32.dll导出函数称号的文件。

在掌握台中,我们看到剖析了哪些API称号。就crypt32.dll来讲,只要一个API称号剖析了出来,即CryptDecodeObjectEx,只管有39个(十六进制为0x27)哈希值被压入客栈。

应用Ghidra剖析歹意软件Emotet

掌握台输出效果

以后,该剧本会运用API称号来符号偏移量。

应用Ghidra剖析歹意软件Emotet

建立CryptDecodeObjectEx标签。

下面是处置惩罚kernel32.dll的效果:

应用Ghidra剖析歹意软件Emotet

kernel32的API称号

愿望本文可以或许对读者有所启示,若是您已找到了更好的要领来剖析哈希值,或发明了与Ghidra有关的风趣的手艺,迎接与我们一同分享。

通过CISCN2019 Day 1 SQL注入思考基于运行时错误的盲注

前言 这次的CISCN WEB题感觉质量还不错。第一天的SQL注入一题,很容易发现服务端的返回有两种,一种是登录失败,另一种数据库操作失败。可以意识到可以盲注,但是与一般的盲注好像不太一样。比较常遇到的是服务端会根据sql语句的逻辑true


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明应用Ghidra剖析歹意软件Emotet
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址