3.28学习记录——花指令初了解和学习

什么是花指令

花指令(junk code)是一种混淆静态分析的手段,类型大体分为两种:不会被执行的花指令和会被执行的花指令

花指令类型

类型一:操作码污染

这类花指令被插入正常代码中,用来迷惑反编译器,但是不会被实际执行。这里简单举个例子:
在这里插入图片描述在一个输出helloworld的代码中使用内联汇编直接插入操作码,其中的0x33是xor指令的操作码,这样可以起到迷惑反编译器的作用,用ida试试看
在这里插入图片描述但是在编译过程中编译器会自动优化代码,高版本IDA有一定的反混淆功能,这样可能会把花指令给优化了

类型二:破坏堆栈平衡

上面是通过操作码污染(0x33模拟xor指令)来构成花指令,还有一种比较常见的不被执行的花指令
在这里插入图片描述
这里先清空eax寄存器里的值,然后直接修改栈指针,这里可以看到在visual studio调试中报错堆栈不平衡了,编译后用IDA看看在这里插入图片描述emmm,按理说这样做应该会导致不能查看伪代码,但是这里可以正常查看(可能是9.0版本的IDA有纠错能力吧),但是还是可以看到在汇编语言界面出现了bp栈指针模糊的提示

类型三:构造冗余操作

在这里插入图片描述这次在代码中间插入了一段代码,push eax会减少esp4字节,紧接着add esp, 4又恢复esp,这种压入栈后立马弹出的操作虽然不会对主程序造成影响,但是可以起到迷惑IDA的作用在这里插入图片描述用IDA打开也是发现了栈指针模糊的情况

例题

basectf2024 Basere

拿到附件先查壳在这里插入图片描述没壳用IDA看看,进来就爆红,而且这段还不能看伪代码在这里插入图片描述还发现调试不了,一调试就闪退,猜测有反调试在这里插入图片描述接下来先静态分析,先处理花指令,发现了jz和jnz,一个为0跳转,一个非0跳转,这两个是条件互补花指令的标志,放大看
在这里插入图片描述因为存在两个条件互补跳转,会跳转到下面的mov指令,所以需要把mov指令nop掉,这里使用edit里的patch program/Change Byte来调整在这里插入图片描述这里的89代表的是mov指令,将其修改为90(代表nop指令)就可以恢复了在这里插入图片描述这里就修好了,修好后用Ctrl+p标记为函数,就可以查看伪代码了;再打开shift+F12查看在这里插入图片描述发现base64码表,跳转过去发现存在交叉引用,顺着找过去,发现还有一处花指令在这里插入图片描述一样的操作nop掉,发现start函数伪代码变多了,而且出现了主调函数在这里插入图片描述追踪过去发现了密文,于是直接去搓,发现不太对,可能在nop的时候漏了关键信息,既然看到了码表,那么就有理由怀疑可能存在base64换表,尝试动调,前面也说过,存在反调试在这里插入图片描述果然发现了TLS函数,但是不太会绕过,就尝试纯静态分析了在这里插入图片描述后面也是在一直交叉引用中找到了这个加密函数,就是将标准表和表长进行比较,然后进行计算,计算后交换结果,最后得到换的表后就可以解了在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值