Lab15 恶意样本分析-常用的反汇编总结

Lab15-01 常用的反汇编总结

在《恶意代码分析实战》的第十五章总结了一些常见的反汇编案例,包括线性返回编译器和非线性返回编译器的对抗。这里总结了其中提到的几个原理,每个都配合着实验了说明,这篇笔记只是我在做分析时的一些总结,方便后续回来看。

相同目标跳转指令

问题

在x86汇编指令中,无条件跳转指令jmp是跳转指令之一。在一些恶意样本中会针对的插入一些指令来完成这个无条件跳转,如下

在这里插入图片描述

从上面的指令看处,jz jnz都是跳转到了call的下一条指令,但是这里有一个问题,如果跳转指令要跳转到一个函数,不可能从函数的第二条指令开始执行,应该是从头开始执行,同时这个跳转地址也是红色的,因此这里的call指令是一个对抗指令。

解决

解决的办法是手动patch掉这个调用指令,每个call对应的机器码都是5个长度的指令,为了能正确时程序变得正常

  • 首先用鼠标选择call指令

  • 选中后按下D

    按下后程序会变为数据的形式,但是0xE8会被单独提出来,剩下的指令会单独成一个快,类似如下

    jz short near ptr loc_4011C5
    jnz short near ptr loc_4011C5
    db 0E8h
    loc_4011C5: db xxx
    			db xxx
    			
    
  • 如上的形式后,从loc_4011C5开始使用C键转为指令,如下

在这里插入图片描述

这里需要关注的是跳转指令跳转到每一个函数快的入口应该是从第一条指令开始执行,不是从第二条指令。

固定目标跳转

问题

固定目标的跳转是程序会永远都会执行跳转,即永远为真的情况如下

在这里插入图片描述
这里的xor eax,eax会将eax置位零,同时修改ZF=1,导致jz指令会永远执行,这里同样的注意到,跳转指令

jz shor near ptr loc_4011C4+1
loc_4011C4:
	jmp near ptr 94A8D521h
解决

相同目标跳转类似,这里考虑跳转指令还是会执行到loc_4011C4的下一个指令,这是不合理的,解决办法为

  • 首先用鼠标选择jmp指令

  • 选中后按下D

    按下后程序会变为数据的形式,但是0xE8会被单独提出来,剩下的指令会单独成一个快,类似如下

    xor eax,eax;
    jz loc_4011C5;
    db 0E9h
    loc_4011C5:
    	db xxx
    	db xx
    
  • 如上的形式后,从loc_4011C5开始使用C键转为指令,如下

在这里插入图片描述
这里还是会忽略掉0E9h这个数据转为指令。

总结1

相同目标跳转指令和固定目标跳转这两个技巧都是在jx x可以是z nz ,..,跳转指令后插入0E8(call) / 0E9 (jmp)一个字节,如下

;原始指令
jz tartget+1
jmp invalid_address
;修改后
jz target_2
db 0E9h
target:
	xxx

这两个技巧可以统称为流氓字节

案例1

这个案例样本是Lab15-01.exe,要求如下

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值