一、安卓逆向技術簡介
安卓逆向工具是指對安卓應用程序進行逆向分析和破解的工具集合,主要用於對已有應用程序進行分析、調試、修改或重新打包,從而開發出新的應用或者實現個性化定製,是安卓應用開發過程中不可或缺的工具之一。
安卓逆向工具主要分為多個方向,比如應用內存中數據的查看工具、未混淆apk逆向工程工具、dex文件優化工具、smali編輯工具、功能測試框架等。逆向工具的多樣性極大地提升了應用開發效率,因為它們可以讓開發者更加快速地定位問題和修改問題。下面將簡單介紹其中幾個常用的安卓逆向工具。
二、常用的安卓逆向工具
1. Apktool
<dependency>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>replacer</artifactId>
<version>1.7.2</version>
</dependency>
Apktool 是一個流行的用於逆向編譯Android APK文件的開源工具。它可以將APK文件還原成Dex文件、Smali文件和資源文件,可以對逆向後的文件進行深度自定義修改,再通過打包工具重新打包成一個新的APK文件。使用 Apktool 工具,你可以輕鬆地查看Android應用程序的源代碼、圖片、XML文件、布局文件以及Manifest文件,便於對已有應用程序進行重新打包和優化。比如查看已有的翻譯軟體的資源文件,修改成自己需要的翻譯。
2. Frida
// 安裝 Frida Server
adb push /data/local/tmp/
adb shell chmod 755 /data/local/tmp/
adb shell /data/local/tmp/
// 安裝 python 包
pip install frida
Frida 是一款強大的動態插樁工具,支持多種平台和體系結構,包括Windows、macOS、Linux、iOS、Android等,是安卓逆向工具的重要成員。Frida的使用可以幫助開發人員在運行時動態地修改和控制任何安卓應用程序,修改內存、hook API等常見操作都可以用 Frida 實現。同時,Frida 還支持JavaScript語言,用戶可以使用高級腳本來操作Android應用程序。通過遠程修改,可以輕鬆地分析和測試應用程序。
3. Dex2jar
// 安裝Dex2jar
git clone https://github.com/pxb1988/dex2jar.git
cd dex2jar
./dex2jar.sh <sourcefile.apk>
Dex2jar是一個將Android App中的dex文件轉換成Java class文件的工具,可以方便地進行Java代碼分析和反編譯,逆向 Bytecode 等操作。它可以幫助開發人員分析和解析Android應用程序的Java代碼,比如一款防火牆應用程序可以通過 Dex2jar 工具將APK文件反編譯成 class 文件,分析其程序邏輯,找出防護規則和破解方法。同時,Dex2jar 支持逆向最新的Android系統,是安卓逆向工具是不可或缺的。
三、安卓逆向技術應用實例
在安卓應用程序開發中,有時候需要解決一些逆向的問題,比如逆向分析一些應用程序的行為,破解一些軟體的安全性,對一些安全漏洞的挖掘等。下面,以圖像識別應用程序為例,介紹如何使用安卓逆向工具進行開發。
1. 使用 Apktool 工具進行逆向操作
// 解包
apktool d -s your_app.apk
// 修改代碼
your_app/smali/.../*.smali
// 重新打包
apktool b your_app
假設我們需要借用一個已有圖像識別應用程序的應用程序界面並且加上一些個性化功能。我們可以使用 Apktool 工具進行逆向操作,分析已有的APK文件,解壓Smali文件進行修改、添加、刪除和替換。我們可以將已有的圖像識別應用程序的主屏界面進行拆解,再將其按照自己的需求進行重新組裝。比如可以將原有的語言和圖片全部替換成自己的內容和風格。
2. 使用Frida工具進行內存修改和函數調用
// 修改返回值
Interceptor.replace(libxyz!GetResponse, new NativeCallback(function(args){
var result = args[0];
console.warn('return value:', result);
result.replace(ptr('0x0'));
return result;
}, 'int', ['pointer']));
// Hook函數
Interceptor.attach(Module.findExportByName("libxyz.so", "function_name"), {
onEnter: function(args) {
console.log("[+] Function called: " + args[0]);
console.log("\t[-] Injection: Found: " + Memory.readUtf8String(args[1]));
// modify args
Memory.writeUtf8String(args[1], "new_value");
}
});
使用 Frida 工具可以對應用程序的方法進行Hook修改和數據更改,比如通過修改返回值可以在不修改原程序代碼的情況下達到自己想要的目的。比如圖像識別應用程序的演算法邏輯可能不滿足我們的需求,我們可以使用 Frida 工具破解該安卓應用程序的邏輯。如下,我們可以Hook其關鍵函數,再將其返回值進行修改。
3. 使用Dex2jar工具進行分析
// Convert .dex to .jar
./d2j-dex2jar.sh classes.dex
// Decompile .jar
./jd-core-java --outputDir ./classesSrc ./classes-dex2jar.jar
使用 Dex2jar 工具和 Java 反編譯工具可以對應用程序的Java代碼進行分析和破解。例如,在圖像識別應用程序中,我們可以使用 Dex2jar 工具將應用程序中的dex文件反編譯成jar包,再通過 JD-GUI 工具查看java源代碼。將 APK 文件反編譯成 dex 文件,就能夠快速定位代碼問題。逆向工程分析思路是反編譯 dex 文件,查看 smali 代碼的實現函數,通過這個分析一個應用程序的功能實現。
原創文章,作者:VCHB,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/135039.html