眾所周知,java編譯后的class文件是一種中間字節(jié)字文件。很容易被反編譯工具反編譯,而傳統(tǒng)的java源代碼保護方法基本都是采用混淆的方式,但這樣會帶來很多麻煩,而且也不能真正保護class文件,我采用jni技術(shù)定制classloader調(diào)用經(jīng)過加密的class來動態(tài)解密,運行class文件。class反編譯工具對加密后的class文件就沒辦法再反編譯為java文件了!
為了防止Class文件被直接反編譯,許多開發(fā)人員將一些關(guān)鍵的Class文件進行加密,例如對注冊碼、序列號管理相關(guān)的類等。在使用這些被加密的類之前,程序首先需要對這些類進行解密,而后再將這些類裝載到JVM當中。這些類的解密可以由硬件完成,也可以使用軟件完成。
大家知道class文件加密吧..我想反編譯這個工程...但是反編譯工具不認為它是有效的class文件.試想反編譯工具不認,jvm又怎么會認呢,查了半天加密與解密,發(fā)現(xiàn)是一個classloader.dll的問題,是jvm在加載class之前,先加載的classloader.dll,是由它進行解密的.
遇到了classloader.dll文件,要是C#寫的,早就攻破了.是C++寫的...只能反匯編,學(xué)了兩個晚上的匯編.感覺想把匯編譯成高級語言并不是那么容易的事.也有人提出說,在dll設(shè)置斷點,在它解密后,用匯編指令去內(nèi)在中讀取字節(jié)碼.
對于.net 和java “高級”源代碼加密無非就是Hook這個Hook那個。
對于解密方法 無非就是兩個:
1、內(nèi)存DUMP
2、逆向其源代碼。就是類似匯編譯成高級語言。
鄙人周末早上沒事做,幾分鐘就把網(wǎng)上這些所謂“JavaClass加密專家、加密大師”的源代碼逆向出來了。
其實也是爛簡單,因為加密代碼都是Copy網(wǎng)上的,我還有空把原始加密算法Google 出來了。
這幾天都花在寫加密解密程序上,復(fù)習(xí)下JAVA 說不定以后都用這個了。
不說了,僅供娛樂一下,也就拿了“官方”例子解密了下,不保證你的CLass都能解密。
使用方法選擇要解密的文件或者目錄,點擊解密。
早期的某加密工具就是把魔數(shù)從0xCAFEBABE改成0xFECABABE
把地址0x05和0x09、0x07和0x0B的數(shù)值交換一下
把末尾最后2個字節(jié)位置交換一下,添加一串“XXXXXX”字符 沒有用密碼學(xué),所以沒有加入本程序中