[病毒分析]熊猫烧香(上)初始分析(三)

简介: [病毒分析]熊猫烧香(上)初始分析

接着继续按下F8调试,发现它将字母“b”赋值给了EAX,我们怀疑它跟“xboy”有关。

image.png

接下来的代码分析如下:

  • MOV ECX, 0xA
    将常量“A”赋值给ECX。通常存在两种可能性,一种可能是ECX作为循环的此时,即可能循环A次;另一种可能是EXC作为一个运算的除数。
  • XOR EDX, EDX
    异或操作将自身清空。
  • DIV ECX
    可以发现它是一个除法操作,除数即为ECX。结果显示如下图所示,除法的商EAX为9,余数EDX为8。

通常除法有两种可能,要么获取EAX的商值,要么获取余数EDX的内容。那么这个程序究竟需要哪一个值呢?

  • MOVX eax, byte ptr ds:[eax+ebx-0x1]
    该语句将值赋给EAX,所以上述程序做除法的目的是获取EDX这个值。

image.png

接着我们尝试在下列两个位置增加断点。

  • 0x004053E8
  • 0x00405408

image.png

接着按下F9运行,查看输出的结果,分析如下:


  • 将“xboy”的第三个字母“o”取出解密
  • 数据窗口新增很多内容,完成字符串拷贝


反复继续按F9调试,发现它依次获取“xboy”中的值,再进行异或操作。


小结:最终解密的值如下图所示,“武汉男生感染下载者”逐渐出现。sub_405360函数我们在IDA中重命名为“DecodeString”,即解密字符串。

image.png

(6)sub_404018函数分析

第八步,继续分析sub_404018函数的功能。


记住地址0x0040CBA4,复制到OD中进行调试。

image.png

首先取消刚才解密的两个断点,然后跟随表达式“40CBA4”,在该位置按下F2增加断点,然后F9执行过来。


首先看到两条赋值语句,将值赋给EDX和EAX中,由于这个程序是使用Delphi编写,所以在call之前会将参数放到寄存器中,我们首先看看EDX中的内容。

image.png

在数据窗口中跟随数值,发现它们都是“武汉男生感染下载者”。注意第一个是我们刚才解密出来的内容。

  • 0040CBA4 . 8B55 EC mov edx,dword ptr ss:[ebp-0x14]
  • 0040CBA7 . A1 D4E74000 mov eax,dword ptr ds:[0x40E7D4]

1.png

接着按下F8执行,再按F7进入Call 0040018函数。大致浏览该函数后,发现又存在一个循环,我们的重点就是分析该循环,按下F2增加断点,再按F9执行过来。

  • 0x00404041

image.png

在数据窗口中跟随,发现ECX和EBX就是刚才所说的两个参数,一个是原始的“武汉男生感染下载者”,另外一个是解密之后的“武汉男生感染下载者”。再按F8发现这个函数比较两个字符串是否相同的操作。

  • CMP ECX, EBX

总结:回到IDA,我们将函数sub_404018重命名为字符串比较函数“CMPString”。

image.png

(7)loc_40CBBC功能分析

image.png

继续分析发现这里同样存在字符串解密和字符串比较的操作,并且解密字符编程了武汉男孩(whboy),这里不再进行解读。

image.png

解密比较成功之后,继续跳转到loc_40CBE6的位置。这里看到了三个call函数,它们又是什么功能呢?这三个call是熊猫烧香病毒最重要的功能,我们下一篇文章继续分析。

image.png

四、总结

写到这里,熊猫烧香病毒起始阶段的逆向分析就介绍完毕,简单总结如下:

  • 0x0040CB7E call sub_403C98
    – 重命名为:AllocStackAndCopyString
    – sub_403D08:分配内存空间
    – sub_402650:字符串拷贝功能
  • 0x0040CB9F call sub_00405360
    – 重命名为:DecodeString
    – 0x004053CC:循环入口点
    – 0x004053E8:获取“xboy”解密字符
    – 0x00405408:完成异或解密操作
  • 0x0040CBAC call sub_404018
    – 重命名为:CMPString
    – 0x00404041:循环入口点
    – 功能:字符串比较“武汉男生感染下载者”
  • 0x0040CBCC loc_40CBBC
    – 功能:字符串解密和比较操作,解密字符“whboy”
    – DecodeString
    – CMPString

希望大家可以有所收获!!

相关文章
|
数据可视化 物联网 Swift
谷歌发布开源LLM Gemma,魔搭社区评测+最佳实践教程来啦!
Gemma是由Google推出的一系列轻量级、先进的开源模型,他们是基于 Google Gemini 模型的研究和技术而构建。
|
NoSQL Redis Docker
深入浅出:使用Docker容器化改进Python应用部署
在快速演进的软件开发领域,持续集成和持续部署(CI/CD)已成为加速产品上市的关键。本文将探索如何利用Docker,一种流行的容器化技术,来容器化Python应用,实现高效、可靠的部署流程。我们将从Docker的基本概念入手,详细讨论如何创建轻量级、可移植的Python应用容器,并展示如何通过Docker Compose管理多容器应用。此外,文章还将介绍使用Docker的最佳实践,帮助开发者避免常见陷阱,优化部署策略。无论是初学者还是有经验的开发人员,本文都将提供有价值的见解,助力读者在自己的项目中实现容器化部署的转型。
|
Oracle 关系型数据库 分布式数据库
PolarDB产品使用问题之使用pxd安装PolarDB-X出现报错,该怎么办
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
缓存 测试技术 API
告别加班!Django/Flask高级技巧,让你的Web开发效率翻倍再翻倍!
【7月更文挑战第15天】探索Django与Flask高效秘籍:**利用模板继承减少重复代码,自动化测试确保质量,缓存提升性能。通过模板继承实现DRY原则,自动化测试框架如Django的`TestCase`和Flask的`pytest`加快调试,缓存机制(Django的低级别缓存API或Flask-Caching)优化页面加载。掌握这些技巧,告别加班,提升开发体验!
560 3
|
自然语言处理 运维 监控
产品解读 | 敏捷版云原生PaaS场景
更丰富的云原生应用治理能力让业务快速生长,更丰富的云原生应用治理能力让业务快速生长。
1603 75
产品解读 | 敏捷版云原生PaaS场景
|
缓存 监控 前端开发
调用摄像机播放画面,并且实现录制GIF动图预览和下载
调用摄像机播放画面,并且实现录制GIF动图预览和下载
|
数据库
.商品秒杀-超卖
.商品秒杀-超卖问题
267 0
|
运维 前端开发 jenkins
企业中多分支多人协作的git工作流程
企业中多分支多人协作的git工作流程
672 0
企业中多分支多人协作的git工作流程
|
安全 编译器 API
[病毒分析]熊猫烧香(上)初始分析(一)
[病毒分析]熊猫烧香(上)初始分析
1056 0
[病毒分析]熊猫烧香(上)初始分析(一)
|
存储 Java 数据格式
笔记19-字节缓冲流&字符流
笔记19-字节缓冲流&字符流
笔记19-字节缓冲流&字符流