反編譯編程教程 請(qǐng)問(wèn)如何實(shí)現(xiàn)反編譯,有軟件嗎?
請(qǐng)問(wèn)如何實(shí)現(xiàn)反編譯,有軟件嗎?高級(jí)語(yǔ)言源程序經(jīng)由編譯器都變成可執(zhí)行文件,smali應(yīng)該是逆過(guò)程??墒钦G闆r又不能把可執(zhí)行文件變的高級(jí)語(yǔ)言源代碼,不能轉(zhuǎn)換成匯編程序。計(jì)算機(jī)軟件反向工程(Reverse
請(qǐng)問(wèn)如何實(shí)現(xiàn)反編譯,有軟件嗎?
高級(jí)語(yǔ)言源程序經(jīng)由編譯器都變成可執(zhí)行文件,smali應(yīng)該是逆過(guò)程。
可是正常情況又不能把可執(zhí)行文件變的高級(jí)語(yǔ)言源代碼,不能轉(zhuǎn)換成匯編程序。
計(jì)算機(jī)軟件反向工程(Reversepengineering)也稱作計(jì)算機(jī)軟件還原工程,是指對(duì)他人軟件的目標(biāo)程序(可執(zhí)行程序)進(jìn)行“逆向分析、研究”工作,以推導(dǎo)出他人的軟件產(chǎn)品所不使用的思路、原理、結(jié)構(gòu)、算法、處理過(guò)程、運(yùn)行程序方法等設(shè)計(jì)要素,以及自己旗下軟件時(shí)的參考,或者然后作用于自己的軟件產(chǎn)品中。
加殼是個(gè)奇怪的過(guò)程,因此越是高級(jí)語(yǔ)言,就越甚難java代碼,但目前肯定有許許多多的反編譯軟件:VB:VBExplorer、VB反編譯精靈和VBRezQ沒(méi)有辦法反編譯界面圖像,好像代碼不能已經(jīng)反編譯JAVA:JADjava的反編譯也很比較普遍,因?yàn)閟mali也很已經(jīng),將class文件反匯編成java文件確實(shí)是有可能的C:eXeScopeDephi:DEDEc#:Reflectorvb程序:E-CodeExplorer.exe
(易格式可執(zhí)行文件總結(jié)器)。
一個(gè)單機(jī)游戲可以改代碼嗎?
這個(gè)可以。
要修改游戲程序代碼,這個(gè)就難了,你得懂匯編,編譯原理,編譯器流程,各種PE執(zhí)行文件或其他執(zhí)行文件或代碼的數(shù)據(jù)結(jié)構(gòu),各種靜態(tài)庫(kù)在內(nèi)動(dòng)態(tài)鏈接庫(kù)的結(jié)構(gòu),等等。。。一系列編程知識(shí),不過(guò)還得必須具備當(dāng)然的硬件知識(shí),以及操作系統(tǒng)知識(shí)。。。
然后再用反匯編工具把游戲的執(zhí)行文件包括庫(kù)文件java代碼,將先執(zhí)行文件或代碼smali成匯編代碼,要好一些的反編譯工具能把代碼加殼成C/C代碼,只是因?yàn)檫@些代碼徹底沒(méi)有變量命名,所有變量都用A1、B1這樣的。。。
如何防止.NET程序被反編譯?
阻住不了,任何一個(gè)程序都也可以被加殼不過(guò)了,并不是說(shuō)反編譯以后就是網(wǎng)頁(yè)源代碼還不知道你帶的什么語(yǔ)言,在.net里,一般是用Dotfuscator之類的工具參與混淆干擾.NET有一種加密字節(jié)碼的是是從hook住JIT編譯器的入口來(lái)做的:字節(jié)碼經(jīng)加密/混淆不清修真者的存在文件里,等被CLR打開(kāi)程序了,某個(gè)方法要不能執(zhí)行而必須被JIT代碼編譯時(shí),hook住JIT編譯器的入口截住住這個(gè)程序編譯請(qǐng)求,后再去把按的字節(jié)碼解密之后再告訴JIT編譯器。
這種做法基本是沒(méi)有辦法?;P∨笥?,清楚了原理之后很不錯(cuò)解,可以快的的某些解密后的字節(jié)碼后再扔給常規(guī)的反編譯器去去處理。
但現(xiàn)實(shí)的說(shuō),大部分用戶在“借著解密”方面大都小朋友,因此倒也不算一種所需方案。