當前位置:首頁 » 安卓系統 » android反匯編

android反匯編

發布時間: 2022-04-27 13:43:58

1. Android 反匯編出來的從a 到z 是什麼,到底是在包名下的才是主要研究的代碼,wps里的類是用來混淆的嗎

這個是混淆過的

2. java 堆大小錯誤 dex2jar android 反匯編的解決方案嗎

dex2jar-0.0.7.xx-SNAPSHOT(xx為版本號)文件夾不要放在有中文的目錄下

3. 安卓apk程序反匯編得到Java源碼,然後怎麼樣做修改還原成自己想要的,自己版本的apk程序呢

4. 如何利用Capstone引擎寫一個Android反匯編工具

編譯Capstone Engine
接下來為Android交叉編譯Capstone Engine
# git clone https://github.com/aquynh/capstone.git
Cloning into 'capstone'...
remote: Counting objects: 16805, done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 16805 (delta 4), reused 0 (delta 0), pack-reused 16789
Receiving objects: 100% (16805/16805), 26.10 MiB | 3.01 MiB/s, done.
Resolving deltas: 100% (12089/12089), done.Checking connectivity... done.
# cd capstone
# NDK=~/Library/Android/sdk/ndk-bundle/ ./make.sh cross-android arm
在當前目錄中我們應該有一個名為libcapstone.so的文件,將其復制到我們之前創建的jniLibs目錄中。
接著下載一份Capstone Java bindings,並將其放入Android Studio項目中的app/libs/目錄,其提供了一些方法和類幫助我們與Capstone Engine進行交互。
編譯JNA
Capstone Java bindings利用JNA函數庫載入並與Capstone預制函數庫溝通,我們需要為Android編譯JNA JAR並提取支持JNA的二進制庫平台。
這一步,你需要安裝ant:
# git clone https://github.com/twall/jna.git
Cloning into 'jna'...
remote: Counting objects: 41416, done.
remote: Total 41416 (delta 0), reused 0 (delta 0), pack-reused 41416
Receiving objects: 100% (41416/41416), 213.06 MiB | 4.51 MiB/s, done.
Resolving deltas: 100% (26780/26780), done.Checking connectivity... done.
# cd jna
# PATH=$PATH:~/Library/Android/sdk/ NDK_PLATFORM=~/Library/Android/sdk/ndk-bundle/platforms/android-21/ ant -Dos.prefix=android-arm dist
JNA完成編譯之後,我們還需要復制一些文件到Android Studio project。首先復制dist/jna.jar到項目下的app/libs/目錄,然後就像解壓zip文件包一樣提取dist/android-arm.jar文件,將libjnidispatch.so文件復制到項目下的app/src/main/jniLibs目錄。JNA使用的這些函數庫通過JNI與本機函數庫進行交互。
在一起,在一起!
既然已經將所有的函數庫都進行了編譯,並將這些文件復制到項目下相對應的目錄,我們就可以開始使用Capstone Engine。在我們開始使用之前,我們需要保證復制到項目下的兩個Java庫已經被包含。要做到這一點,在Android Studio中將他們作為文件的依賴進行增加(右鍵單擊模塊,打開模塊設置,然後打開依賴關系選項卡,最後點擊'+'按鈕進行添加)
添加完成之後,我們就可以在Android項目中使用Capstone了:
import capstone.Capstone;public class MainActivity extends Activity {
private byte [] CODE = { 0x55, 0x48, (byte) 0x8b, 0x05, (byte) 0xb8, 0x13, 0x00, 0x00 };
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Capstone cs = new Capstone(Capstone.CS_ARCH_X86, Capstone.CS_MODE_64);
Capstone.CsInsn[] allInsn = cs.disasm(CODE, 0x1000);
for (int i=0; iallInsn.length; i++) {
Log.e("CAPSTONE", allInsn[i].address + " " + allInsn[i].mnemonic + " " + allInsn[i].opStr);
}
}}pre>

