Java程式的反加密(轉)
Java程式的反加密(轉)[@more@]首先我們來看看Java程式的反加密,也就是通常所說的Crack過程,只有明白了這個過程,我們才能有效的對我們的程式進行加密。
通常我們得到的Java程式的Crack包有兩種,一種屬於KeyGen(註冊碼生成器)、一種屬於替換修改;
我們先看第一種,當我們找到一個應用程式的KeyGen的時候我們總是很佩服那個做出KeyGen的人,覺得他很厲害,但是你仔細分析一下,為什麼他能做出KeyGen呢?只有
他對這個Java程式的加密演算法瞭解的非常清楚;這種人有哪些呢?一個是那個公司裡面的人,那不可能,除非內訌,還又呢,就是猜想,反推,這個可能嗎?呵呵,更不可能,那這個演算法從哪裡來呢?呵呵,往往洩漏秘密的就是秘密本身……回過頭來想想,Java應用程式怎麼知道你輸入的註冊碼是否正確呢?呵呵,那你就該從應用程式入手……
得到的它的加密演算法,自然KeyGen就不在話下了……(但是這也有列外,如果它是用的公鑰秘鑰對加密的,就沒有辦法嘍,只能用第二種方法。)
這種辦法只適合對付只要一個註冊號,別的什麼都不要的情況,經典代表Borland JBuilder & Optimizeit Suite
再看第二種,為什麼要用替換修改?我們是修改了那部分呢?不用想,肯定是License驗證的部分,為什麼我們不像上面的方法那樣找加密演算法呢?原因有兩種:(1)使用上面的辦法搞不定;(2)Java程式不僅要Key,還有其他的License配置;遇到這種情況,我們只要找到用於License驗證的類,進行修改替換就行了。
這種辦法使用於任何情況,經典代表BEA WebLogic
經過上面的分析,我們的問題就集中了,關鍵就是怎麼找到用於License驗證的部分或加密演算法的部分,我們需要3個工具:一個是Sun公司提供的標準JVM:),一個是你
的耐心和細心:),一個是Jad(經典Java反編譯工具)。
第一步是定位,這也是最關鍵的一步,我們這裡以Together For JBuilder Edition為例,啟動Together,先看看長什麼樣子?喔,上來就問我要License;Ok,
每關係,退出;找到Together的啟動Bat檔案,找到它的啟動命令:java .....,OK,在Java啟動的時候給一個引數:“ -Xrunhprof:cpu=times”,儲存,在啟動,還是要
License,退出,這個時候,我們可以發現,在這個目錄下多了一個“java.hprof.txt”檔案,開啟一看,就是我要的JVM的Dump檔案,好多內容啊,沒關係,慢慢看來。
我們可以看見這個檔案裡面有好多熟悉的東西啊:java.*/com.sun.*/javax.*等等,但這個不是我們關心的,我們要的是 com.togethersoft.*或者是一些沒有包名的zd.d等等。(這裡插一句,幾乎所有的Java應用程式都會混淆的,其實混淆的原理也很簡單,我們後面再說。)先找找有沒有License有關的,Serach一下,嘿嘿,果然,474行: com.togethersoft.together.impl.ide.license.LicenseSetup.execute([DashoPro-V2-050200]:Unknown line),Ok上那堆classpath中的Jar包裡面找一下吧(推薦用WinRAR),找到了之後用Jad反編譯,一看,這個沒有混淆,但是用了一個zae的類,這個看名字就知道混淆過了,先不理它,再看看下面一句IdeLicenseAccess.setLicense(zae1),Ok接著找到 IdeLicenseAccess,哈哈,就這點名堂,所有的License驗證都是走的這個類,物件導向的思想不錯,呵呵:)
定位定完了,接下來的事情就是按猜想的方法修改這兩個類,遮蔽掉LicenseSetup裡面execute方法的實際內容,修改 IdeLicenseAccess,讓多有的驗證都返回true,然後編譯,替換;不要高興太早,這還沒有完呢,要有責任心!!啟動Together,果然,這下不要License了,有啟動畫面,進去了,但是一片灰色,怎麼回事,一看控制檯,一堆錯,沒關係,就怕不出錯,查詢根源,還有一個 IdeLicenseUtil類出了問題,再反編譯,修改,替換;這下搞定了。再啟動,測試一下,OK。
就這樣,一個Java應用程式搞定了。看看其實也很簡單。
再來說說混淆,大家可能都知道沒有經過混淆的Java的Class反編譯回來連方法和變數的名字都不會變,這是什麼原因呢?這就要追述到Class檔案的結構了,簡單來說,Class檔案種包含又一個常數池(constant pool)這個裡面就存放了變數和方法的名稱等一下和Class相關的東西,我們通常所說的混淆就是用一種工具把這個常數池裡面的東東弄的胡塗一點,這樣就能騙過反編譯器和你,呵呵:)這就是為什麼有時候反編譯回來的東西編譯不過去的原因。
通常我們得到的Java程式的Crack包有兩種,一種屬於KeyGen(註冊碼生成器)、一種屬於替換修改;
我們先看第一種,當我們找到一個應用程式的KeyGen的時候我們總是很佩服那個做出KeyGen的人,覺得他很厲害,但是你仔細分析一下,為什麼他能做出KeyGen呢?只有
他對這個Java程式的加密演算法瞭解的非常清楚;這種人有哪些呢?一個是那個公司裡面的人,那不可能,除非內訌,還又呢,就是猜想,反推,這個可能嗎?呵呵,更不可能,那這個演算法從哪裡來呢?呵呵,往往洩漏秘密的就是秘密本身……回過頭來想想,Java應用程式怎麼知道你輸入的註冊碼是否正確呢?呵呵,那你就該從應用程式入手……
得到的它的加密演算法,自然KeyGen就不在話下了……(但是這也有列外,如果它是用的公鑰秘鑰對加密的,就沒有辦法嘍,只能用第二種方法。)
這種辦法只適合對付只要一個註冊號,別的什麼都不要的情況,經典代表Borland JBuilder & Optimizeit Suite
再看第二種,為什麼要用替換修改?我們是修改了那部分呢?不用想,肯定是License驗證的部分,為什麼我們不像上面的方法那樣找加密演算法呢?原因有兩種:(1)使用上面的辦法搞不定;(2)Java程式不僅要Key,還有其他的License配置;遇到這種情況,我們只要找到用於License驗證的類,進行修改替換就行了。
這種辦法使用於任何情況,經典代表BEA WebLogic
經過上面的分析,我們的問題就集中了,關鍵就是怎麼找到用於License驗證的部分或加密演算法的部分,我們需要3個工具:一個是Sun公司提供的標準JVM:),一個是你
的耐心和細心:),一個是Jad(經典Java反編譯工具)。
第一步是定位,這也是最關鍵的一步,我們這裡以Together For JBuilder Edition為例,啟動Together,先看看長什麼樣子?喔,上來就問我要License;Ok,
每關係,退出;找到Together的啟動Bat檔案,找到它的啟動命令:java .....,OK,在Java啟動的時候給一個引數:“ -Xrunhprof:cpu=times”,儲存,在啟動,還是要
License,退出,這個時候,我們可以發現,在這個目錄下多了一個“java.hprof.txt”檔案,開啟一看,就是我要的JVM的Dump檔案,好多內容啊,沒關係,慢慢看來。
我們可以看見這個檔案裡面有好多熟悉的東西啊:java.*/com.sun.*/javax.*等等,但這個不是我們關心的,我們要的是 com.togethersoft.*或者是一些沒有包名的zd.d等等。(這裡插一句,幾乎所有的Java應用程式都會混淆的,其實混淆的原理也很簡單,我們後面再說。)先找找有沒有License有關的,Serach一下,嘿嘿,果然,474行: com.togethersoft.together.impl.ide.license.LicenseSetup.execute([DashoPro-V2-050200]:Unknown line),Ok上那堆classpath中的Jar包裡面找一下吧(推薦用WinRAR),找到了之後用Jad反編譯,一看,這個沒有混淆,但是用了一個zae的類,這個看名字就知道混淆過了,先不理它,再看看下面一句IdeLicenseAccess.setLicense(zae1),Ok接著找到 IdeLicenseAccess,哈哈,就這點名堂,所有的License驗證都是走的這個類,物件導向的思想不錯,呵呵:)
定位定完了,接下來的事情就是按猜想的方法修改這兩個類,遮蔽掉LicenseSetup裡面execute方法的實際內容,修改 IdeLicenseAccess,讓多有的驗證都返回true,然後編譯,替換;不要高興太早,這還沒有完呢,要有責任心!!啟動Together,果然,這下不要License了,有啟動畫面,進去了,但是一片灰色,怎麼回事,一看控制檯,一堆錯,沒關係,就怕不出錯,查詢根源,還有一個 IdeLicenseUtil類出了問題,再反編譯,修改,替換;這下搞定了。再啟動,測試一下,OK。
就這樣,一個Java應用程式搞定了。看看其實也很簡單。
再來說說混淆,大家可能都知道沒有經過混淆的Java的Class反編譯回來連方法和變數的名字都不會變,這是什麼原因呢?這就要追述到Class檔案的結構了,簡單來說,Class檔案種包含又一個常數池(constant pool)這個裡面就存放了變數和方法的名稱等一下和Class相關的東西,我們通常所說的混淆就是用一種工具把這個常數池裡面的東東弄的胡塗一點,這樣就能騙過反編譯器和你,呵呵:)這就是為什麼有時候反編譯回來的東西編譯不過去的原因。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-958313/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java的破解和反破解之道 (轉)Java
- 使用CBC位元反轉攻擊繞過加密的會話令牌加密會話
- Cython加密python程式碼防止反編譯加密Python編譯
- java 控制反轉和依賴注入的理解Java依賴注入
- #反轉連結串列_C++版 #反轉連結串列_Java版 @FDDLCC++Java
- java實現連結串列反轉Java
- 在Java中反轉字串的10種方法[Snippets]Java字串
- 如何保護Java程式 防止Java反編譯Java編譯
- 幾維安全推出國內首個全新Java2C加密方案,完美解決Java程式碼反編譯!Java加密編譯
- java加密保護jar包及class檔案,防止反編譯Java加密JAR編譯
- SpringBoot程式碼混淆與反混淆加密工具詳解Spring Boot加密
- 一個簡單的愷撒加密程式 (轉)加密
- Linux 程式設計之JAVA上加密演算法的實現用例(轉)Linux程式設計Java加密演算法
- 加密的XML (轉)加密XML
- Java:控制反轉(IoC)與依賴注入(DI)Java依賴注入
- 如何在Java中反轉單連結串列?Java
- 經典的反轉
- Java單連結串列反轉圖文詳解Java
- Java演算法面試題(008) 字串反轉Java演算法面試題字串
- java 反轉單連結串列,偶爾會遇到的面試題Java面試題
- Java程式碼的編譯與反編譯那些事兒Java編譯
- 一些防止java程式碼被反編譯的方法Java編譯
- ORACLE應用經驗(4)-加密程式(轉)Oracle加密
- 字元反轉字元
- 反轉字串字串
- 字串反轉字串
- 建立Java的應用程式(轉)Java
- JavaScript從反轉陣列到連結串列反轉JavaScript陣列
- Java中的加密與解密Java加密解密
- 【Java】SHA加密Java加密
- Java加密解密Java加密解密
- Java實現SSH模式加密原理及程式碼Java模式加密
- OpenAI宮鬥反轉反轉再反轉,到底是資本任性還是人性扭曲?OpenAI
- LeetCode題庫整理【Java】—— 7整數反轉LeetCodeJava
- java不用api實現單連結串列反轉(二)JavaAPI
- java書籍-《java加密解密的藝術》Java加密解密
- MySQL的加密函式(轉)MySql加密函式
- 加密原理(轉)加密