當前位置:首頁 » 編程軟體 » dex編譯為so

dex編譯為so

發布時間: 2023-01-31 13:41:25

❶ 怎麼修改apk安裝包標題apk修改器沒用,用電腦怎麼改

你可以用電腦試試這個
Android 逆向助手主要功能:
1、反編譯apk;
2、重新打包成apk;
3、對apk進行簽名;
4、反編譯dex;
5、重新打包成dex;
6、dex轉jar;
7、dex轉ddx;
8、dex導出成txt;
9、反編譯so;
10、jar轉dex;
11、提取dex;
12、替換dex;
13、修復dex;
14、加密xml轉txt;
15、字元串unicode編解碼。

❷ 應用加固對DEX文件,SO文件是如何保護的

您好,NAGA·IN娜迦信息科技加固平台的服務挺不錯的。可以對APP文件/APK應用進行dex加殼、 亂序保護、so加殼、虛擬機指令保護等多重保護,有效的對存儲數據進行加密保護、保護APP安全,是APP安全加固的優秀企業。

❸ android jni 使用第三方提供的.so庫及所對應的jar包

1.將SO文件直接放到libs/armeabi下,然後代碼中System.loadLibrary("xxx");再public native static int xxx_xxx_xxx();接下來就可以直接調用xxx_xxx_xxx()方法;
2.第二種方案,創建自己的SO文件,在自己的SO文件里調用第三方SO,再在程序中調用自己的SO,這種比較復雜,需要建java類文件,生成.h文件,編寫C源文件include之前生成的.h文件並實現相應方法,最後用android NDK開發包中的ndk-build腳本生成對應的.so共享庫。 http://www.ijiami.cn/newsInfo?id=293&v=3

2. DEX加殼保護,DEX指令動態載入保護和高級源碼混淆保護。其中DEX加殼保護是「愛加密」主推的賣點,該技術通過將DEX文件隱藏,並生成一個類似於虛像的殼文件,阻止黑客利用反編譯工具獲取App源碼。另外,愛加密http://www.ijiami.cn/推出了so庫保護,使得C/C++ 層面的代碼安全也得到防護。加上資源文件保護(圖片、音頻等文件的防查看和防修改)、xml 主配文件保護(對主配文件進行二次簽名)、內存保護等措施,可以基本保證App的動態和靜態安全。

❹ 怎麼加固安卓軟體

加固安卓軟體一般要達到以下效果:

1、防逆向:通過DEX 文件加殼以及DEX 虛擬化等技術,防止代碼被反編譯和逆向分析。

2、防篡改:通過校驗 APK 開發者簽名,防止被二次打包,植入廣告或惡意代碼。

3、防調試:防止應用被 IDA、JEB 等工具調試,動態分析代碼邏輯。

VirboxProtector安卓加固的核心技術一般有:

  • DEX 文件加密隱藏

    對 DEX 文件加殼保護,防止代碼被竊取和反編譯。

  • SO 區段壓縮加密

    對 SO 庫中的代碼段和數據段壓縮並加密,防止被 IDA 等工具反編譯。

  • 單步斷點檢測

    在混淆的指令中插入軟斷點檢測暗樁,防止native層run trace和單步調試。

  • 防動態調試

    防止應用被 IDA、JEB 等工具調試,動態分析代碼邏輯。

  • 開發者簽名校驗

    對 APK 中的開發者簽名做啟動時校驗,防止被第三方破解和二次打包。

  • SO 內存完整性校驗

    在 SO 庫載入時校驗內存完整性,防止第三方對 SO 庫打補丁。

  • SO 代碼混淆

    對 SO 庫中指定的函數混淆,通過指令切片、控制流扁平化、立即加密等技術手段,將 native 指令轉換為難以理解的復雜指令,無法被 IDA 反編譯,並且無法被還原。

  • SO 代碼虛擬化

    對 SO 庫中指定的函數虛擬化,可以將 x86、x64、arm32、arm64 架構的機器指令轉換為隨機自定義的虛擬機指令,安全強度極高,可通過工具自定義配置,調整性能與安全性。

  • DEX 虛擬機保護

    對 DEX 中的 dalvik 位元組碼進行虛擬化,轉換為自定義的虛擬機指令,最後由 native 層虛擬機解釋執行,防止逆向分析。

❺ 怎樣防止Android apk被反編譯,用什麼加密方法來保護dex源碼文件不被注入惡意代碼杜絕二次打包的出現

