亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

如何有效防止Java程序源碼被人偷窺?

2024-07-21 02:13:41
字體:
來源:轉載
供稿:網友

java程序的源代碼很容易被別人偷看,只要有一個反編譯器,任何人都可以分析別人的代碼。本文討論如何在不修改原有程序的情況下,通過加密技術保護源代碼。

一、為什么要加密?

對于傳統的c或c++之類的語言來說,要在web上保護源代碼是很容易的,只要不發布它就可以。遺憾的是,java程序的源代碼很容易被別人偷看。只要有一個反編譯器,任何人都可以分析別人的代碼。java的靈活性使得源代碼很容易被竊取,但與此同時,它也使通過加密保護代碼變得相對容易,我們唯一需要了解的就是java的classloader對象。當然,在加密過程中,有關java cryptography extension(jce)的知識也是必不可少的。

有幾種技術可以“模糊”java類文件,使得反編譯器處理類文件的效果大打折扣。然而,修改反編譯器使之能夠處理這些經過模糊處理的類文件并不是什么難事,所以不能簡單地依賴模糊技術來保證源代碼的安全。

我們可以用流行的加密工具加密應用,比如pgp(pretty good privacy)或gpg(gnu privacy guard)。這時,最終用戶在運行應用之前必須先進行解密。但解密之后,最終用戶就有了一份不加密的類文件,這和事先不進行加密沒有什么差別。

java運行時裝入字節碼的機制隱含地意味著可以對字節碼進行修改。jvm每次裝入類文件時都需要一個稱為classloader的對象,這個對象負責把新的類裝入正在運行的jvm。jvm給classloader一個包含了待裝入類(比如java.lang.object)名字的字符串,然后由classloader負責找到類文件,裝入原始數據,并把它轉換成一個class對象。

我們可以通過定制classloader,在類文件執行之前修改它。這種技術的應用非常廣泛??在這里,它的用途是在類文件裝入之時進行解密,因此可以看成是一種即時解密器。由于解密后的字節碼文件永遠不會保存到文件系統,所以竊密者很難得到解密后的代碼。

由于把原始字節碼轉換成class對象的過程完全由系統負責,所以創建定制classloader對象其實并不困難,只需先獲得原始數據,接著就可以進行包含解密在內的任何轉換。

java 2在一定程度上簡化了定制classloader的構建。在java 2中,loadclass的缺省實現仍舊負責處理所有必需的步驟,但為了顧及各種定制的類裝入過程,它還調用一個新的findclass方法。

這為我們編寫定制的classloader提供了一條捷徑,減少了麻煩:只需覆蓋findclass,而不是覆蓋loadclass。這種方法避免了重復所有裝入器必需執行的公共步驟,因為這一切由loadclass負責。

不過,本文的定制classloader并不使用這種方法。原因很簡單。如果由默認的classloader先尋找經過加密的類文件,它可以找到;但由于類文件已經加密,所以它不會認可這個類文件,裝入過程將失敗。因此,我們必須自己實現loadclass,稍微增加了一些工作量。

二、定制類裝入器

每一個運行著的jvm已經擁有一個classloader。這個默認的classloader根據classpath環境變量的值,在本地文件系統中尋找合適的字節碼文件。

應用定制classloader要求對這個過程有較為深入的認識。我們首先必須創建一個定制classloader類的實例,然后顯式地要求它裝入另外一個類。這就強制jvm把該類以及所有它所需要的類關聯到定制的classloader。listing 1顯示了如何用定制classloader裝入類文件。

【listing 1:利用定制的classloader裝入類文件】

以下為引用的內容:
// 首先創建一個classloader對象
  classloader myclassloader = new myclassloader();
  // 利用定制classloader對象裝入類文件
  // 并把它轉換成class對象
  class myclass = myclassloader.loadclass( "mypackage.myclass" );
  // 最后,創建該類的一個實例
  object newinstance = myclass.newinstance();
  // 注意,myclass所需要的所有其他類,都將通過
  // 定制的classloader自動裝入

如前所述,定制classloader只需先獲取類文件的數據,然后把字節碼傳遞給運行時系統,由后者完成余下的任務。

classloader有幾個重要的方法。創建定制的classloader時,我們只需覆蓋其中的一個,即loadclass,提供獲取原始類文件數據的代碼。這個方法有兩個參數:類的名字,以及一個表示jvm是否要求解析類名字的標記(即是否同時裝入有依賴關系的類)。如果這個標記是true,我們只需在返回jvm之前調用resolveclass。

【listing 2:classloader.loadclass()的一個簡單實現】

以下為引用的內容:
public class loadclass( string name, boolean resolve )
  throws classnotfoundexception {
  try {
  // 我們要創建的class對象
  class clasz = null;
  // 必需的步驟1:如果類已經在系統緩沖之中,
  // 我們不必再次裝入它
  clasz = findloadedclass( name );
  if (clasz != null)
  return clasz;
  // 下面是定制部分
  byte classdata[] = /* 通過某種方法獲取字節碼數據 */;
  if (classdata != null) {
  // 成功讀取字節碼數據,現在把它轉換成一個class對象
  clasz = defineclass( name, classdata, 0, classdata.length );
  }
  // 必需的步驟2:如果上面沒有成功,
  // 我們嘗試用默認的classloader裝入它
  if (clasz == null)
  clasz = findsystemclass( name );
  // 必需的步驟3:如有必要,則裝入相關的類
  if (resolve && clasz != null)
  resolveclass( clasz );
  // 把類返回給調用者
  return clasz;
  } catch( ioexception ie ) {
  throw new classnotfoundexception( ie.tostring() );
  } catch( generalsecurityexception gse ) {
  throw new classnotfoundexception( gse.tostring() );
  }
  }

