針對(duì)代碼反編譯,推薦使用CBS賽博鎖,通過把安全容器內(nèi)嵌到操作系統(tǒng)中,對(duì)容器內(nèi)的應(yīng)用和數(shù)據(jù)進(jìn)行加鎖,程序和數(shù)據(jù)在容器內(nèi)運(yùn)行,實(shí)現(xiàn)最后一米數(shù)據(jù)安全,防止核心數(shù)據(jù)被泄露,防止服務(wù)器終端中病毒,防止反編譯,反破解。

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的原陽(yáng)網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
防止java文件被反編譯的方法:
1、java編譯的文件或者發(fā)布包不要放到網(wǎng)上,僅供內(nèi)部使用則不會(huì)被人反編譯;
2、java發(fā)布包加上密碼,只給指定的人使用;
注:在java編譯文件本身是沒有辦法阻止別人反編譯的,只要能拿到編譯文件,就能使用反編譯工具進(jìn)行反編譯。
我們都知道JAVA是一種解析型語(yǔ)言,這就決定JAVA文件編譯后不是機(jī)器碼,而是一個(gè)字節(jié)碼文件,也就是CLASS文件。而這樣的文件是存在規(guī)律的,經(jīng)過反編譯工具是可以還原回來的。例如Decafe、FrontEnd,YingJAD和Jode等等軟件。下面是《Nokia中Short數(shù)組轉(zhuǎn)換算法》
類中Main函數(shù)的ByteCode:0 ldc #162 invokestatic #185 astore_16 return其源代碼是:short [] pixels = parseImage("/ef1s.png");
我們通過反編譯工具是可以還原出以上源代碼的。而通過簡(jiǎn)單的分析,我們也能自己寫出源代碼的。
第一行:ldc #16
ldc為虛擬機(jī)的指令,作用是:壓入常量池的項(xiàng),形式如下ldc index這個(gè)index就是上面的16,也就是在常量池中的有效索引,當(dāng)我們?nèi)タ闯A砍氐臅r(shí)候,我們就會(huì)找到index為16的值為String_info,里面存了/ef1s.png.
所以這行的意思就是把/ef1s.pn作為一個(gè)String存在常量池中,其有效索引為16。
第二行:2 invokestatic #18
invokestatic為虛擬機(jī)指令,作用是:調(diào)用類(static)方法,形式如下
invokestatic indexbyte1 indexbyte2
其中indexbyte1和indexbyte2必須是在常量池中的有效索引,而是指向的類型必須有Methodref標(biāo)記,對(duì)類名,方法名和方法的描述符的引用。
所以當(dāng)我們看常量池中索引為18的地方,我們就會(huì)得到以下信息:
Class Name : cp_info#1
Name Type : cp_info#19
1 和19都是常量池中的有效索引,值就是右邊中的值,再往下跟蹤我就不多說了,有興趣的朋友可以去JAVA虛擬機(jī)規(guī)范。
這里我簡(jiǎn)單介紹一下parseImage(Ljava/lang/String;)[S 的意思。
這就是parseImage這個(gè)函數(shù)的運(yùn)行,我們反過來看看parseImage的原型就明白了
short [] parseImage(String)
那么Ljava/lang/String;就是說需要傳入一個(gè)String對(duì)象,而為什么前面要有一個(gè)L呢,這是JAVA虛擬機(jī)用來表示這是一個(gè)Object。如果是基本類型,這里就不需要有L了。然后返回為short的一維數(shù)組,也就是對(duì)應(yīng)的[S。是不是很有意思,S對(duì)應(yīng)著Short類型,而“[”對(duì)應(yīng)一維數(shù)組,那有些朋友要問了,兩維呢,那就“[[”,呵呵,是不是很有意思。
好了,調(diào)用了函數(shù),返回的值要保存下來吧。那么就是第三行要做的事情了。
java本就是開源的,你加密感覺怪怪的。
想防止反編譯,最簡(jiǎn)單的方法就是你可以向Jar注入無效代碼。比如建一個(gè)類,建一個(gè)沒有意義的方法private class Invalid{ },然后輸出為jar。用解壓縮軟件打開這個(gè)jar,以文本方式找到那個(gè)類的class,然后將那個(gè)方法名的一個(gè)字母刪掉,然后更新入壓縮文件中。用jd-gui反編譯提示錯(cuò)誤。這種方式不能用于android中。
還有種方法就是混淆代碼,加密class和高級(jí)加密class,方式比較復(fù)雜,可以自行百度。
無法防止。.class文件的標(biāo)準(zhǔn)是公開的,無法防止別人反編譯你的代碼。
你頂多可以用代碼擾亂工具擾亂你的代碼,這樣反編譯的代碼就難以閱讀。比如可以試試用proguard來擾亂(“加密”)和反擾亂(“解密”)你的代碼。
但是java有那么多很不錯(cuò)的代碼閱讀分析工具,即使你用了擾亂器,也不能保證代碼的安全。
用其他語(yǔ)言.
C#和Java是最容易反編譯的.
我接觸過一個(gè)產(chǎn)品, C#寫的, 為了防止反編譯, 他們存放數(shù)據(jù)庫(kù)的數(shù)據(jù)都是編譯的.表之間的關(guān)系是用一些meta來描述的,天書一樣.
我建議, 換語(yǔ)言或者在數(shù)據(jù)庫(kù)這端采取手段.
文章標(biāo)題:java防止代碼反編譯,c代碼防止反編譯
地址分享:http://chinadenli.net/article40/hsgoho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、用戶體驗(yàn)、微信小程序、商城網(wǎng)站、建站公司、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)