防止Android apk被反編譯的方法:

  1. 判斷apk簽名是否與原版簽名是否一致

  2. 代碼混淆,將混淆的級別設置高點,混淆出來以後代碼全部變亂

  3. 使用NDK編程,將核心演算法用c/c++來編寫,打包成so庫供java層調用

❻ android怎樣破解已使用加殼技術的APP

破解加了dex殼的app,關鍵是要獲得解密後的源dex,現在Android加殼技術大多都是通過DexClassLoader或者隱藏的函數openDexFile來將源dex載入進來,然後動態替換Application來啟動源程序,跟Windows上傳統的PE文件加殼有一定區別。
要破解傳統的殼,需要跟蹤控制流找到OEP,然後把源程序從內存中mp下來,重建輸入表,最困難的就是要跟著外殼的控制流走,安全工程師為了加大破解難度,使用了很多技術來讓破解者走得更艱難。安全工程師與破解者對抗的關鍵點就在尋找OEP的困難性上。
在Android平台上,正因為新興的dex加殼技術不成熟,導致有些另類的脫殼方法可以繞過分析演算法,直接將源程序mp下來。
舉個例子,安卓在4.0版本以後提供openDexFile這個函數來從內存中載入dex,所需要提供的參數是源dex在內存中的地址,所以只要對這個函數下斷,然後從寄存器里找到內存地址,就能將解密後的源dex從內存中mp下來,直接對其反編譯就能獲得源代碼了。
更進一步,關於openDexFile這個函數,其實它與libdvm.so這個庫有密不可分的關系,這個庫里提供大量操作dex文件的函數,如果對這個庫里的相關函數下斷,然後從內存中暴力mp一大塊內存區域,經常能直接將內存中的源dex給抓下來。

❼ android怎麼動態調試dex

1.1 安裝JDK
JAVA環境的搭建請自行查找資料,這里不做詳述。
1.2 安裝Android SDK
下載地址:http://developer.android.com/sdk/index.html。
下載完安裝包後解壓到任意一目錄,然後點擊運行SDK Manager.exe,然後選擇你需要的版本進行安裝,如圖:

1.3 安裝Eclipse集成開發環境
下載地址:http://www.eclipse.org/downloads。選擇Eclipse for Mobile Developers,解壓到任意目錄即可。
1.4 創建Android Virtual Device
動態調試可以用真實的手機來做調試環境,也可以用虛擬機來做調試環境,本文採用虛擬機環境。因此創建虛擬機步驟如下:
1打開Eclipse –>windows->Android Virtual Device

2點擊Create,然後選擇各個參數如圖:

這里Target 就是前面步驟中安裝的SDK 選擇任意你覺得喜歡的版本就可以。點擊OK 就創建完畢。
1.5 安裝 APK改之理
這個是一個很好用的輔助調試的軟體,請自行搜索下載。
1.6 安裝 IDA6.6
IDA6.6開始支持安卓APP指令的調試,現該版本已經提供免費下載安裝,請自行搜搜。
0x02 Dalvik指令動態調試
2.1 准備工作
安卓APP應用程序後綴為apk,實際上是一個壓縮包,我們把它改後綴為rar打開如圖:

其中classes.dex是應用的主要執行程序,包含著所有Dalvik指令。我們用APK改之理打開apk,軟體會自動對其進行反編譯。反編譯後會有很多smail文件,這些文件保存的就是APP的Dalvik指令。
在APK改之理里雙擊打開AndroidManifest.xml,為了讓APP可調試,需要在application 標簽里添加一句android:debuggable="true" 如圖:

然後點擊保存按鈕,然後編譯生成新的apk文件。接著打開Eclipse –>windows->Android Virtual Device,選擇剛才創建的虛擬機,然後點擊start,虛擬機便開始運行。偶爾如果Eclipse啟動失敗,報錯,可以同目錄下修改配置文件:

把配置參數原本為512的改為256 原本為1024的改為512,然後再嘗試啟動。
在SDK安裝目錄有個命令行下的調試工具adb shell,本機所在目錄為E:\adt-bundle-windows-x86-20140702\sdk\platform-tools,把adb.exe注冊到系統環境變數中,打開dos命令行窗口執行adb shell 就可以進入APP命令行調試環境,或者切換到adb所在目錄來執行adb shell。

這里先不進入adb shell,在DOS命令行下執行命令:adb install d:\1.apk 來安裝我們剛才重新編譯好的APK文件。安裝完畢會有成功提示。
2.2 利用IDA動態調試
將APP包里的classes.dex解壓到任意一目錄,然後拖進IDA。等待IDA載入分析完畢,點擊Debugger->Debugger Options如圖

