我是如何浪费生命

关于《Professional Assembly Language》、《Debug Hacks》、《Gray Hat Python: Python Programming for Hackers and Reverse Engineers》、《Reverse Engineering Code with IDA pro》

毕业季,把毕设某Goldstein算法和FFT最小二乘算法实现后就扔了,借了一大堆逆向汇编调试的书。

我想让大家看看我是如何瞎折腾最终浪费生命一事无成的,请大家从这个反例中吸取经验教训,珍爱生命,远离折腾。

专心赚钱和把妹,别搞些没用的。

中国谚语

Gray Hat Python

跳坑从一本Python灰帽子开始,因为对Python的熟悉和兴趣加上某种机缘巧合,从图书馆借来看了一阵。

首先是开发环境的搭建,据作者说搭建开发环境是个痛苦而无聊的过程。对新手很棘手、很消磨斗志和耐心。但对我这样已经在Linux下被虐过多少遍的人完全没感觉了,即使在windows上也轻车熟路装好Python。唯一不爽的地方在于,作者说windows下调试乐趣横生所以不考虑linux,我只好装了个虚拟机xp玩。当然,作为有个性的Linuxer,我的做法是在linux宿主机编辑文件共享给windows虚拟机用,真尼玛蛋疼。

接着就是些基本理论,通过这本书我第一次发现原来Python和C集成的这么好,于是把Python C API翻译了一遍……后来在《Unix设计艺术》中看作者说Python最开始设计就是为了跟C集成……

总之,Python强大的C外挂= =。但总有些不舒服的地方,尼玛Windows和Unix函数参数进栈顺序……

再往后是调试器设计的基本知识,卧槽啊,第一次了解CPU,那个看得一愣一愣的,几次差点睡着。最后看了好几遍又回头了好几遍又看了好几本其它书讲才总算知道有几个寄存器且有什么用栈是什么软硬件断点实现,现在什么平坦内存模型内存断点堆是什么还是搞不清,传说中的Intel开发者手册更是没勇气去看。

接着就开始在虚拟机xp上开始照着自己写调试器了,好在作者对各种Win32 API讲得清清楚楚明明白白,又在网上提供源码和各种结构定义。不然您看着满目错误的中文版就跪吧。照着网上提供的代码试了不知道多久终于把这个向pygdb致敬的调试器写出来了。

不过Win32 API完全给我看跪了。在byr上看有人说Linux的系统调用比windows好懂1。最开始还想将这个具简单的调试器移植到linux下看看,然而,现在还什么都没看。

之后,慢慢看吧,还没动手,用pygdb部署软钩子,进程快照和回滚,处理非法内存操作貌似很厉害的样子……

再往后看到用Immudbg针对特定shellcode寻找漏洞,我觉得得回头找点其它书补补相应知识了,很难看懂作者在说什么了……于是,IDA pro

IDA Pro

前面讲汇编和IA-32处理器,栈及堆的基本原理可执行文件的区段指令集啥的,看得云里雾里,不知道是因为看雪翻译的问题还是我弱爆了……

看到PE格式和ELF格式文件格式细节完全跪了没,最终也没理解什么GOT/PLT,动态链接成员结构啥的链接加载啥的……然后就跳过了。于是后来看到《Debug Hacks》听作者讲GOT/PLT时又跪了……

接着看了看第一个例子,跟踪执行流。虽然下了一个IDA Pro以供调教,然而终于也没开虚拟机……我说,我还是回头看看汇编在来看例子吧……于是这本书又暂时按下。

Debug Hacks

一本日本人写的书,风格清新脱俗,平易近人。看讲gdb那货直接把我迷住了,哇草啊,gdb这么好玩啊,哇草啊,比我写的那啥调试器强大多了。

看到byr挂站排行榜脑子一抽写了个byr挂站脚本扔到Luoyun云平台上,结果web-ssh关掉了看不到标准输出了。然后竟然在Stack Overflow上看到有人用gdb来重定向程序输出,尼玛啊,这瞬间就感觉调试器无敌了。

结果就是,在看到这本主要讲linux平台调试的书时顿时爱不释手,特别是前几章讲gdb的,再加上几个例子太好玩了。

最sb的事接着来了,参照书上写了个对NULL写入的Linux内核模块接着竟然在宿主机上加载了……卧槽,久违的kernel panic。好吧,正好复习下reisub大法,可是它没重启动,最后还是长按关机键……

后面讲crash倒兴致了然了,虽然在gentoo上顺手装上,却没啥动力让系统吐核……虚拟机又懒得开。

顺口吐槽,原来pdb这么像gdb啊……

不过还是好多不懂,linux下线程共享资源,看得完全跪掉了,现在也没搞明白怎么回事。

gdb或objdump反汇编出来的汇编代码语法是AT&T的,和Intel差别还挺大,之前讲windows的IDA pro和Gray Hat Python都是Intel语法……我喜欢AT & T

于是抛弃了几本讲MSMA和NSMA的书选择了《Professional Assembly Language》。

Professional Assembly Language

一本完全遵循AT&T语法,在linux平台下,实用gcc/gdb/ld/as/gas/grof等工具的书啊。

第一个例子无压力通过,虽然不了解语法云里雾里,但之前硬件基础讲解还是很棒的,就是只是32位的,我的系统是64兼容32位,有时候要加些参数。相比而言,在这个问题上只有《Debug Hacks》做的好,64位和32位都讲得挺清楚。

打算接着熟悉下指令

再接着打算看看Linux系统调用。回头学习Linux去= =

以上只是打算……

K & R

为什么乱入了一本书,带着浓重Unix风格的C语言圣经。为了看懂那些书中的例子在调试些什么C程序,只好翻K & R去了。

