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

2013-11-26 +5 73018人围观 ,发现 16 个不明物体 系统安全

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

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

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

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

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

[+] encoded beacon stage with x86/shikata_ga_nai in 1874ms
[+] encoded beacon stage with x86/alpha_mixed in 16292ms
[+] The patched DLL is: 424 => /tmp/beacon1505713488048363096.dll

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

text:10003E76 loc_10003E76:                           ; CODE XREF: .text:10003E57j
.text:10003E76                 mov     edx, [esp+4]
.text:10003E7A                 mov     dword_1001FCF0, edx
.text:10003E80                 xor     eax, eax
.text:10003E82                 mov     cl, 69h
.text:10003E84
.text:10003E84 loc_10003E84:                           ; CODE XREF: .text:10003E90j
.text:10003E84                 xor     byte ptr word_1001E040[eax], cl
.text:10003E8A                 inc     eax
.text:10003E8B                 cmp     eax, 1A8h
.text:10003E90                 jl      short loc_10003E84
.text:10003E92                 movzx   eax, word_1001E042
.text:10003E99                 movzx   ecx, word_1001E040
.text:10003EA0                 push    offset unk_1001E168
.text:10003EA5                 push    offset unk_1001E048
.text:10003EAA                 push    eax
.text:10003EAB                 push    ecx
.text:10003EAC                 mov     ecx, dword_1001E044
.text:10003EB2                 mov     edx, offset unk_1001E068
.text:10003EB7                 call    loc_100012B0

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

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

format PE
entry $
file "beacon_enc.dll"

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

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

选取这片红色的代码区,然后右键选择"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:

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

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

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

转换后的结果如下图:

看到原始的信息了吧?"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.freebuf.com/articles/others-articles/18096.html

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

http://www.freebuf.com/articles/system/18180.html


发表评论

已有 16 条评论

取消
Loading...

这家伙太懒,还未填写个人描述!

2篇文章41条评论

特别推荐

关注我们 分享每日精选文章

不容错过

css.php