按圖所示勾選在進程入口掛起,然後點擊Set specific options 填入APP包名稱和入口activity 如圖:

其中包的名稱和入口activity 都可以通過APK改之理里的AndroidManifest.xml 文件獲取:

1
2
3

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.simpleencryption">
<application android:allowBackup="true" android:debuggable="true" android:icon="@drawable/creakme_bg2" android:label="@string/app_name" android:theme="@style/AppTheme">
<activity android:label="@string/app_name" android:name=".MainActivity">


然後在IDA點擊Debugger->Process Options

其他默認不變,埠這里改為8700。這里默認埠是23946,我在這里困擾了很久,就是因為這個埠沒有改為8700所致。然後我們看看這個8700埠是怎麼來的。在Android SDK里提供了一款工具DDMS,用來監視APP的運行狀態和結果。在SDK的TOOLS目錄有個DDMS.BAT的腳步,運行後就會啟動DDMS。由於我的本機安裝了SDK的ADT插件,DDMS集成到了Eclips中,打開Eclips->Open perspective->ddms就啟動了DDMS。
如圖所示:

在DDMS選中某個進程後面就會注釋出它的調試埠,本機這里是8700。
到此所有的工作就准備就緒,然後就可以下斷點來調試該APP了。我們在APK改之理中在com目錄下查看smali文件 發現MainActivity.smali里有一個感興趣的函數getPwdFromPic(),那麼我們就對它下斷以跟蹤APP的運行。
在IDA里搜索字元串getPwdFromPic,發現onClick有調用該函數
我們在onClick 函數開始位置按F2下斷如圖:

然後點擊上圖中綠色三角形按鈕啟動調試如圖:

調試過程中有一個問題出現了很多次,浪費了我大量的時間,就在寫文章的時候,操作時還是遇到了這樣的問題。就是點擊啟動後IDA提示can』t bind socket,琢磨了很久終於找到原因了,當打開過一次DDMS後 每次啟動Eclips都會啟動DDMS 而8700埠正是被這個DDMS給佔用了,然後每次都會啟動失敗,解決辦法就是 虛擬機運行起來後關閉掉Eclips,這時一切就正常了!
事例中是一個APP crackme 提示輸入密碼才能進入正確界面。這個時候我們輸入123,點擊登陸,IDA中斷在了我們設置斷點的地方,這時選中ida->debugger->use source level debugger,然後點擊ida->debugger->debugger windows->locals打開本地變數窗口,如圖:

然後按F7或F8單步跟蹤程序流程,同時可以觀察到變數值的變化,也可以在IDA右鍵選擇圖形視圖,可以看到整個APP執行的流程圖:

如上圖所示 變數窗口中我們輸入了123 被轉化成的密碼是么廣亡,pw變數也顯示出了正確的密碼,其實這個時候已經很容易判斷出正確密碼了。
0x03 Andoid原生動態鏈接庫動態調試
通常為了加密保護等措施,有時dex執行過程中會調用動態鏈接庫文件,該文件以so為後綴,存在於APP文件包里。

這里我們以動態附加的方式來調試原生庫。
3.1 准備工作
1、將IDA->dbgsrv目錄下的android_server拷貝到虛擬機里,並賦予可執行許可權
DOS命令分別為:
adb shell pull d:\ android_server /data/data/sv
adb shell chmod 755 /data/data/sv

2、啟動調試伺服器android_server
命令:adb shell /data/data/sv
伺服器默認監聽23946埠。
3、重新打開DOS窗口進行埠轉發,命令:
adb forward tcp:23946 tcp:23946 如圖:

3.2 利用IDA進行動態調試
1、虛擬機里啟動要調試的APP 2、啟動IDA,打開debugger->attach->remote Armlinux/andoid debugger

埠改為23946 其他保持不變,點擊OK

如上圖,選中要調試的APP 的數據包名,然後點擊OK。
正常情況下,IDA會把APP進程掛起。
3、由於當前程序不是在動態鏈接庫領空,這時我們要重新打開一個IDA,用它打開需要調試的so文件,找到需要下斷的位置的文件偏移,並做記錄,然後關閉後面打開的這個IDA。
4、在原IDA界面按下ctrl+s鍵,找到並找到需要調試的so,同時記錄該文件的載入基址。然後點擊OK 或者cancel按鈕關閉對話框。
5、按下快捷鍵G 輸入基址+文件偏移所得地址,點擊OK 就跳轉到SO文件需要下斷的地方,這時按下F2鍵設置斷點。當APP執行到此處時便可以斷下來。
3.3 在反調試函數運行前進行動態調試
程序載入so的時候,會執行JNI_OnLoad函數,做一系列的准備工作。通常反調試函數也會放到JNI_OnLoad函數里。進行4.2中第2步時也許會遇到如下情況:

