-
-
[分享]简单后门分析
-
发表于: 2018-6-4 17:01 5530
-
此样本是运行在windows系统下的一款后门样本(来自恶意代码分析实战 lab-09-01),功能包括向指定域名上传、下载指定文件、获取shell等,通过命令安装服务、更新配置、卸载服务、打印配置信息。
通过PEID、ExeInfoPe查壳发现程序未加壳,图一展示了PEID查壳结果:
图一 PEID查壳结果
如图二所示显示了ExeInfoPe的查壳结果,显示均无加壳:
图二 ExeInfoPe查壳结果
图三 strings查询字符串结果
从字符串查询结果来看总结可疑字符串列表如下:
SOFTWARE\Microsoft \XPS
HTTP/1.0
GET
疑似后门远程命令
NOTHING
CMD
DOWNLOAD
UPLOAD
SLEEP
cmd.exe
>> NUL
/c del
ups
http://www.practicalmalwareanalysis.com 可能是连接用到的域名
Manager Service
疑似后门指令
-cc
-re
-in
以上是通过查看字符串,对字符串的作用产生的猜测。
通过ida反编译程序可发现主程序有两个跳转如图四所示。
1、程序运行采用默认参数
2、程序多参数运行
图四 静态反编译命令行参数判断结果图
功能描述:当程序采用默认参数运行时首先通过sub_401000判断注册表中有无Configuration值。有的话执行sub_402360();后门主函数。没有的话则执行sub_402410();函数删除程序自身。
通过图四可知当命令行参数为默认时(默认为一个即当前文件执行路径)程序运行到 0x00402B03 地址处执行 call sub_401000函数 程序逻辑如下图五所示:
图五 程序运行采用默认参数时逻辑图
call sub_401000函数用于获取注册表 HM-SOFTWARE\Microsoft \XPS下Configuration的值。如下图六所示:
图六 sub_401000函数逻辑图
图七 sub_401000伪代码逻辑图
图八 反编译sub_402410()结果逻辑图
动态调试sub_402410()详细参数图
图九 动态调试sub_402410()详细参数图
如下图十所示为sub_402360();函数主要逻辑:
图十 sub_402360()后门主函数功能逻辑图
其中sub_401280()为获取Configuration并且通过字符串拼接存储到指定位置,如下图十一所示:
图十一 sub_401280()获取注册表值函数
通过查看注册表可发现Configuration中保存的值如下图十二所示保存的为URL以及端口信息。
图十二 注册表中的值
通过动态调试可发现 sub_402020(&name)中的参数name即为注册表中的URL的值,如下图十三所示:
图十三 sub_402020()参数信息
当跟踪进入sub_402020()函数后会发现此为后门功能选择的主要函数。其中包括命令如下:
1、SLEEP 程序暂停等待一段时间运行。
2、UPLOAD 调用函数sub_4019E0(name, v5, v6)往被控主机上上传文件等。
3、DOWNLOAD 调用sub_401870(name, v8, lpFileName) 函数往控制端传输文件等。
4、CMD 获取一个cmd shell
5、NOTHING 什么也不执行
功能描述:程序多参数运行时。首先需要最后一个参数作为运行密码,才能使程序得以正常运行。当输入正确密码后程序需要另外的参数作为功能指令,其中包括:
1、-in 安装后门程序
2、-re 卸载服务
3、-c 可更新HM-SOFTWARE\Microsoft \XPS-Configuration中的值(需要更新的值在命令行中输入)
4、-cc 控制台打印当前注册表中配置信息
当图四中的跳转实现当运行指针跳转到地址0x00402B1D的时候程序首先获取到命令行参数的最后一个。然后通过函数sub_402510对最后一个命令行参数进行验证。sub_402510此函数过程中主要通过逐次对 61h、62h、63h、64h(anscii abcd)进行比对进行验证的。当验证不通过时调用0x0040241 地址处的sub_402410();函数删除自身。如下图十四所示:
图十四 密码验证过程逻辑
如图十五所示为密码验证过程sub_402510()实现部分:
图十五 密码验证过程实现部分
因此当命令行参数至少为两个。格式即为(xxx .... abcd)也可以直接通过爆破将sub_402510()验证过程直接修改(修改跳转指令即可实现)
当命令行参数为 (-in abcd时候)程序执行装载过程。即 sub_402600(&ServiceName);函数过程。程序首先利用argv[1]与应编码“-in”进行执行比较。然后通过sub_4025B0(&ServiceName)函数获得要创建的服务的名称。最终执行sub_402600(&ServiceName);创建以serverName命名的服务。并且将自身文件拷贝到系统目录。
如下图十六所示创建服务:
图十六 创建服务
如图十七所示本机查看服务
图十七 查看本机服务
将自身文件拷贝进系统目录如下图十八所示:
图十八 文件拷贝部分
通过 sub_401070(aUps, aHttpWww_practi, a80, a60)函数写注册表。如下图十九
图十九 写注册表函数
此函数sub_4015B0(&BinaryPathName)将拷贝进系统的恶意后门文件时间修改与本机器kernel32.dll的时间一致。如下图20所示修改为2008年:
图二十 修改时间函数
当命令行参数为四个时候,-in www.baidu.com abcd 如下图二十一所示可更新c&c信息:
图二十一 更新配置信息
-re指令调用 sub_402900(&v8); 完全卸载服务于 -in指令相反 如下图二十二所示:
图二十二 卸载服务
-cc指令用于控制台打印配置信息如下图二十三所示:
图二十三 打印配置信息
-c指令用于更新配置信息调用 sub_401070(argv[2], argv[3], argv[4], argv[5]);函数参数必须为七个参数完全更新。(参数信息分别为-默认路径,-c,标志字,url,port,per(疑似心跳间隔),密码)函数如下图二十四所示:
图二十四 更新配置信息
赞赏
- [分享]简单后门分析 5531
- [分享]cve-2012-0158两种poc分析 7828
- [求助]windows逆向实习 5412
- [分享]堆溢出研究三 8558
- [分享]堆溢出研究二 9194