做逆向工程該學x86彙編還是arm彙編,還是都要學?


看到有人推薦王爽的彙編語言。。。我這裡實名反對下。。。那本書完全過時了,16位實模式現在基本沒人用了,直接就上各種段寄存器通過乘個16再獲取線性地址這種東西很容易讓人抓錯重點,如果要學彙編建議直接先從32位平坦保護模式學起,可以直接看《深入理解計算機系統》這本書。等先把平坦模式學好了如果再對段寄存器啥的有興趣可以看看《x86從實模式到保護模式》。

至於學哪個,一般都是先學x86,學會了其他的都比較好學,畢竟很多相通點。比如我當時學ARM,因為有x86的基礎,2-3天就看完了。。。


先從x86學起,完全理解之後,x64,mips,arm兩種,都是大同小異,很容易就能學會。

我覺得可以先從那本著名的王爽《彙編語言》開始。

做逆向的話也不需要用彙編寫程序,在我看來更關鍵的是對系統的理解,所以你也應該看一下計算機原理、操作系統相關的書。比如二進位程序在操作系統中如何載入和鏈接,理解這個對逆向非常重要。

一定要讀一下《程序員的自我修養》。

另外最近出了一本《Linux二進位分析》,最近才有人譯出來的書,對Linux環境下的逆向非常有幫助。

Windows下的逆向可以用一本韓國人寫的書《逆向工程核心原理》進行入門,非常基礎。

有了一定基礎之後再去看著名的開源電子書Reverse Engineering for Beginners,安天有出翻譯版本,叫做《逆向工程權威指南》。這本我覺得還是有一點基礎再看,介紹各種架構都很全。

然後就是我覺得逆向的關鍵還是經驗積累,彙編這東西真的是你看多了自然就熟悉了,去找一些crackme或者CTF題來自己研究研究,慢慢就找著套路了。


同反對王爽彙編,因為是課程教材所以從頭到尾看完了,從他「我們隨便找一段操作系統中可用的內存空間」開始想撕書。

至於題主的問題,你先撿到哪個就從哪個開始。


第一次有了喜歡的書,還可以同時看四種彙編(x86,x64,arm,mips),兩種喜悅相互重疊,這雙重的喜悅又帶來了更多的喜悅。

多學總沒錯


彙編都是相通的,會一種,然後熟悉下指令集和寄存器組,就可以寫另一類彙編了。


這麼說吧

掌握不同指令集的指令是點

分析數據結構,還原演算法邏輯是線

理解架構設計,完整還原是面

逆向工程很多時候都是在「線」上做文章,有很多經驗和發散思維的要求,至於「點」的學習,學精一門,互相套著學就ok了。


逆向只是工具,對具體專業的理解才是王道


逆向工程的話,×86還是arm?

這個問題有點意思,說的直白一點吧,就是破解軟體該學什麼彙編語言。

在大牛的教程里,他們都說,你不需要太會彙編,只要能看懂就行,看得懂反彙編出來的代碼就行。

而且

大部分人學逆向都是為了破解掉軟體的付費購買註冊碼的功能,或者找到漏洞,例如微軟的系統激活密鑰,就被破解了,貌似是一個關於橢圓曲線的加密演算法,還有就是QQ儲存在本地的加密密碼文件,也有業內高高破解過,扯得有點遠了,逆向這塊,三分技術,七分運氣,演算法功底很重要。

還有一部分是為了看源碼,然後寫出一個差不多的。

至於到底該學哪種彙編,精通一種就行,其他彙編語言,不過是幾個下午的事,建議你先學好一門彙編再過來提問。

以上


看intel的開發手冊吧,直接上x64,x64比86在很多地方簡化了,對於理解機器語言有很大幫助


arm和x86不衝突,看你要主攻哪個平台,對應學就行了


多逛看雪論壇,上面的很多教程還是可以看的,然後關注下《加密與解密》,這本書第四版快出來了。至於彙編,了解一些基本概念和常見的指令就行,剩下的就是熟能生巧了


win學X86

安卓逆向原生程序學arm


@祝同學給你小神秘


取決於你要逆什麼東西


推薦閱讀:

機器學習的科學家如何判斷計算機或是機器人的人工智慧是否黑化,即覺醒但不表露?
三十年後
[SOSP 15'] Fast In-memory Transaction Processing using RDMA and HTM

TAG:逆向工程 | x86 | 彙編語言 | 計算機科學 | 反彙編 |