這時APP檢測到了調試器,會自動退出,那麼這時調試策略需要有所改變。
接著4.1第3步後,在DOS命令行執行命令:
adb shell am start -D -n com.yaotong.crackme/com.yaotong.crackme.MainActivity

來以調試模式啟動APP 如圖:
com.yaotong.crackme是APP包名稱,com.yaotong.crackme.MainActivity是執行入口 這些可以用APK改之理查看。

這時由於APP還未運行,那麼反調試函數也起不了作用,按照4.2中第2步把APP掛起。這時IDA會中斷在某個位置

然後點擊debugger->debugger opions設置如下:

點擊OK 後按F9運行APP,然後再DOS命令下執行命令:
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

這時APP會斷下來,然後按照4.2中的3、4、5補找到JNI_OnLoad函數的地址並下斷,然後按F9 會中斷下來。然後便可以繼續動態跟蹤調試分析。

❽ 如何用DexClassLoader載入有so文件的apk

新建一個andorid工程(我比較懶,剛才已經就是使用的andorid工程),然後把testdex.jar復制到assets目錄下面,來看看我的工程目錄吧。

然後貼出FileUtil.java的代碼package com.demo.utile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;

import android.content.Context;
import android.os.Environment;

publicclassFileUtile {
public static void CopyAssertJarToFile(Context context, String filename,
String des) {
try {

File file = new File(Environment.getExternalStorageDirectory()
.toString() + File.separator + des);
if (file.exists()) {
return;
}

InputStream inputStream = context.getAssets().open(filename);
file.createNewFile();
FileOutputStream fileOutputStream = new FileOutputStream(file);
byte buffer[] = new byte[1024];
int len = 0;
while ((len = inputStream.read(buffer)) != 0) {
fileOutputStream.write(buffer, 0, len);
}
fileOutputStream.close();
fileOutputStream.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

這個類主要的作用就是把我們的jar相當於解壓到一個目錄下面。我這里是解壓到外置設備上的其實這樣做的安全性並不高,但是為了方便我就這樣做了,建議是解壓到包目錄下面。記住別忘了給應用加許可權!!!!!文件讀寫許可權!!!! 最後我們來看看Activity裡面的代碼package com.demo.activity;

import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Environment;

import com.demo.utile.FileUtile;

import dalvik.system.DexClassLoader;

publicclassMainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
FileUtile.CopyAssertJarToFile(this, "testdex.jar", "testdex.jar");

File file = new File(Environment.getExternalStorageDirectory()
.toString() + File.separator + "testdex.jar");
final File optimizedDexOutputPath = getDir("temp", Context.MODE_PRIVATE);
DexClassLoader classLoader = new DexClassLoader(file.getAbsolutePath(),
optimizedDexOutputPath.getAbsolutePath(), null,
getClassLoader());
try {
Classiclass = classLoader.loadClass("com.demo.dex.IClass");
Constructor istructor = iclass.getConstructor(Context.class);
//利用反射原理去調用
Method method = iclass.getMethod("call", null);
String data = (String) method.invoke(istructor.newInstance(this), null);
System.out.println(data);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
其實這樣調用還有一點要注意的是我感覺這樣做每次都要去調用反射,總給我感覺來說不太友好,那麼這里我有給出了下面一種寫法,這種寫法最主要的地方是,要獲得Iinterface這個介面,把Iinterface.java這個文件復制到你的工程裡面,記得包名相同,調用的時候我們可以這樣來調用它。Classiclass = classLoader.loadClass("com.demo.dex.IClass");
Constructor istructor = iclass.getConstructor(Context.class);
Iinterface iinterface = (Iinterface) istructor.newInstance(this);
String data = iinterface.getData();
iinterface.call();
Toast.makeText(this, data, 0).show();轉載僅供參考,版權屬於原作者。

❾ 安卓加密要怎麼做特別是針對二次打包與dex文件保護的加密。

防止Android
apk被反編譯的方法:
判斷apk簽名是否與原版簽名是否一致;
代碼混淆,將混淆的級別設置高點,混淆出來以後代碼全部變亂;
使用NDK編程,將核心演算法用c/c++來編寫,打包成so庫供java層調用

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:750
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:1012
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:719
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:879
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:774
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1127
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:351
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:229
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:912
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:876