RAT结构演变史

转载保留版权
[email protected]
http://www.famdiy.com/

想了解更深层的RAT架构的不妨进来看看.高手飘过...
稍微详细的讲述一下Bifrost,Flux,PoisonIvy的结构
只说RAT结构演变...其他技术不讨论...
自从Bo出世后.大量的RAT相继出现...
国内熟悉的,冰河,黑洞,PcShare,灰鸽子等...
国外熟悉的.Bifrost,Flux,Assasin,Beast,Bandook,Institution,PoisonIvy等...
相继有自己的特色...包括程序结构...出现了许多令人惊叹的东西...
[1]结构简介:
 
第一代:-EXE独立结构
相对应的...C/S架构...
EXE---->EXE
都是EXE的...比如说冰河,黑洞...几乎第一,二代RAT都是

第二代:DLL分体结构
这代的DLL纯粹是为了穿墙而设计...
利用Inject Code ---->LoadLibrarA
完成DLL载入.
或者注册表,消息钩子等等...
2.5:Plugin型架构
插件结构的RAT大部分功能...
说道插件型RAT.国内只有灰鸽子之流做出这样的东西.
而且纯粹是摆设...
当然还有FWB++
DLL映射注入...相信大家知道FilePacker,Alloy,MoleBox,PEBundle
将DLL映射到EXE空间里,然后修改导入表跳转地址...
这样做到了无需加载DLL(其实DLL是映射到EXE空间了)
FWB++就是这么玩~...乎乎~
Tequila Bandita就是采用DLL Stream Inject的~国内使用的比较少...
关于插件的RAT.做的最绝的要属Spirit系列
那几乎完美的体积,强悍的代码注入方式.包括代码优化整合,PE结构的使用
早就了Spirit4b1那 1.37k的体积...(API Hash搜索(写的太Cool了),LZO压缩引擎,RT32注入引擎.)
他主要是采用代码注入方式...然后再传输DLL 插件
 