5. android 程序怎麼加密,不讓別人反編譯

代碼混淆(code obfuscation)是指將計算機程序的代碼,轉換成一種功能上等價,所謂功能上的等價是指其在變換前後功能相同或相近。其解釋如下:程序P經過混淆變換為P『,若P沒有結束或錯誤結束,那麼P』也不能結束或錯誤結束;而且P『程序的結果應與程序P具有相同的輸出。否則P』不是P的有效的混淆。


目前對於混淆的分類,普遍是以Collberg 的理論為基礎,分為布局混淆(layout obfuscation)、數據混淆(data obfuscation)、控制混淆(control obfuscation)和預防混淆(preventive obfuscation)這四種類型。

1. 布局混淆

布局混淆是指刪除或者混淆軟體源代碼或者中間代碼中與執行無關的輔助文本信息,增加攻擊者閱讀和理解代碼的難度。軟體源代碼中的注釋文本、調試信息可以直接刪除,用不到的方法和類等代碼或數據結構也可以刪除,這樣即可以使攻擊者難以理解代碼的語義,也可以減小軟體體積,提高軟體裝載和執行的效率。軟體代碼中的常量名、變數名、類名和方法名等標識符的命名規則和字面意義有利於攻擊者對代碼的理解,布局混淆通過混淆這些標識符增加攻擊者對軟體代碼理解的難度。標識符混淆的方法有多種,例如哈希函數命名、標識符交換和重載歸納等。哈希函數命名是簡單地將原來標識符的字元串替換成該字元串的哈希值,這樣標識符的字元串就與軟體代碼不相關了;標識符交換是指先收集軟體代碼中所有的標識符字元串,然後再隨機地分配給不同的標識符,該方法不易被攻擊者察覺;重載歸納是指利用高級編程語言命名規則中的一些特點,例如在不同的命名空間中變數名可以相同,使軟體中不同的標識符盡量使用相同的字元串,增加攻擊者對軟體源代碼的理解難度。布局混淆是最簡單的混淆方法,它不改變軟體的代碼和執行過程。

2. 數據混淆

數據混淆是修改程序中的數據域,而對代碼段不作處理。常用的數據混淆方式有合並變數、分割變數、數組重組、字元串加密等。

合並變數是將幾個變數合並為一個數據,原來的每個變數占據其中一個區域,類似於一個大的數據結構。分割變數則是將一個變數分割為兩個變數,對分割前後提供一種映射關系,將對一個變數的操作轉化為對分割後兩個變數的操作。

數組重組有數組的分割、合並、折疊和平滑等幾種方式。分割是將一個數組分成2個或多個相同維度的數組;合並則相反;折疊是增加數組的維數;平滑則是相反。

在ELF文件中,全局變數和常量字元串存放在數據段中,反匯編工具可以輕易查找到字元串與代碼之間的引用關系。在軟體破解中,通過一些字元串提示可以很方便的找到代碼關鍵語句,從而破解軟體。字元串加密則可以對這些明顯的字元串進行加密存儲,在需要時再進行解密。

3. 控制混淆

控制混淆也稱流程混淆,它是改變程序的執行流程,從而打斷逆向分析人員的跟蹤思路,達到保護軟體的目的。一般採用的技術有插入指令、偽裝條件語句、斷點等。偽裝條件語句是當程序順序執行從A到B,混淆後在A和B之間加入條件判斷,使A執行完後輸出TRUE或FALSE,但不論怎麼輸出,B一定會執行。

控制混淆採用比較多的還有模糊謂詞、內嵌外聯、打破順序等方法。

模糊謂詞是利用消息不對稱的原理,在加入模糊謂詞時其值對混淆者是已知的,而對反混淆者卻很難推知。所以加入後將干擾反匯編者對值的分析。模糊謂詞的使用一般是插入一些死的或不相關的代碼(bogus code),或者是插入在循環或分支語句中,打斷程序執行流程。

