反汇编的一些基本知识
在程序届有一句名言:如果你能读懂汇编,一切程序对你来说就是开源。
在程序届有一句名言:如果你能读懂汇编,一切程序对你来说就是开源。所以要抵达黑客层次,不熟练的掌握分析技巧那是不可能的。我们看看一些的工具和相关技巧,后续我们再看看一些高级方法该怎么用。
常用的工具一般需要执行三个步骤:
1,加载要反汇编的二进制文件;
2,从二进制文件中找到所有机器指令;
3,将指令转换为汇编语句;通常第2步是一个难点,由于机器指令与通常的二进制数值无异,因此很容易把不是指令的数值认为是机器指令。为了尽可能降低步骤2的错误,反汇编算法常采用两种模式,分别是线性反汇编和递归反汇编。
线性反汇编其实就是从头走到尾,将所有二进制数值都认为是机器指令,然后将其转换为汇编语句,我们常用的Objdum就是如此。这当然会产生问题,很显然不可能所有二进制数值都是机器指令,因此这种做法容易将原本是数据的数值看做是指令。由此会带来两种错误,一种是将数值转换成无效机器指令,一种更糟糕,数值正好对应了某条机器指令,于是给后面的分析带来巨大的干扰.
接下来我们看看递归反汇编。它的基本思路是寻找程序的控制流,它首先从main等程序入口着手,然后先是线性,如果遇到jump等指令,它就会跳到jump对应的地址继续反汇编。这种情况也容易出问题,因为程序的控制流很难追踪,因为很多跳转其实是隐性跳转,也就是这种跳转不会在二进制文件中给出具体地址,需要在运行时才能确认具体地址。
致芯科技可以对程序进行解密后进行反汇编,得到汇编代码,我们是不能直接得到c语言的。一般只要懂汇编语言的工程师也懂C语言,那么就可以照着汇编语言写成c语言。不过这个过程需要比较长的时间和耐心去做。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !