【软件逆向-i/c整型除法的反编译的三种方法】此文章归类为:软件逆向。
接上篇:[原创]i/c整型除法的汇编优化-软件逆向-看雪-安全社区|安全招聘|kanxue.com
关于整型除法的反编译,鄙人有三种方法:
1、IDA F5
2、正则表达式自动化解析
3、黑匣子思想
下面依次介绍:
1、IDA F5
2、正则表达式自动化解析
利用正则表达式,根据汇编定式反编译一段汇编逻辑(即实现一部分IDA的功能)。
源码及项目见附件,可供自动化处理参考。
现支持:VS2019的MSVC编译器,上文提及的所有定式。其余需要,自行拓展。
3、黑匣子思想
这是我自己提出的一种反编译手段,考虑一段汇编序列仅影响某个寄存器,其余寄存器的影响可以忽略时(即易失性寄存器)。则我们可以将该段汇编序列看成一个黑匣子。如图:(这是unsigned int ecx=[ebp+x]/7的汇编序列)
这段汇编中,[ebx+x]作为黑匣子输入,eax、edx是易失性寄存器,最终黑匣子输出是ecx。
因此[ebx+x]--->黑匣子--->ecx,我们只需要变化输入端,观察输出端即可猜测出黑匣子做了什么。
对于与上文不同,其它编译器产生的除法汇编序列,我们可以利用这个规则,轻松的猜出除数。
ecx=[ebx+x]/c,将[ebx+x]赋予一个素数积0x0D4C 2086=223092870=1*2*3*5*7*11*13...便于整除。
则通过执行完的ecx易得:c=0x0D4C 2086/ecx
实战如图:
1、Ctrl Shift V 复制硬编码到OD
2、令[ebx+x]=0x0D4C 2086
3、执行到序列尾
4、c=0x0D4C 2086/01E64DCA=7
此方法,相较于F5肯定费事点。
但相较于手撕 MagicNum 魔数显然通杀各定式,且非常省事,在一定场合有其妙用。
最后,祝大家代码少出BUG~谢谢观看。
更多【软件逆向-i/c整型除法的反编译的三种方法】相关视频教程:www.yxfzedu.com