首先:
是用ida看出来的。这个是一个很bug的工具。。
然后,为什么会看烦起来:
因为 objdump -d 命令出来的代码是只有 elf文件的.text段的吧,就漏掉了其他段,那些初始化的 .data段 .rodata段 里面都是答案!!!!
因为重定位的时候,那些符号全都变成了绝对地址?吧。 在-d选项出来的汇编文件中,可以经常看到mov 一个地址到一个寄存器里面去,但是怎么搜都搜不到这个地址。。。。。
objdump居然没有给我看其他的段。。。。。。
虽然我只知道他的-d选项。。。。。。。。。
然后就是,我写的是32位版本:
发现里面的每个函数都是独立的,参数都是通过栈帧来传递的,就是说,想了解哪个函数是干什么的,只要找到这个函数所在的位置就好了。
如果看到ebp+8 ebp+12 什么的,想知道传了什么参数,就到调用函数里面去找他mov了什么进去,
还有一个栈帧的esp通常都是在进入这个函数之后就被确定了,把这个esp减去多少个数之后,这个esp就不会再改变了,期间,向这个栈帧里面填东西,读东西,都是用esp或者ebp加减偏移量来实现的。
不知道这个是老师把程序优化了之后的结果,还是gcc就是这么的nice。
不知道64位的是不是用寄存器来传的。
下面都是废话了
刚开始看的时候,没有什么思路,就从 _start 开始看,然后发现还有个main。。。。就不知道从哪里开始看起。
几天后老师上到elf文件的格式的时候,知道可以用readelf命令看下elf文件的头,里面可以看出整个程序的入口。虽然知道之后也没有什么卵用。
所以我还是按照从入口开始之后的顺序,看到jump就跟着他跳。。。。。。
结果发现很烦,因为jump跳来跳去的,然后跳到像:
这种地方的时候,就不知道他要跳到哪里去了。
心里是有感觉应该是跳到系统调用的内存去了,但是那块知识很模糊,反正最后就是很烦。
后来,慢慢去看老师给的bomb.c文件。
里面开头的介绍英语,翻译出来之后,好像是说,那个邪恶博士提到什么逆向工程。。
然后百度到了看雪论坛,虽然里面的东西基本看不懂,但是知道了ida和他的f5。
然后在虚拟机里面安了个盗版的ida pro。
没有下到汉化版的,于是就不知道安装的时候都同意了哪些东西,反正成功导入了bomb,然后找到main。按下f5,结果出来的代码和老师给的差不多。。。。
厉害了。
然后就是第一个phase1,f5直接就给出了答案。。。就是一个放在.rodata的字符串。。。。
之后的几个密码,几乎是按着书上的知识点来设置的。。。。
最后的地方是有一个隐藏的密码的,用的是二叉树?感觉是二叉树。他调用了一个叫 <__strtol_internal@plt >的函数,百度不怎么好找这个函数是干什么的,
这个函数是把输入的指针指向的字符给变成数字的,如果里面就是一个表达数字的字符串的话,就不会出错。
其他的介绍就没有看了。是函数(atoi() )调用的他。
最后 我的答案。不唯一。。。
ps:crack me 看起来很厉害的样子。