成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java反編譯之代碼混淆

開發 后端
Java反編譯的一種很重要的方法是代碼混淆,本文集中對其進行了介紹,可分為五個方面:符號混淆、數據混淆、控制混淆、控制流重組和預防性混淆。

到目前為止,對于Java程序的保護,混淆技術還是最基本的保護方法。Java混淆工具也非常多,包括商業的、免費的、開放源代碼的。Sun公司也提供了自己的混淆工具。它們大多都是對Class文件進行混淆處理,也有少量工具首先對源代碼進行處理,然后再對Class進行處理,這樣加大了混淆處理的力度。目前,商業上比較成功的混淆工具包括JProof公司的1stBarrier系列、Eastridge公司的JShrink和4thpass.com的SourceGuard等。

主要的混淆技術按照混淆目標可以進行如下分類,它們分別為符號混淆(Lexical Obfuscation)、數據混淆(Data Obfuscation)、控制混淆(Control Obfuscation)、控制流重組(Control-flow restructuring)、預防性混淆(Prevent Transformation)。

一、符號混淆

在Class中存在許多與程序執行本身無關的信息,例如方法名稱、變量名稱,這些符號的名稱往往帶有一定的含義。例如某個方法名為getKeyLength(),那么這個方法很可能就是用來返回Key的長度。符號混淆就是將這些信息打亂,把這些信息變成無任何意義的表示,例如將所有的變量從vairant_001開始編號;對于所有的方法從method_001開始編號。這將對反編譯帶來一定的困難。對于私有函數、局部變量,通常可以改變它們的符號,而不影響程序的運行。但是對于一些接口名稱、公有函數、成員變量,如果有其它外部模塊需要引用這些符號,我們往往需要保留這些名稱,否則外部模塊找不到這些名稱的方法和變量。因此,多數的混淆工具對于符號混淆,都提供了豐富的選項,讓用戶選擇是否、如何進行符號混淆。

二、數據混淆

數據混淆是對程序使用的數據進行混淆。混淆的方法也有多種,主要可以分為改變數據存儲及編碼(Store and Encode Transform)、改變數據訪問(Access Transform)。

改變數據存儲和編碼可以打亂程序使用的數據存儲方式。例如將一個有10個成員的數組,拆開為10個變量,并且打亂這些變量的名字;將一個兩維數組轉化為一個一維數組等。對于一些復雜的數據結構,我們將打亂它的數據結構,例如用多個類代替一個復雜的類等。

另外一種方式是改變數據訪問。例如訪問數組的下標時,我們可以進行一定的計算,圖5就是一個例子。 在實踐混淆處理中,這兩種方法通常是綜合使用的,在打亂數據存儲的同時,也打亂數據訪問的方式。經過對數據混淆,程序的語義變得復雜了,這樣增大了反編譯的難度。

三、控制混淆

控制混淆就是對程序的控制流進行混淆,使得程序的控制流更加難以反編譯,通常控制流的改變需要增加一些額外的計算和控制流,因此在性能上會給程序帶來一定的負面影響。有時,需要在程序的性能和混淆程度之間進行權衡。控制混淆的技術最為復雜,技巧也最多。這些技術可以分為如下幾類:

增加混淆控制 通過增加額外的、復雜的控制流,可以將程序原來的語義隱藏起來。例如,對于按次序執行的兩個語句A、B,我們可以增加一個控制條件,以決定B的執行。通過這種方式加大反匯編的難度。但是所有的干擾控制都不應該影響B的執行。

四、控制流重組

重組控制流也是重要的混淆方法。例如,程序調用一個方法,在混淆后,可以將該方法代碼嵌入到調用程序當中。反過來,程序中的一段代碼也可以轉變為一個函數調用。另外,對于一個循環的控制流,為可以拆分多個循環的控制流,或者將循環轉化成一個遞歸過程。這種方法最為復雜,研究的人員也非常多。

五、預防性混淆

這種混淆通常是針對一些專用的反編譯器而設計的,一般來說,這些技術利用反編譯器的弱點或者Bug來設計混淆方案。例如,有些反編譯器對于Return后面的指令不進行反編譯,而有些混淆方案恰恰將代碼放在Return語句后面。這種混淆的有效性對于不同反編譯器的作用也不太相同的。一個好的混淆工具,通常會綜合使用這些混淆技術。

 

【編輯推薦】

  1. 20個開發人員非常有用的Java功能代碼
  2. 走進Java 7中的模塊系統
  3. JavaFX 1.2 已經發布 主要新功能一覽
  4. 2009年十大Java技術解決方案
  5. 2008最值得學習的五種JAVA技術


 

責任編輯:仲衡 來源: jethro的個人主頁
相關推薦

2017-02-20 13:54:14

Java代碼編譯

2025-04-02 07:42:49

2021-03-07 16:31:35

Java編譯反編譯

2015-01-15 11:01:43

2011-04-20 10:32:44

java反編譯

2011-03-07 16:32:01

2009-06-11 13:49:30

2011-05-31 14:52:13

Android 反編譯 方法

2012-11-06 10:02:04

JavaJadEclipse

2014-09-25 10:28:02

反編譯工具Java

2015-01-15 10:15:16

Android反編譯-smail語法

2011-05-31 14:38:04

Android 反編譯

2009-07-31 14:59:00

2023-08-04 17:52:22

2024-04-07 00:00:00

.NETILSpy操作指南

2024-03-27 08:23:39

2011-05-31 14:18:17

2021-05-07 16:23:54

鴻蒙HarmonyOS應用

2021-12-10 10:05:27

Java反編譯jar

2021-05-18 10:18:15

Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲最大的成人网 | 中文字幕在线播放第一页 | 精品一区二区三区四区五区 | 成人美女免费网站视频 | 国产精品久久久久aaaa九色 | 国产综合久久 | 日韩精品一区二区三区在线观看 | 亚洲激情一区二区 | 国产精品久久久久久久模特 | 欧美日韩成人影院 | 国产黄色av网站 | 欧美日韩国产一区二区三区 | 久久精品一区 | 第一区在线观看免费国语入口 | 一区二区三区四区在线 | 成人a免费 | 91免费版在线 | 美女国产一区 | 国产做a爱片久久毛片 | 久久国产婷婷国产香蕉 | 91精品国产91久久久久久不卞 | 亚洲精品九九 | 欧美久久精品一级黑人c片 91免费在线视频 | 成年人免费看的视频 | 1204国产成人精品视频 | 欧美性jizz18性欧美 | 欧美性久久| 精品日韩 | 国产一区二区不卡 | 中国一级大毛片 | 99这里只有精品视频 | 久久一区二区三区四区五区 | 国产精品18久久久久久久 | eeuss国产一区二区三区四区 | 国内精品成人 | 久久蜜桃资源一区二区老牛 | 国产伦精品一区二区三区高清 | 综合精品久久久 | 在线观看av网站 | 久久综合久久久 | 日韩精品久久久久久 |