K & R也许真不适合入门,但我还是想给初学者推荐(莫喷……)。

听说K & R不符合C 99规范,暂不管它,Fortran这规范都2008了也没听说哪个编译器实现了,还有好多东西还是Fortran77。gcc不报Warning就好。

Coursera

最不能理解的是,这个时候还跑去看High Performance Scientific Computing和Machine Learning。开着八线程学Fortran和Octave(matlab)。

Summary

大概就是这样,被我浪费掉的,这么多人都忙着旅行恋爱的享受最后青春的,我选择的,大学最后光阴。

大家跟我一起唱:

珍爱生命,远离计算机
珍愛生命,遠離計算機
Cherish life, away from the computer
大切な命のため、コンピュータから離れてください
Chérir la vie, loin de l'ordinateur
Берегите жизнь, вдали от компьютера
Cherish Leben, weg vom Computer
컴퓨터에서 멀리, 생명을 소중히
Apreciar la vida, lejos de la computadora
++++++++[>+>++>+++>++++>+++++>++++++>+++++++>++++++++>+++++++++>++++++++++>+++++++++++>++++++++++++>+++++++++++++>++++++++++++++>+++++++++++++++>++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>>>>>+++.---<<<<<<<<>>>>>>>>>>>>>.<<<<<<<<<<<<<>>>>>>>>>>>>>---.+++<<<<<<<<<<<<<>>>>>>>>>>>>>>++.--<<<<<<<<<<<<<<>>>>>>>>>>>>>+.-<<<<<<<<<<<<<>>>>>>>>>>>>>>+++.---<<<<<<<<<<<<<<>>>>>>>>>>>>>.<<<<<<<<<<<<<>>>>.<<<<>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<>>>>>>>>>>>>>+.-<<<<<<<<<<<<<>>>>>>>>>>>>>--.++<<<<<<<<<<<<<>>>>>>>>>>>>>---.+++<<<<<<<<<<<<<>>>>>>----.++++<<<<<<>>>>.<<<<>>>>>>>>>>>>+.-<<<<<<<<<<<<>>>>>>>>>>>>>>>-.+<<<<<<<<<<<<<<<>>>>>>>>>>>>+.-<<<<<<<<<<<<>>>>>>>>>>>>>>>+.-<<<<<<<<<<<<<<<>>>>.<<<<>>>>>>>>>>>>>--.++<<<<<<<<<<<<<>>>>>>>>>>>>>>++.--<<<<<<<<<<<<<<>>>>>>>>>>>>>>-.+<<<<<<<<<<<<<<>>>>>>>>>>>>>>---.+++<<<<<<<<<<<<<<>>>>.<<<<>>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<<>>>>>>>>>>>>>.<<<<<<<<<<<<<>>>>>>>>>>>>>---.+++<<<<<<<<<<<<<>>>>.<<<<>>>>>>>>>>>>+++.---<<<<<<<<<<<<>>>>>>>>>>>>>>-.+<<<<<<<<<<<<<<>>>>>>>>>>>>>>---.+++<<<<<<<<<<<<<<>>>>>>>>>>>>>>.<<<<<<<<<<<<<<>>>>>>>>>>>>>>>---.+++<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<<>>>>>>>>>>>>>---.+++<<<<<<<<<<<<<.

人生得意须尽欢:)

花堪折时只须折:)

补记

Fri 24 May 2013 07:03:04 PM CST

谣传要交论文,基本上是两天给弄完了,好在之前真是认真了解这个课题了,吹起牛来一气呵成。

快毕业了一堆事,又是转党组织关系的又是填毕业登记表,又是毕业照体检。

班里没有毕业旅行感觉太好了,毫无兴致。

毕业把妹这种事……我还是不抱希望了……

整日整日地沉迷在图书馆和计算机前,偶尔的偶尔一个人出去转转。

哈,东边小操场没什么人,太喜欢在那边跑步了,江南的夜色依旧很美。记得有次跟着一个妹子跑了半个小时,第二天直接虚掉了= =

这几天就看了Professional Assembly Language一本书,断断续续看到浮点计算。把书上的代码跟着打了一遍,不得不说这本书真棒。例子都是神来之笔。

开始看《Hacking: The Art of Exploitation》, C语言那部分的例子真是让人觉得相见恨晚,由于看过以上几本书对汇编和堆栈比较熟悉发现看着真是享受。准备把书中所有的代码打一遍,太好玩了。

借了本《别闹了,费曼先生》,看得五体投地,这才是真黑客,真物理学家和数学家。

借了本《数学大师:从芝诺到庞加莱》,不得不说多好的一本书译得真有些不好懂……

这两本书我想单独写读后感。

因为毕业季一堆事,Coursera上Machine Learning这周到现在基本没看,High performance Scientific Computing直接被落下了,上周的视频还没看完,再加上进入Fortran和makefile的课题了,总有些力不从心。

最后吐槽下Girl-atlas,新上传的图像不仅打上水印而且只能查看缩略图了,而且下载链接也被移除了。很不爽,不能做壁纸的小图完全没有兴致再用脚本抓了。

结果愤而转向其它网站开始抓图……比如Motu(* Maybe 18X,慎点 *), 再也没有girl-atlas老少咸宜高清无码的品味了。无论是图像更新及时度,图像质量,网站质量,girl-atlas做的都是最棒的.

FootNotes

Footnotes:

1

Deepin 开发者lovesnow(小邪兽)在贴吧贴过如何枚举linux下进程,好厉害好厉害,以前还见过他用python来hack植物大战僵尸= =,膜拜膜拜膜拜。