反匯編演算法
1. 如何快速讀懂反匯編的匯編代碼
簡單的逆向工程其實不難,IDA加Hex-Rays插件,可以直接把匯編還原成C代碼。雖然還原出來的代碼比較怪,但是已經比直接看匯編代碼強多了。
靜態反匯編工具: IDA Pro
動態反匯編工具: ollydbg/x64dbg
Windows內核調試工具: windbg
2. 在反匯編中怎麼學習反匯編演算法
先把編譯原理學懂弄通後,再試著做一個簡單點的編譯器,然後再談逆向工程。
3. 如何學習匯編語言和反匯編相關問題
哈,你這觀點有點問題。第一在這開始學這匯編時不要多想那反匯編的。你想嘛,正的順的還沒學好就要一起學那反的逆過程了,別的不多說,那可就要多掌握更多的軟體使用了也是多麻煩吧。
最好的學匯編的方法,是花幾十元錢去淘寶網購一塊開發板,並讓老闆給你配上大量的列程,你再在網上找點視屏教學,比著這些一個一個的做,在這做的過程中,再把根據單元片機廠家的資料把晶元內的硬體資源搞明白,在這我不建議你看什麼誰寫的書,因他們都不可能把最新晶元的新功能寫進去,這只有廠家的資料中才有的。
學匯編能做什麼,起碼可做很多隻學c語言做不到的事,比如加,解密。比如在前期的3Q大戰中要有話語權,要真知事情的真象,這只有熟知熟用匯編的人才可辦到。我的觀點,你就是只想做程序員那隻會C都要還遠遠的不夠,更不要談你想怎麼真正的開發,應用設計計算機了,因這就要知計算機最底層的根本你才叫真正懂計算機的。你才可把計算機玩於股掌之中。
好了,最後在這我不否認C,它具有編制方便,編程速度快,更有利於計算方面的程序開發。它應該是程序員的ABC。。。。。。
還有什麼不清楚的可再追問我。
4. 怎樣可以快速學會反匯編分析
回復 1樓 天使聯盟 的帖子這些東西可以去「看雪」或者「UpK」這兩個論壇看看,技術挺不錯的關鍵在於你要用反匯編去分析什麼,完全沒有目的一行一行的看匯編代碼,誰都得吐血的……先確定一個目的,有了目的之後再根據目的去定位程序中的關鍵位置,然後去分析具體部分其實反匯編分析的入門階段並不要求匯編水平有多高,基本匯編指令能看懂就OK,並不要求有基於匯編語言的開發背景加殼的東西可以去搜索脫殼的教程,自己分析的話需要對匯編演算法和數據結構都很熟悉,一般壓縮殼問題不大,F8一路跑下去就OK加密殼的話就看你的演算法基礎了。至於高級語言,反匯編Delphi程序蠻蛋疼的,不是Delphi語言的問題,而是Borland公司的編譯器的問題(Borland C++編譯的程序同樣蛋疼)……簡直就是call的浪費者,為了實現一個很小的功能,編譯器能一層一層的向下call十幾層……VB的東西就已經不能用蛋疼形容了……一般VB、.NET類的程序都有專門的反編譯工具,不用反匯編的,都是直接反成高級語言進行分析。反匯編分析的基礎建議從C/C++語言編譯出的程序開始練起,尤其是VC編譯出來的,比較標准,也很通用。自己編些最基礎的控制台程序(比如只有一個簡單循環的小程序,或者只有一個簡單條件判斷語句的小程序),然後自己用OD跟一下。能了解各種語句在反匯編中的匯編代碼形式看雪一類的論壇有專門的CrackMe或者TraceMe的練習破解的小程序,可以用來練習破解、跟蹤、脫殼等技能跟蹤Win32程序進行行為分析的話,對Windows系統API的定位是非常實用的方法,能快速跟蹤出程序的大體行為。至於快一點的方法——沒有。成功沒有捷徑,技術是靠勤奮一點點積累起來的。
5. 本人想學習破解技術但是看不懂反匯編代碼!求助!!
第一列就是指令的物理地址,由程序每次裝入的不同而可能不同,若在不同機器上大多時候是不相同的,就是在內存中的地址,也就是所謂的"地址編號",可以這樣理解的.
第二列就是指令字,也就是說二進制才是機器所認識的編碼的,由於其計數較難,用十六進製表示,這個十六進行就是說機器碼的.比如51就是將ECX入棧.等等,機器碼是比較難記的,且一個指令可能有幾個碼來表示,就比如add指令,如果是加寄存器是一個指令,加內存又是一個指令,這時才出現了一種助記符,也就是所謂的匯編,比如將所有的加的功能都算作是add這個助記符,再根據指令澤成機器碼.第三列你就明白了,就是反匯編出來的匯編語句,比如push ecx就是將ECX進棧,這個指令機器碼都是根據CPU的不同而不太相同,所以一個類型的CPU都有自己支持的指令,而所有的指令的集合就叫做"集",比如我們常用的"X86指令集",用這個指令集所寫的程序顯然可以正常運行在X86構造的CPU系統上的.而CPU發展中一般是對以前的指令集的一個擴展而已,所以以後的型號的CPU也有可能支持的,但如果是不CPU指令集肯定是不行的.比如INTEL X86寫出的程序工作在AMD上是不行的,所以如果軟體支持很多平台時,要有不同的處理的!
地址是一般是順序存放的,地址差就是指令字的長度,比如51就是一位長,而8BCF就是二位長,都是可以進行段內轉移的!所以學這個你可能要學一下指令與匯編了,而這個不是window匯編,所以要學的一般是<<80X86匯編>>,而window32位匯編經羅雲斌的較好,但必須先學過的是80X86匯編才行的!
6. 反匯編與逆向編程的區別
反匯編只是按將010二進制碼這樣的目標碼分析解釋成Assembler ,所以我們叫DisAssembler,當然這與教科書上的匯編語言是不同的,這是由編譯器優化生成的目標代碼,而反匯編只是將通過如intel 指令手冊就可以將之轉換出來,而逆向編程是在反匯編的基礎上,然後分析他的邏輯,從而用高級語言或是流式語言進行二次編程,比較常見的,就是使用嵌入asm(c語言),再則因為匯編的條件啥的其實基本都在goto,所以你用老一套的跟,只到你跟出自己的思路來了,那就真的就是逆向編程了,不過現在多是以上兩種,當然高手我就沒資格評論了.
7. 反匯編與匯編一樣嗎有什麼不同
匯編是最基礎的計算機編程語言,用作動詞時就是說用匯編語言寫成的程序代碼經過編譯連接之後生成可執行程序的過程。而反匯編就是這個過程的逆過程,一般是針對商業軟體或病毒等不知道源程序是如何書寫的程序,經過反匯編,將由機器碼(即一條條01組成的指令)方向翻譯為匯編指令,這樣一定程度上可以讓人們理解認識程序的編寫方式,使用的演算法特點等,但是針對反匯編,有許多方法可以加大反匯編的難度,比如說在程序中加殼,使用大量跳轉等
8. 反匯編逆向難學嗎,入門難嗎
反匯編是工具來做的,比如IDA,OD,你說的這個應該是逆向和破解技術。
逆向其實是有它的難度在裡面的,要跟匯編打交道,很多時候破解要涉及加密演算法,驅動保護還有殼。可以這么說,逆向技術本身不算太難,但是難的是逆向防禦技術。
因為逆向在windows平台上的通用性而且不是太難學,導致了商業軟體為了追求安全性,產生了很多逆向分析的對抗技術,來增強自己的安全性。畢竟自己辛辛苦苦花錢花時間搞出來的東西,被別人兩下學了去,怎麼想怎麼不舒服。
這裡面,加殼鄙人不了解,不做評論。驅動保護就是在內核里搞風搞雨,入手的門檻還是比較高的。所以學逆向不難,花時間花功夫多練手。但是想把你高超的逆向功力應用到實際的商業產品上,驅動和殼是你必須面對的東西,去研究這兩者會花費大量精力。
AGP論壇站長,反游戲保護和windows內核技術大牛A總聽說是高二就開始研究內核技術了,lz如果花時間,也是能學成的,畢竟有成功案例在了。有點基礎想擼驅動,還可以找A總報名參加下付費培訓。。。廣告已打, 心滿意足。
9. 向大俠求助一段arm反匯編代碼的意思
反匯編:一般是只對編譯器根據高級語言生成的本機二進制可直接在晶元上執行的機器碼」解析「為人類可讀的匯編形式的代碼(實際上最最早期的計算機操作員具備直接閱讀機器碼和使用機器碼編程的能力,不需要轉換為匯編形式,這是計算機普及,程序規模也爆炸性增大後,人們就有需要轉換為匯編代碼來讀懂機器碼程序) 早期的反匯編目的是編譯器生產商用來檢查編譯器生成代碼的性能。 當今主要在得不到源代碼的情況下,研究分析其他人的程序,如病毒程序的分析,系統漏洞的挖掘,或者黑\灰色產業鏈里的山寨抄襲功能等。通過反匯編分析其功能、演算法、邏輯等。 反匯編實際就屬於逆向過程,分析得到別人的功能、演算法、邏輯後,再根據得到的信息再開發、增加補丁開發、防禦產品開發等,在開發的過程根據實際需求而言,比如分析匯編代碼得到的一個演算法,可以用任意其它編程語言再現,這就是逆向編程了 逆向編程屬於逆向工程, 逆向編程一般指根據反向分析別人程序的功能而使用其它編程語言編程再現該功能。 反向分析(逆向工程)不僅僅是反匯編,對不同系統平台語言平台晶元平台的不同也囊括不同內容,如反匯編則基本有對各種晶元(如吧0吧陸、arm、c5一等晶元的反匯編) 反匯編實際屬於反編譯,反編譯就包括各種語言從低級或中間級語言到高級語言的解析 如.NET平台的C#就可由中間語言MSIL反編譯成C# Java平台的就可由.class中的Java位元組碼反編譯為Java代碼 後有其它的dex虛擬機的位元組碼,自定義的虛擬機位元組碼等等 總言之,反匯編屬於反編譯的一個分支, 反編譯是實現逆向編程的必經步驟 這些都屬於IT界的」逆向工程「范疇
10. 什麼叫匯編匯編可以干什麼反匯編有是什麼
什麼叫匯編
匯編語言(Assembly Language)是面向機器的程序設計語言。
在匯編語合中,用助記符(Memoni)代替操作碼,用地址符號(Symbol)或標號(Label)代替地址碼。這樣用符號代替機器語言的二進制碼,就把機器語言變成了匯編語言。於是匯編語言亦稱為符號語言。
使用匯編語言編寫的程序,機器不能直接識別,要由一種程序將匯編語言翻譯成機器語言,這種起翻譯作用的程序叫匯編程序,匯編程序是系統軟體中語言處理系統軟體。匯編程序把匯編語言翻譯成機器語言的過程稱為匯編。
匯編語言比機器語言易於讀寫、易於調試和修改,同時也具有機器語言執行速度快,占內存空間少等優點,但在編寫復雜程序時具有明顯的局限性,匯編語言依賴於具體的機型,不能通用,也不能在不同機型之間移植。
是能完成一定任務的機器指令的集合。
匯編可以干什麼
匯編語言是一種面向機器結構的低級程序設計語言,匯編語言程序是把機器指令組成的機器語言"符號化",它同機器語言的目標代碼一一對應.採用匯編語言進行程序設計,既可以充分發揮機器硬體提供的有利條件,又不像機器語言那樣編制出的程序難於辨認,不易修改、維護。
在某些情況下,用高級語言編制的程序不能滿足要求時,應當使用接近機器語言的匯編語言編製程序,它既可以彌補高級語言程序的某些不足,有可改善用機器語言編製程序的困難.
學會匯編後,你在用高級語言編程時會更了解機器到底做了什麼,可以通過修改高級語言的代碼來提高演算法所不能提高的效率
反匯編...就是...就是...把目標代碼轉為匯編代碼的過程.