共3頁: 上一頁 1 [2] [3] 下一頁

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩精品视频| 国产精品久久久一区| 国产成+人+综合+亚洲欧洲| 久久久免费精品视频| xxxxx成人.com| 欧美日韩国产二区| 成人午夜一级二级三级| 国内精久久久久久久久久人| 日韩av手机在线观看| 欧美丰满老妇厨房牲生活| 97精品国产97久久久久久免费| 国内精品模特av私拍在线观看| 欧美性猛交xxxx黑人| 国产亚洲精品综合一区91| 在线国产精品视频| 日产精品99久久久久久| 日韩精品免费电影| 国产精品极品尤物在线观看| 精品在线小视频| 欧美在线视频在线播放完整版免费观看| 亚洲va久久久噜噜噜| 日韩欧美综合在线视频| 亚洲精品视频久久| 91豆花精品一区| 欧美丝袜一区二区三区| 亚洲一区二区三区乱码aⅴ| 欧美超级免费视 在线| 91禁国产网站| 国产噜噜噜噜久久久久久久久| 日韩在线欧美在线| 久久综合九色九九| 亚洲精品wwww| 日韩视频永久免费观看| 国产精品jizz在线观看麻豆| 欧美日韩国产一区二区三区| 亚洲影院色无极综合| 亚洲第一网站男人都懂| 欧美日韩福利在线观看| 日本成人黄色片| 亚洲精品国产精品国自产在线| 久久天堂av综合合色| 国产一区二区美女视频| 在线观看欧美www| 欧美激情中文网| 欧美午夜激情视频| 久久伊人色综合| 国产精品男人爽免费视频1| 欧美激情a∨在线视频播放| 91精品国产综合久久香蕉最新版| 国产精品久久久av久久久| 在线视频国产日韩| 中文字幕亚洲欧美一区二区三区| 热久久免费国产视频| 午夜精品久久久99热福利| 色伦专区97中文字幕| 午夜精品久久久久久久久久久久| 国产成人一区二| 中文字幕亚洲欧美日韩2019| 97超级碰碰人国产在线观看| 国产精品免费久久久| 欧美xxxx做受欧美| 亚洲欧美日韩一区在线| 777精品视频| 欧美日韩在线视频一区| 欧美激情手机在线视频| 91精品国产乱码久久久久久蜜臀| 韩曰欧美视频免费观看| 性日韩欧美在线视频| 欧美高清第一页| 亚洲 日韩 国产第一| 欧美精品一区在线播放| 欧美高清视频一区二区| 韩国19禁主播vip福利视频| 亚洲xxxx做受欧美| 欧美日韩在线影院| 亚洲第一天堂无码专区| 91老司机在线| 欧美成人精品不卡视频在线观看| 亚洲国模精品私拍| 亚洲国产成人精品久久| 在线观看国产欧美| 久久99精品久久久久久青青91| 亚洲精品一区二三区不卡| 国产欧美日韩91| 992tv成人免费视频| 日韩av色在线| 国产一区二区三区网站| 国产在线播放91| 欧美乱妇40p| 亚洲最新av在线网站| 久操成人在线视频| 久久久久五月天| 国产一区视频在线播放| 92版电视剧仙鹤神针在线观看| 宅男66日本亚洲欧美视频| 久久成人亚洲精品| 亚洲精品久久久久国产| 国产精品丝袜白浆摸在线| 久久全球大尺度高清视频| 美女性感视频久久久| 亚洲欧洲国产精品| 欧美超级免费视 在线| 97国产成人精品视频| 精品国产一区二区三区久久狼黑人| 精品一区二区三区四区| 国产精品成人观看视频国产奇米| 国产精品久久久久久久一区探花| 亚洲欧美日韩一区在线| 91地址最新发布| 欧美高清在线播放| 欧美成人免费全部观看天天性色| 日韩在线免费高清视频| 国产精品极品美女在线观看免费| 国产精品黄视频| 视频直播国产精品| 在线观看日韩视频| 国产成人97精品免费看片| 中文字幕国产精品| 欧美中文字幕在线播放| 久久综合久久美利坚合众国| 亚洲欧美国产精品专区久久| 国产精自产拍久久久久久蜜| 亚洲第一级黄色片| 亚洲区一区二区| 久久久久久久一区二区| 国产精品成人aaaaa网站| 欧美性色视频在线| 亚洲精品456在线播放狼人| 欧美小视频在线| 欧美精品做受xxx性少妇| 91免费版网站入口| 久久综合伊人77777尤物| 日韩av成人在线观看| 欧美大片在线影院| 亚洲高清免费观看高清完整版| 亚洲精品99久久久久中文字幕| 国产成人啪精品视频免费网| 亚洲一区久久久| 欧美富婆性猛交| 中文字幕日韩视频| 欧美大片欧美激情性色a∨久久| 中文字幕少妇一区二区三区| 亚洲福利视频在线| 国产精品久久久久久久久久久久久久| 成人免费看吃奶视频网站| 欧美最猛性xxxx| 欧美视频在线观看免费| 亚洲自拍偷拍在线| 久久久亚洲网站| 国产日韩av高清| 国产999精品久久久| 久久久伊人欧美| 日本高清不卡的在线| 国产精品久久久久久一区二区| 亚洲精品久久久久久下一站| 国产精品一区二区电影| 91欧美激情另类亚洲| 亚洲男人的天堂在线播放| 亚洲在线视频观看| 色婷婷综合久久久久| 欧美激情国产日韩精品一区18| 亚洲人成免费电影| 欧美国产亚洲精品久久久8v| 欧美日韩激情视频8区|