未加星标

关于分析Cobalt Strike的beacon.dll的一些TIPS

字体大小 | |
[网络安全 所属分类 网络安全 | 发布者 店小二05 | 时间 2015 | 作者 Moriarty ] 0人收藏点击收藏

没想到刚文章刚发出来,就有收到好几个朋友的邮件询问关于如何分析beacon.dll,为了能让一些真正想研究的朋友少走一些弯路,我这里就写写我分析当中的一些tips吧。特别需要声明一点的是,我这里不会写出整个过程(那还不如直接把分析后的文件直接提供下载更省事),目的是为了避免一些习惯于拿来主义而又不愿意去钻研分析的小P孩直接拿来做坏事,我相信那些有能力的朋友,看完我这些tips肯定能自己搞出来(甚至不需要看都能搞出来的,我这里就算是献丑了).文中又不当之处,欢迎各位朋友切磋指正。

用到的工具:FASM(我最爱的ASM编译器),OLLYDBG 2.01(你不知道这个就别往下看了:-),010EDITOR(我最爱的16进制编辑器)

1,首先是用压缩工具解压缩cobaltstrike.jar文件,找到"resources"目录里的beacon.dll,这里拷贝出来并改名为beacon_tpl.dll(此为模板文件)。


关于分析Cobalt Strike的beacon.dll的一些TIPS

关于分析Cobalt Strike的beacon.dll的一些TIPS

2,运行起cobalt strike,在"cobalt strike"菜单项中点选"Listeners",然后在下方弹出的新对话框里点击"add",配置如下图:


关于分析Cobalt Strike的beacon.dll的一些TIPS

关于分析Cobalt Strike的beacon.dll的一些TIPS

关于分析Cobalt Strike的beacon.dll的一些TIPS

关于分析Cobalt Strike的beacon.dll的一些TIPS

最后点击确定后,在你运行cobaltstrike的终端窗口中会有如下的输出信息:

[+]encodedbeaconstagewithx86/shikata_ga_naiin1874ms
[+]encodedbeaconstagewithx86/alpha_mixedin16292ms
[+]ThepatchedDLLis:424=>/tmp/beacon1505713488048363096.dll

3,把这个文件/tmp/beacon1505713488048363096.dll(这个就是生成好的dll,被两次encode了)拷贝出来改名为beacon_enc.dll。在这里大家注意上面的424这个数字无论你生成多少次都是这个数,你用IDA打开那个模板文件,看一下这里就知道了:

text:10003E76loc_10003E76:;CODEXREF:.text:10003E57j
.text:10003E76movedx,[esp+4]
.text:10003E7Amovdword_1001FCF0,edx
.text:10003E80xoreax,eax
.text:10003E82movcl,69h
.text:10003E84
.text:10003E84loc_10003E84:;CODEXREF:.text:10003E90j
.text:10003E84xorbyteptrword_1001E040[eax],cl
.text:10003E8Ainceax
.text:10003E8Bcmpeax,1A8h
.text:10003E90jlshortloc_10003E84
.text:10003E92movzxeax,word_1001E042
.text:10003E99movzxecx,word_1001E040
.text:10003EA0pushoffsetunk_1001E168
.text:10003EA5pushoffsetunk_1001E048
.text:10003EAApusheax
.text:10003EABpushecx
.text:10003EACmovecx,dword_1001E044
.text:10003EB2movedx,offsetunk_1001E068
.text:10003EB7callloc_100012B0

上面那个1A8h就是424,而这段代码就是用来解密配置信息并读取的.从这里看配置信息是被用69h异或过了.回头分析的时候自然会证明这一点。

4,到了这里可能有朋友就会问怎么能还原那个被加密的dll呢?这个其实很简单,我们可以让它自己跑起来解密完成后我们再把解密后的内容dump出来即可,因为不管你怎么加密,前面肯定是要有解密头的。由于它是个dll,所以我们这里用FASM写几行最简单的代码把它变成exe,代码如下:

formatPE
entry$
file"beacon_enc.dll"

用FASM编译它后生成出一个新的beacon.exe来,然后用ollydbg加载它,如下图:


关于分析Cobalt Strike的beacon.dll的一些TIPS

关于分析Cobalt Strike的beacon.dll的一些TIPS

