现在的位置: 首页 > 综合 > 正文

I/O与逆向

2013年10月27日 ⁄ 综合 ⁄ 共 859字 ⁄ 字号 评论关闭

I/O与逆向

刚进大学学pascal时候就知道了input,output。可以说自从有了冯诺伊曼,就有了I/O。据说有老冯的思想并不能包含计算机界的全部,但我想别的冯xx架构计算机应该也有I/O。

I/O跟逆向有啥关系呢?这要从头说起。

我想很多人开始看反汇编代码都有个疑惑,那就是那么多反汇编代码,要从哪里开始看?看到哪里?中间那么多代码,都要一句一句看么?

我经常想,如果哪天给我一堆汇编代码,我不知道从何开始,到何结束,中间n多意大利面条一样的代码,我该怎么去分析呢?

这3个疑问,伴随了不少人的成长。直至昨天,我还为这个问题而发愁,直至我理解了冯诺伊曼的I/O以前,我还为此担忧。

逆向分析从Input开始,到Output结束。

这里的Input并不单单是键盘鼠标输入,Output也不单单是显示器或者音响,这是一个分析概念。

比如分析网络软件,我们的I/O可以理解为网络数据以及相关函数。文件处理软件,我们以文件操作函数为操作节点。

对于n多反汇编代码,怎么从中去粗提精呢?可以理解为汇编代码的操作数来源于内存,归结于内存,因此,我们粗略分析时候,可以住要关心对内存的操作,忽略寄存器之间的数值运算。

比如:
     mov eax, [esi]
     add eax, eax
     inc eax
     mov [edi], eax

对于这样的数据,我们粗略分析时候,可以只关心内存的变化,而忽略中间的操作。只要抓住了I([esi])/O([edi]),分析起来就简单的多了。

这样一来,分析时候如果能找到合适的I/O,就大体确定了分析起点和终点,分析中也可以利用这个道理,尽量缩短分析流程。

会不会不存在这种I/O呢?答案是否定的,因为我们都跟冯诺伊曼过活。
会不会找不到这种I/O呢?答案是不定的,因为这取决于个人能力。

注:我很笨,对于自己所走的路,头脑里总会有一些不解,时间长了,也就找到了答案。还记得当初花半个月搞懂重定位原理,搞了半年才知道内存里结构是什么样子。这些东西对于高手来说都是很平常的,但我花很长时间自己体验出来,总是有些兴奋。

抱歉!评论已关闭.