吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 27319|回复: 69
收起左侧

[PC样本分析] 一款有意思的VB样本分析

  [复制链接]
Assassin_ 发表于 2019-7-3 17:31
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!

一款有意思的VB样本分析

前言

VB - 这个本来不想分析的,不过这几天VB的木马程序逐渐增多,还是分析了。不过不分析还好,在分析的时候碰到一些有意思的东西,值得看一下。
首先在看的时候,你需要知道一些东西,VB的一些基础和Windows调试器的一些原理,这个就很有意思的地方了,因为之前没遇到过。以上不了解也没关系,在文章中我会以最简单的话来说一下这些部分。

分析

样本信息

文件名:uzi.exe
样本大小: 600K
MD5: D99D7FE10CC64F40C6168BFF11379292
SHA-256: E14A7CDB3043FC278A1E34839A968D6E99B7D4755B8297C198E17A8DFE2D5CBE
样本其他信息:
1562122040668.png

环境与工具

Windows32、OD、exeinfo、IDA、VB Decompiler、google

初探

这之前我看了一些VB相关的东西,但是感觉还是自己调试时,才能真正了解。
首先将样本拖入VB Decompiler,观察整体结构,但是静态看并不能分析出什么有价值的东西,于是动态调试起来
1562122386476.png

在调试过程中发现一些端倪
1562123926335.png

这里存在一个DllFuntionCall,该函数为VB的API接口
该接口首先会通过LoadLibrary和GetProcAddress动态获取其API地址
1562124087541.png
1562124140428.png

这里我们看到一个关键函数
EnumThreadWindows,该API会通过会调用程序定义的回调函数
1562124315761.png

查看代码,回调函数为0x0046e99d
1562124374220.png

查看回调,其实本能的就会发现这些代码肯定是有问题的
1562124434548.png

狐狸尾巴

找到这个回调直接下断点,运行,代码是结果膨胀的,而且还很多,至少中间几百行都是。看的眼花。
1562124605369.png

查找关键代码

  1. 找到模块首地址
    1562125793595.png
  2. 调用关键API,申请空间大小为0xB02C
    1562125934945.png
    1562126003980.png
  3. 拷贝代码
    1562126217082.png
  4. 异或0x9A88393C 解码
    1562126556346.png
  5. 解码后代码通过jmp eax调用
    1562126529619.png

self-debugging

进入代码一路F7,不管乱跳的jmp,找到关键函数0x003B1423,该函数通过查找DllFuntionCall的API接口函数,动态调用API
1562127230034.png

当看到这些API时,发现这些为调试器的API
1562128934834.png

直接来到创建进程,可以清楚的看到进程是以调试状态运行的
1562137264006.png

这里说一下调试器中比较重要的一个函数 WaitForDebugEvent

该函数包含两个参数 BOOL WaitForDebugEvent(   LPDEBUG_EVENT lpDebugEvent,
DWORD         dwMilliseconds );

第一个参数为指针,表明事件类型
第二个为等待调试事件的事件,一般为INFINITE

其中第一个参数指向一个结构体
DEBUG_EVENT typedef struct _DEBUG_EVENT {   DWORD
dwDebugEventCode;   DWORD dwProcessId;   DWORD dwThreadId;   union {
EXCEPTION_DEBUG_INFO      Exception;
CREATE_THREAD_DEBUG_INFO  CreateThread;
CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;
EXIT_THREAD_DEBUG_INFO    ExitThread;
EXIT_PROCESS_DEBUG_INFO   ExitProcess;
LOAD_DLL_DEBUG_INFO       LoadDll;
UNLOAD_DLL_DEBUG_INFO     UnloadDll;
OUTPUT_DEBUG_STRING_INFO  DebugString;
RIP_INFO                  RipInfo;   } u; } DEBUG_EVENT, *LPDEBUG_EVENT;

第一个参数为事件码 第二三个参数为进程、线程ID
最后一个为共用体,由第一参数决定,基本每种事件来,都会有与之对应的一个结构体,可以获取相应的信息,这里就不展开了。

接下来我们看样本的具体操作
查看调试器主体部分,已经采用注释
1562137951248.png

可以看到该基本所有来的事件都是通过ContinueDebugEvent 放过去了。
主要关注内存访问异常
首先获取ntdll模块的地址,与获取异常的模块地址进行比较,如果大于等于的话,就直接修改内存地址为可读可执行
1562138918848.png
1562139138013.png
我们猜测该调试程序如果直接调试可能通过引起内存访问异常,进而调试失败。

调试被调试程序

首先,找到调试开关,还是比较明显的
1562139723713.png

我们首先把ntdll 模块的属性修改为0x40,防止那个内存访问异常(内存访问异常可能不会到,我调试过程中,存在访问异常,之后再复现的时候,死活不出现访问异常了)
找到自身模块地址,并找到加密代码
1562141609366.png

代码复制解码
1562142082509.png

密钥解码
1562142019840.png

二者最后xor运算
1562142105649.png

解码之后得到一个PE文件
1562142253900.png

再次创建进程,以挂起的形式进行创建
1562142703523.png

之后就是常规操作了
模块卸载
1562142780038.png

申请空间,大小为A200
1562142812672.png

代码写入
1562142847937.png

获取进程上下文
1562142895311.png
设置进程上下文
1562142974867.png

最后恢复进程并退出
1562143010703.png

RAT

该RAT为一个LOKI.bot,该文件文件具有信息窃取和键盘记录等功能,该RAT有时间再分析,很规矩rat,如果有兴趣,可以自行研究,不过之后应该也会写关于这个的相关报告。

总结

总体主要是有调试器的参与,其他比较基础,适合新手。

附件:52pojie
sample.zip (191.44 KB, 下载次数: 103)

免费评分

参与人数 25吾爱币 +22 热心值 +23 收起 理由
dsh10086 + 1 + 1 加油哦!
UniqueLegend + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
狐尼克 + 1 + 1 谢谢@Thanks!
snatch2null + 1 + 1 谢谢@Thanks!
zxy126 + 1 + 1 谢谢@Thanks!
柑桔 + 1 + 1 用心讨论,共获提升!
L的追梦人生 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
tyxajh + 1 我很赞同!
gavin913 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
gym_168 + 1 + 1 用心讨论,共获提升!
RyanEdward + 1 我很赞同!
13180707766 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
fx_hong + 1 用心讨论,共获提升!
daniel7785 + 1 热心回复!
zys_ + 1 + 1 我很赞同!
VicZ + 1 + 1 感谢分享
siuhoapdou + 1 + 1 谢谢@Thanks!
zx618 + 1 + 1 谢谢@Thanks!
树上有猫丶 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
抄经大弟子 + 1 + 1 热心回复!
sudiasuka + 1 + 1 谢谢@Thanks!
luoxiaosan + 1 用心讨论,共获提升!
笙若 + 1 + 1 谢谢@Thanks!
为海尔而战 + 1 + 1 技术分享,向大牛致敬!
hexie666 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

hxp.china.sh 发表于 2019-7-16 16:41
我有个VB写的工具,这个工具一运行就报个窗口,消息是不在服务期内,不能使用,确定后就关闭了。OD载入,运行,跳出窗口,F12暂停,ALT+k或ALT+F9都不能返回到程序领空上面,一直在user32调用循环,一直不能返回用户代码,有什么好方法吗!!!跳过这个窗口能正常运行登陆进去。。
sadness 发表于 2019-11-26 19:15
这几天收集到了几个VB样本,基础手法和这个很相似,怀疑是一个apt组织的,反调试增加了一个利用系统调用号+kisystemfastcall绕过ntdll的检测,不过我暂时还没分析完,才开始做分析,还是要好好努力哎。!
头像被屏蔽
hexie666 发表于 2019-7-3 18:58
NB2665597272 发表于 2019-7-3 21:20
可以加精了
lovejoan 发表于 2019-7-4 08:18
这年代了还有人用VB写木马~~估计是重操旧业的吧
x163326 发表于 2019-7-4 09:28
这么古董了呀?
Joduska 发表于 2019-7-4 10:20
希望多分享分析流氓软件
uulive 发表于 2019-7-4 10:25
谢谢,我来学习一下。
yeqiang163 发表于 2019-7-4 13:34
古董木马啊 学习了!
jim19 发表于 2019-7-5 01:07
前排 很不错!!!!!
单调的调调 发表于 2019-7-5 07:22
这个必须支持楼主
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-22 16:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表