1. 程式人生 > >用DexClassLoader實現加殼

用DexClassLoader實現加殼

File dex=new File(Environment.getExternalStorageDirectory().toString()+File.separator+"proxy.dex");

try {
InputStream input=this.getAssets().open("proxy.dex");
dex.createNewFile();
FileOutputStream fo=new FileOutputStream(dex);
int a=0;
byte bf[]=new byte[1024];
while ((a=input.read(bf))!=-1) {
fo.write(bf,0,a);
fo.flush();
}
fo.close();
input.close();
} catch (IOException e) {

e.printStackTrace();
}

File libs = this.getDir("payload_lib", MODE_PRIVATE);  
        
        String libPath = libs.getAbsolutePath();  
File dex_in=new File(Environment.getExternalStorageDirectory().toString()+File.separator+"proxy.dex");
File optimizedDexOutputPath = getDir("temp", Context.MODE_PRIVATE);
ClassLoader apk_loader=getClassLoader();


loader=new DexClassLoader(dex_in.getAbsolutePath(), 
optimizedDexOutputPath.getAbsolutePath(), null, apk_loader);


Object currentActivityThread = RefInvoke.invokeStaticMethod(  
            "android.app.ActivityThread", "currentActivityThread",  
            new Class[] {}, new Object[] {});  
    String packageName = this.getPackageName();  
    ArrayMap mPackages =  (ArrayMap) RefInvoke.getFieldOjbect(  
            "android.app.ActivityThread", currentActivityThread,  
            "mPackages");  
    WeakReference wr = (WeakReference) mPackages.get(packageName);  
  /*  DexClassLoader dLoader = new DexClassLoader(dex_in.getAbsolutePath(), optimizedDexOutputPath.getAbsolutePath(),  
            libPath, (ClassLoader) RefInvoke.getFieldOjbect(  
                    "android.app.LoadedApk", wr.get(), "mClassLoader")); */ 
    RefInvoke.setFieldOjbect("android.app.LoadedApk", "mClassLoader", wr.get(), loader);

相關推薦

DexClassLoader實現

File dex=new File(Environment.getExternalStorageDirectory().toString()+File.separator+"proxy.dex");try {InputStream input=this.getAssets().open("proxy.dex"

C++實現(基礎版)

最近一直在15PB學習,現階段學的主要是關於殼的知識,正好現在也在做殼這個階段專案,用了2天的時間實現了一個基礎版的C++寫的殼,拿出來跟大家分享一下,程式碼量不多,但知識點不少,適合新手學習提高~         殼的流程看上去並不複雜,但需要的是你對PE

WebService實現對數據庫進行操作(添+刪除+修改)(轉)

add exe dispose eth 連接 字段 article log conn 轉自:http://blog.csdn.net/beyondqd/article/details/6703169 表為User,字段有 編號: int id,用戶名:string User

shell寫一個簡易計算器,可以實現、減、乘、除運算,假如腳本名字為1.sh,執行示例:./1.

a-z 依次 腳本 als 示例 內置 數位 特殊字符 使用 用shell寫一個簡易計算器,可以實現加、減、乘、除運算,假如腳本名字為1.sh,執行示例:./1.sh 1 + 2#!/bin/bash if [ $# -ne 3 ] then echo "參

JavaScript實現CheckBox的全選取消反選,及遮罩層中添內容

document 當前 CI itl HA posit size classlist ML 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta cha

軟件的原理及實現

win cat ESS cte ORC dword bst typeof 解密 加殼的實現 我是個初學者,所知有限,難免會有錯誤,如果有人發現了錯誤,還請指正。 先大致說一下加殼的原理,即在原PE文件(後面稱之為宿主文件)上加一個新的區段(也就是殼),然後從這個新

Android中的Apk的加固 原理解析和實現

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

JAVA實現某個日期一天

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

類方法實現python實現一個簡單的單詞本,添/查找/刪除單詞。

end code div keys style 成功 move print utf 1.實現一個簡單的單詞本,功能: ①添加單詞,當所添加的單詞已存在時,讓用戶知道 ②查找單詞,當查找的單詞不存在時,讓用戶知道 ③刪除單詞,當刪除的單詞不存在時,讓用戶知道 以上

Flutter實現一個塗鴉和水印功能

本文涉及的知識點:截圖、圖片儲存、根據使用者手勢實時繪製canvas。 GitHub地址:github.com/yumi0629/Fl… 先上效果圖: 需求分析   這次的想法是移植自專案中的一個小功能:截屏當前頁面,添加塗鴉功能後,分享給第三方APP。分享功能我們

java入門:(建構函式的妙實現複數的減乘除

在複數類中,加減乘除各用兩種方法實現。舉個例子,就比如a = b + c和a += b; 在該複數類中,用到了static修飾符,如此,被修飾的方法可以用類名通過圓點運算子直接呼叫。可以解決沒有物件呼叫的問題。用類名直接呼叫,傳入兩個引數。 減法利用加法實現,除法利用乘法

django實現購物車的商品減功能

首先寫出html程式碼 <button goodsid="{{ good.id }}" class="subShopping">-</button> <span>0</span>

string容器實現大整數比較、、減、乘和除(減法實現)(函式版)

這些函式支援2~36進位制,採用的是STL中的string容器。 //big_number_f.h #ifndef BIG_NUMBER_F #define BIG_NUMBER_F #include<iostream> #include<string> #include

純CSS實現載中動畫效果

cit one form overflow relative tor -o ica tom HTML &lt;div class="pswp__preloader__icn"&gt; &lt;div class="

js實現按鈕減,減到0停止

html程式碼如下: <span class="btngroup"> <button id="btn1" class="

java實現分數各種運算(減乘除,求餘,求冪,求兩個數中的較大值,較小值)

package Rational; import java.util.StringTokenizer; /** * @author SunKun * 分數四則運算 */ public class Calculator { int numerator; // 分子 int denominator

python實現從1到100的三種方法: for迴圈,while迴圈,匯入模組法

第一種是for迴圈 def sumStartToEnd(start,end): sum = 0 for n in range(start,end+1,1): sum

C++實現時間的減運算

#include <iostream> using namespace std; struct Time { int hour; int minute; int second; }; bool AddTime(Time&desTime, const T

Androidnative實現

    本例僅在Android2.3模擬器跑通過,如果要適配其他機型,請自行研究,這裡只是拋磚引玉。    0x00    在Android中的Apk的加固(加殼)原理解析和實現,一文中脫殼程式碼都寫在了java層很容易被識別出來,很多需求需要把脫殼的程式轉移到native層

軟體的原理及實現

加殼的實現 我是個初學者,所知有限,難免會有錯誤,如果有人發現了錯誤,還請指正。 先大致說一下加殼的原理,即在原PE檔案(後面稱之為宿主檔案)上加一個新的區段(也就是殼),然後從這個新的區段上開始執行;也就算是成功的加上了殼;下面我們就說一下具體的實現。