我最近遇到了以下汇编指令序列。

call    ds:WSAStartup
push    ecx
push    edi
mov     ecx, 69E65AC4h
mov     edi, 2776452Ah
pop     edi
pop     ecx
jmp     short loc_ABCD


请帮助我理解以下4条特殊说明:

mov     ecx, 69E65AC4h
mov     edi, 2776452Ah
pop     edi
pop     ecx


为什么要搬家将值直接写入寄存器,只是用接下来的2条指令将其覆盖?

添加:首先,谢谢大家的投入。我真的很感激。最让我感到困惑的是,似乎有意思的是,所讨论的可执行文件看起来很干净,没有任何形式的代码混淆。如此少量的混淆对于击败AV来说有多重要?我想,不太相关。

我在RE上也看到过这个帖子'mov edi,edi'的目的是什么? 。
RE用户QAZ在接受的答案中提到了有关运行时热修补的支持。可能是这些东西吗?

评论

你好您可以发布文件的哈希值吗?我想检查一下混淆。谢谢。

@alexanderh。我在这里可能不了解某些内容,但是如何通过文件的哈希值检查它的混淆性呢?谢谢。

因为我可以使用哈希找到可执行文件。

关于您的附录:不,该代码不是出于热修补目的而插入的。

#1 楼

没有更多的信息,它看起来像是故意的混淆:没有最终效果的指令被插入到代码中,从而使其更难阅读。我怀疑代码是由编译器生成的。

评论


我也考虑过了。但这符合正常的“合计”意义指示。我什至看不到它对混淆目的有用。里面的4条说明非常容易准备和遵循组装。完全奇怪:)

– PSS
13年6月2日,下午3:39

然后发布更多上下文。之前和之后的一些说明。

–滚轴
2013年6月2日,凌晨3:40

更新。调用WSStartup,然后立即跳转。没什么特别的。

– PSS
13年6月2日,下午3:45

看来绝对是令人困惑。编译器非常擅长消除这样的无用代码(通过基于非内存的活动度分析,这是最古老,最简单的全局数据流分析之一),因此我怀疑代码是否会由编译器生成,除非禁用了优化(我什至对此表示怀疑,因为这些值未在任何计算中使用)。

–滚轴
2013年6月2日7:29

它通常通过插入无用的指令来试图打败AV签名,否则这些指令将允许与呼叫匹配。

–彼得·弗里
2013年6月2日21:27