这里你可以选择直接运行它(或者保险起见,你看到这句:MOV CX,7B81,这个7b81肯定就是长度了,在这里你可以设置个条件断点当ecx=1时断下,然后单步执行一下这样能保证不会执行到解密后的dll代码上),运行完解密头后的界面如下图:


关于分析Cobalt Strike的beacon.dll的一些TIPS

关于分析Cobalt Strike的beacon.dll的一些TIPS

选取这片红色的代码区,然后右键选择"EDIT"->binary copy,这时复制一份beacon_enc.dll为beacon_src.dll,用010editor打开beacon_src.dll,ctrl+a全选,然后选择

"Edit"菜单->"Paste From"->"Paste from Hex Text" 或者直接按下 ctrl+shift+v 将解密后的dll的内容复制过来,保存。这时,beacon_src.dll就是解密后的dll:


关于分析Cobalt Strike的beacon.dll的一些TIPS

关于分析Cobalt Strike的beacon.dll的一些TIPS

5,在010editor里的,直接按ctrl+M打开二进制比对对话框,设置如下:


关于分析Cobalt Strike的beacon.dll的一些TIPS

关于分析Cobalt Strike的beacon.dll的一些TIPS

对比完成后,你直接找到有个大小为1a8h(即424字节)的块是不一样的,点一下看看:


关于分析Cobalt Strike的beacon.dll的一些TIPS

关于分析Cobalt Strike的beacon.dll的一些TIPS

结合前面的分析,从上图可以看出模板中的那段"AAAABBBBCCCC….."应该就是配置信息存放的地方,我们可以尝试解密下看看.选中beacon_src.dll,选择"tools"->"Hex Operations"->"binary xor",如下图:


关于分析Cobalt Strike的beacon.dll的一些TIPS

关于分析Cobalt Strike的beacon.dll的一些TIPS

转换后的结果如下图:


关于分析Cobalt Strike的beacon.dll的一些TIPS

关于分析Cobalt Strike的beacon.dll的一些TIPS

看到原始的信息了吧?"50 00"就是端口号,剩下的不用我多说了啊?其实到这里就OK了,剩下的就看你想怎么做了。写着写着又成了教程了,唉。

其实细心的朋友可以注意到,文件开头(也就是"MZ"开头的地方)也是不一样的,那里其实是一段shellcode,"M"和"Z"其实就是"dec ebp"和"pop ebx",这里是个小猥琐的技巧,聪明的你看明白了吗?而这段shellcode其实就是:


dec ebp; M
pop edx; Z
call 0; call next instruction
pop ebx; get our location (+7)
push edx; push edx back
inc ebp; restore ebp
push ebp; save ebp
mov ebp, esp; setup fresh stack frame
add ebx, 0x???????? ; add offset to ReflectiveLoader
call ebx; call ReflectiveLoader
mov ebx, eax; save DllMain for second call
push edi; our socket
push 0×4; signal we have attached
push eax; some value for hinstance
call eax; call DllMain( somevalue,DLL_METASPLOIT_ATTACH, socket )

push 0x????????; our EXITFUNC placeholder

push 0×5; signal we have detached
push eax; some value for hinstance
call ebx; call DllMain( somevalue,DLL_METASPLOIT_DETACH, exitfunk )
; we only return if we don't set a valid
这里它这个dll是用了"Stephen Fewer"写的一个库,名字叫 "Reflective DLL Injection library",大家可以去github上下载这个DD一读代码便知分晓,剩下的分析就看你个人的想法了。有问题的可以发邮件给我:moriarty@cetgroup.org。

Thanks for reading!Have fun,buddy!

关联阅读:

windows 2008如何安装Cobalt Strike

http://www.CodeSec.Net/articles/others-articles/18096.html

关于 windows 2008如何安装Cobalt Strike 的一些想法

http://www.codesec.netsystem/18180.html


本文网络安全相关术语:网络安全工程师 网络信息安全 网络安全技术 网络安全知识

主题: 编译器TI其实EDIFUFAS
分页:12
转载请注明
本文标题:关于分析Cobalt Strike的beacon.dll的一些TIPS
本站链接:http://www.codesec.net/view/57682.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 网络安全 | 评论(0) | 阅读(666)