內嵌(in-line)是將一小段程序嵌入到被調用的每一個程序點,外聯(out-line)是將沒有任何邏輯聯系的一段代碼抽象成一段可被多次調用的程序。

打破順序是指打破程序的局部相關性。由於程序員往往傾向於把相關代碼放在一起,通過打破順序改變程序空間結構,將加大破解者的思維跳躍。

4. 預防混淆

預防混淆一般是針對專用的反編譯器設計的,目的就是預防被這類反編譯器反編譯。他是利用特定的反編譯器或反混淆器的弱點進行專門設計。預防混淆對於特定的反編譯器非常有效,所以在使用時要綜合利用各種反編譯器的特點進行設計。

6. android反匯編工具有哪些

apktool或dex2jar+jd gui前者需要你懂smali代碼,後者需要懂java代碼

7. 什麼是android逆向工程師

必須掌握的技能

1、負責安卓程序的加解密和數據傳輸分析、拆解、逆向等工作;
2 、逆向APK,了解運行過程;
3 、Andorid本地提權獲得root許可權;
4 、熟練掌握軟體逆向靜態分析、動態調試、代碼跟蹤等;
5 、熟悉Android開發,了解打包、反編譯、破解流程;
6 、so破解。
目前了解的如下:
1,加解密:這就很多了,一般都是遇到後再折騰解密,而且解密代碼和秘鑰一般都在代碼裡面。
2,Andorid本地提權獲得root許可權,一般真機是用recovery刷機包,但是病毒提權是怎麼樣的

目前掌握的一種提權的是像輸入命令行一樣輸入su並且用pm提權

還有一種是修改init.rc文件

3,ida動態調式和代碼跟蹤
4,打包,編譯和破解的流程是什麼樣的?
5,so破解:一般就是破殼。各種殼(360,娜迦等等)
加殼的另一種常用的方式是在二進制的程序中植入一段代碼,在運行的時候優先取得程序的控制權,做一些額外的工作。大多數病毒就是基於此原理。加殼的程序經常想盡辦法阻止外部程序或軟體對加殼程序的反匯編分析或者動態分析,以達到它不可告人的目的。這種技術也常用來保護軟體版權,防止被軟體破解。
6,了解反破解的技術
目前掌握的技術有:
1,反模擬器
2,反靜態代碼分析器如:反jeb
應該也是有很多反ida的,也就是加殼。
任職要求

1、具有豐富的Android開發分析經驗,熟悉android系統架構,熟悉android安全機制;
2、精通匯編語言、Java、C/C++語言,熟悉Smali語言,對逆向工程有濃厚興趣;
3、熟練掌握ida、gdb逆向分析工具;
4、熟練掌握軟體逆向靜態分析、動態調試、代碼跟蹤等;
5、熟悉so和Java層hook;
6、熟悉Android開發,了解打包、反編譯、破解流程;
7、深入理解arm Linux和Android底層運行機制;
8、熟練掌握各種調試工具:Smali、Dedexer、Dexmp、Apktool、Dex2jar、jd-gui。

熱點內容
怎麼上傳壓縮文件 發布:2023-02-01 04:37:33 瀏覽:529
sql資料庫只讀 發布:2023-02-01 04:37:18 瀏覽:380
哪些車配置可以自己裝 發布:2023-02-01 04:35:04 瀏覽:122
無法ftp訪問訪問超時 發布:2023-02-01 04:35:01 瀏覽:361
女多男少的伺服器我的世界 發布:2023-02-01 04:31:33 瀏覽:546
ipad存儲界面 發布:2023-02-01 04:30:37 瀏覽:121
搭建游戲伺服器區域網讓別人 發布:2023-02-01 04:29:17 瀏覽:168
java的udp 發布:2023-02-01 04:27:52 瀏覽:408
phppost請求參數 發布:2023-02-01 04:24:39 瀏覽:732
s90上綠牌的是哪個配置 發布:2023-02-01 04:16:55 瀏覽:256