第三代:代码注入类型...
这个技术类似病毒技术...将病毒体代码
写入host文件...
再进程注入方面.既然可以写LoadLibraryA函数
为什么就不能写入所有代码呢...
技术难点:代码,数据重定位问题...
还有数据的地址获取等等...一些这样那样的问题...
当然在乎编程者...其实这些都很容易解决...
3.5:
NT核心下可以让你使用ProcessHack技术了...
替换代码,傀儡进程等等都是类似技术
综上所述...现在的RAT无外乎这几种形态....
那我说了半天究竟要说什么??我说的是木马的框架结构...
下面小议一下木马存在形态...
//--------------------------------------------------
冰河:
单纯的EXE,WIn9x下将自己注册成系统服务隐藏进程...
黑洞,Nuclear Rat,灰鸽子,Spook,风雨江湖.小熊那东东...
都是采用第二代形式...
EXE+DLL...
这代体积都比较庞大...
不管是什么,消息钩子
下面主要说说,Bifrost,Flux,Poison Ivy吧...国内的没啥意思,请原谅我的无理...
本文说的是框架.聊的是~自己敢兴趣的东西...
相信也有的朋友对Bifrost,Flux,Poison Ivy能这么小的体积感兴趣.
Flux,Bifrost,Poison Ivy其实都是采用FWB+技术...
但是他们都有一个共通点...
这里算上,C-One V1.0(Caecigenus)
Caecigenus好牛的.别的不知道,至少他,法文,English,中文都会说...
x140d4n说他是中国人?还是华人???
C-One和Flux类似.但是编码技术不如Gargamel来的Cool...
Flux,Bifrost,Poison Ivy,C-One都是前EES.现在的ChaseNET的作品
[1]C-One比较简单.先说一下吧
1.安装自己
2.注入到默认浏览器
浏览器路径由HKEY_CLASSES_ROOT\HTTP\shell\open\command获取
由于他没有使用RT32或者EliRT组件库
所以这个RAT不支持Win9x
注入方式也很简单.
VirtualAllocEx
VirtualProtectEx
WriteProcessMemory
CreateRemoteThread
WaitForSingleObject
协议包也很简单(简单的令人发狂...速度慢得要死...还弄了一个既算加密又不算加密的加密算法)
[2]Flux,Bifrost
采用的是原始结构.佩服Gargamel,ksv的毅力
居然可以把这么多代码直接用VC写出来...完全代码注入...
和上面的C-One一样...注入方式不过二者都使用了EliRT 1.01
不过为了防止被跟踪他们都是先将代码注入
explorer.exe或者msgsrv32.exe
然后再次跳转...当然你熟练操作你的Debuger Tools的话很容易就可以注入你想注入的进程
然后去分析他的结构..OD足矣...
特殊的地方,发送指令,执行指令,都是采用同一个Socket,可以多线程操作...
相互之间不会冲突.你可以一边查看桌面,WebCam,还有传输文件..同时还可以干点别的
可见作者功力之高...国内没有任何一款RAT可以做到如此功能...
PcShare也是使用了HTTP隧道双工...一个功能一个线程~两个Socket
八大功能的意思就是说...有2*8=16个Socket连接隧道...(应该不会这么恐怖吧)
代码注入没啥好说的就是经验了...自己跟踪一下就明白了
Bifrost的功能比Flux多一点...他是如何做到的??
插件!Plugin!~~当然他使用的不是LoadLibraryA来载入DLL的不然你就可以发现了...
用Bo2k的Plugin引入代码...将DLL映射到EXE进程中然后再加载调用...
很有意思吧...(新版本的Poison Ivy据说也采用这个功能...)
Flux的Socket生存能力比Bifrost强一点,体积小一点,但是估计上线的数量不是很多
居然一个I/O输入输出模型都没有使用...汗!
[3]Poison Ivy...恐怖的家伙
以前就对Poison Ivy的结构感觉很神奇...体积这么小巧.
功能还可以这么完善.有点违反"能量守恒定律"难道shapeless技术高到如此境界?
IDA+OD拆了他...
由于几乎所有的API都是自己内存搜索的--不是使用GetProcAddress函数...
自己写的一个Hash函数..Crc32b Hash算法...
OD简单的跟踪了一下.发现Poison Ivy代码有些地方写的并不高明
代码优化做的完全没有Spirit那么精致.(太精致了~)
代码一点都不优美.但是很容易OD跟踪分析...没有使用代码的编码优化技巧
为什么说他恐怖...一开始认为和Bifrost一样...
传输Plugin插件过去然后再控制...
经过OD三级跳分析后(先注入Explorer.exe...小心使用OD跟踪下~程序很容易死循环
主要原因在于.获取Explorer.exe进程始终返回0!...但是他会一直再那里等...直到有
Explorer.exe的存在.你可以自己手工跳转+填写Explorer.exe进程PID---设置为自己的
记事本或者计算器..这样容易跟踪一些..)
抓包分析...+冰刃观察...发现Poison Ivy
居然不是传输...Plugin做到的...自己观察下发现...
他第一次是直接传输~功能代码过去.
(数据包是压缩的.没有加密..NTDLL.RtlGetCompressionWorkSpaceSize,
RtlCompressBuffer,RtlDecompressBuffer)压缩数据了...你可以自己Dump出数据包.然后自己解压缩.然后试试看是不是
都是明文了..效果不错.学习数据包结构了...呼呼~我喜欢他们的风格
由于直接传输功能代码(第二次就不传输了...)
实在是太恐怖了...由于可记录.而且第二次就不需要再传输..所有功能都是本地实现
...想想会如何??哈哈~是不是感觉很有意思...
和小弟以前做的一个主动功能型RAT一样(反向连接.加文件管理,进程管理功能后只有945字节,nasm写的)
主动功能型?再TT里面第一次看到drocon弄出来的...感觉这小胖子(x140d4n那里的来的消息他胖!)
很厉害呀~drocon现在主要做一些asm代码优化的工作.很不错的一些工作..比较喜欢他的编码风格
特别是代码优化方面做的真的很不错...PS:x140d4n啥时带我去见他呀...
接着说:Poison Ivy和Flux,Bifrost有一些不同
支持文件多线程多文件同时传输,为了保证Socket的稳定性,他在文件传输时使用了多个Socket
进行传输...其他的还是保留独立Socket
同样采用多线程操作...但是似乎主控段的上线率不是很高.而且没有使用Thread Pool
所以线程切换浪费了太多的时间...你可以观察一下..
用冰刃打开注入进程,你每次刷新一下目录或者操作一次,是不是程序就多出一个.线程???
哈哈~而且Poison Ivy还有许多地方不太完善,但是现在变成VIP版本了...没有多少机会分析了
唉~谁让人家老外福利好呢.在家没事写东西卖钱.谁给我钱我也天天在家写...乎乎~~
综上的结构看来...是不是感觉Poison Ivy代码是如何实现的还是一头雾水?
1.被控端连接主控段
2.主控段发送主动功能代码给被控端...
3.被控端新建一块内存保存主动功能代码(这里有个BUG.当主控段重复发送功能代码的时候.
他会不去释放直接申请内存保留主动功能代码...)居然都不释放...呼呼~
4.然后当主控段再次发送控制指令的时候...被控端.开始调用一开始接受的主动功能性代码...
(新建线程执行的.所以造成了大量的空余线程...似乎都没有使用CloseHandle关闭???)
5.还有什么好说的?自己Dump~然后看数据包吧...
 

你可能感兴趣的:(职场,休闲,rat)