|
程序员的吸星大法-IDA反汇编工具初探(1)
看过<<笑傲江湖>>的朋友一定知道吸星大法吧,这是一种可以吸取他人内功来使自己功力增长的神功,(段誉的北冥神功也是这样, 扯远了...).对于程序员来说,增长自己编程功力的一个好方法是阅读其它人开发的程序的源码,从而把别人的技术来消化成为自己知识,这是不是很象吸星大法? 但开源的程序毕竟是在少数,大多数程序都只会分发可执行文件及相关文件,这时我们要想查看此程序的代码,就只有把它反汇编,当然这需要一定的汇编功底,但是一个好的反汇编工具能为你阅读反汇编出来的程序提供非常大的帮助. 了解反汇编的朋友也一定知道WINDASM这个有名的反汇编工具,比如我们用WINDASM反汇编一个程序,在其程序入口点反汇编得到如下代码: //*********************** Program Entry Point ***************** :00401000 6A00 push 00000000 :00401002 E8FF050000 call 00401606 :00401007 A316304000 mov [00403016], eax :00401007 E8EF050000 call 00401600 :00401011 A30E304000 mov [0040300E], eax :00401016 6A0A push 0000000A :00401018 FF350E304000 push dWord ptr [0040300E] :0040101E 6A00 push 00000000 :00401020 EF3516304000 push dword ptr [00403016] :00401026 E806000000 call 00401031 :0040102B 50 push eax :0040102c E8C9050000 call 004015FA 如果不联系上下文及知道这是程序入口的话,很难看出来这一段代码到底是干什么的,但IDA就不一样了,它不但会反汇编程序,并会尽量分析程序,并加上相应的注释(正因为这样,IDA反汇编一个大的程序会花非常长的时间),请看下面一段IDA反汇编出来的代码,是不是明了多了? .text:00401000 push 0 ; lpModuleName .text:00401002 call GetModuleHandleA
|