unicorn模拟执行Miniduke病毒自定义的SHA1算法

对于逆向工程师来说,直接从逆向分析的二进制文件中调用函数得到结果,这样可以绕过很多不必要的工作量。虽然某些情况下可以理解函数逻辑并用更高级的语言重新实现它,但这并不是一直可行的,而且原始函数的逻辑越复杂就越行不通。在处理自定义散列和加密时,这是一个特别痛苦的问题——计算中某处的单个错误将导致最终输出的完全分歧,这是一项艰巨的调试工作。

Miniduke病毒恶意软件使用了自定义的SHA1算法,该算法在原始和修改后的 SHA1 中使用的常量都相同,因此差异必然出现在函数的 1,241 条汇编指令之一中的某处。我们不能说这种调整是否是故意引入的,但事实仍然是恶意软件作者越来越喜欢插入这样的“惊喜”,而处理它们的责任就落在了分析师身上。为此,我们必须首先了解函数期望其输入并产生其输出的形式。

本文将介绍使用unicorn执行Miniduke病毒自定义的SHA1算法,得到其输出结果。

上下文环境

本文模拟执行的函数是IDA中名称为SHA1Hash_407108的函数,该函数实现了Miniduke病毒自定义的SHA1算法。经实际分析调试发现,SHA1Hash_407108函数使用自定义调用约定,其中要进行处理的散列的缓冲区长度在ecx寄存器中传递,缓冲区本身的地址在edi。eax是固定值0xffffffff,我们可以将它视为一个常量。有趣的是,恶意软件还会在每次调用此函数时将缓冲区长度 ( ecx)设置为仅对缓冲区的第一个字节进行哈希处理,如图中的0x40。
在代码中体现为:
一、SHA1BUFF_LEN = 0x40
二、 CONSTVAL = 0xffffffff
三、EDI赋值为BUFFERADDR的地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摔不死的笨鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值