㈠ 如何防止APP被二次打包
方法/步驟
1
「android APP二次打包」則是盜版正規Android APP,破解後植入惡意代碼重新打包。不管從性能、用戶體驗、外觀它都跟正規APP一模一樣但是背後它確悄悄運行著可怕的程序,它會在不知不覺中浪費手機電量、流量,惡意扣費、偷窺隱私等等行為。Android APP如何加密防二次打包?
2
面對二次打包不少安卓開發都有自己的防範措施,知名公司的APP幾乎都是自己在程序內部做過處理防止其APP被二次打包,一旦打包後重新運行則程序自動退出。接下來,詳解一下Android APP如何加密防二次打包。
3
要實現代碼內部防止Android APP被二次打包首先得了解APK的機器識別原理,APK的唯一識別是依靠包名和簽名來做鑒定的,類似豌豆夾的洗白白、360手機衛士等安全軟體對APK的山寨識別,他們就是依賴包名來確定APK然後通過簽名來確定其是否山寨。所以說自己的程序內部在啟動的時候可以通過獲取APK本身的簽名然後和正確的簽名做對比來識別自己是否被二次打包。Android APP如何加密防二次打包?
4
通過PackageManag對象可以獲取APK自身的簽名。
5
通過對簽名的碼的分解得到一串20左右的字元串,此字元串則是APK的簽名的MD5值,通過獲取的簽名MD5值與正確的MD5值進行對比,就可以識別其APK是否被盜版。Android APP如何加密防二次打包?
END
方法/步驟2
1
下圖是一些已做過保護的APP的代碼塊分析:Android APP如何加密防二次打包?
(1)「XX省電王「的防止二次打包的關鍵代碼
2
(2)「XX電池管家」的防止二次打包的關鍵代碼
3
以上兩處都是smali層的代碼,以上2處代碼的截圖都是下載量非常高的APP所做的防止二次打包的處理,其處理的代碼肯定會使用到的關鍵代碼是Android APP如何加密防二次打包?
Landroid/content/pm/PackageInfo;->signatures:[Landroid/content/pm/Signature。
此方法能夠起到一定的安全作用,一般的打包黨面對它是無可奈何的,如果你了解一些smali語法它的作用就等於零了。
㈡ 怎麼把Android工程打包成apk
你好
第一步,把普通的android project設置成庫項目
庫項目也是一個標準的android項目,因此你先創建一個普通的android項目。 這個項目可以起任何的名稱,任何的報名,設置其他需要設置的欄位等,如圖1所示。
接著把項目設置成庫項目,步驟如下
在Package Explorer中, 滑鼠右鍵項目文件夾,點擊 Properties.
在Properties 窗口, 選擇"Android" ,Library 屬性顯示在右下邊.
把"is Library" 單選框選擇上,再點擊 Apply.
點擊 OK 關閉Properties 窗口.
這時,這個項目就變成庫項目了。
當然,java項目也可以讓其變成一個庫項目,非常簡單,執行上面的四步。其他程序項目就可以引用庫項目了。
圖 1.使一個項目為庫項目
創建manifest文件
一個庫項目的manifest文件也和標準的android應用程序一樣,聲明所有共享的組件。
比如APIDemo中的TicTacToeLib 這個例子,庫項目聲明了Activity GameActivity:
<manifest>
...
<application>
...
<activity android:name="GameActivity" />
...
</application>
</manifest>
第二步 引用庫項目
如果你開發的應用程序想要包括庫項目中的代碼和資源,非常簡單,引用步驟如下
在Package Explorer中, 滑鼠右鍵項目文件夾,點擊 Properties.
在Properties 窗口, 選擇"Android" ,Library 屬性顯示在右下邊.
點擊Add ,打開了Project Selection 對話框.
從可用庫項目列表選擇一個項目,然後點擊 OK.
對話框關閉之後點擊 Apply (在Properties 窗口).
點擊 OK 關閉Properties 窗口.
完成以上六步,Eclipse 會重建項目,把庫項目中的內容包含進去。 如圖2所示
圖 2. 讓項目引用一個庫項目
如果你想增加多個庫項目的引用,使用up和down可以設置他們的相對的優先順序和合並順序。工具在合並引用的庫的時候順序是從低優先順序(列表的下面)到高優先順序(列表的上面)。 如果不只一個庫定義了相同的資源ID,這個工具選擇資源時會選擇高優先順序的資源。應用程序自身擁有最高的優先順序,自身的資源zThe application itself has highest priority and its resources are always used in preference to identical resource IDs defined in libraries.
在menifest文件中聲明庫中的組件
在manifest 文件中必須增加對在當前程序中用到的庫項目中的所有的組件 。比如,你必須聲明任何用到的 <activity>, <service>, <receiver>, <provider>等,<permission>, <uses-library>, 和其他類似的元素。
聲明庫項目中的組件時,必須使用包含包名的類全名。
在TicTacToeMain 例子中,聲明庫Activity GameActivity :
<manifest>
...
<application>
...
<activity android:name="com.example.android.tictactoe.library.GameActivity" />
...
</application>
</manifest>
For more information about the manifest file, see the documentation for AndroidManifest.xml.
望採納祝你好運
㈢ 如何反編譯android應用並重新打包
一.看android的源代碼
1)將Apkd.apk 用zip解壓後,出現了一個classes.dex文件
2014/02/19 19:42
.
2014/02/19 19:42
..
2014/02/19 15:35 1,656 AndroidManifest.xml
2014/02/19 15:35 687,024 classes.dex
2014/02/19 15:49
META-INF
2014/02/19 15:49
res
2014/02/19 15:35 2,200 resources.arsc
2)進入到dex2jar目錄中,運行情況如下:
D:\developer\tools\test_apk\dex2jar-0.0.9.15>dex2jar.bat "..\Apkd(d2j)\classes.d
ex"
this cmd is deprecated, use the d2j-dex2jar if possible
dex2jar version: translator-0.0.9.15
dex2jar ..\Apkd(d2j)\classes.dex -> ..\Apkd(d2j)\classes_dex2jar.jar
Done.
在apk所在的目錄會出現 classes_dex2jar.jar 文件。
3) 用JD-GUI對jar包進行查看,可以查看源文件
二.反編譯apk
1.在下載APKTOOL中的三個文件(aapt.exe、apktool.bat、apktool.jar)解壓縮到你的Windows安裝目錄下,以方便使用Dos命令.
2012/12/06 11:44 854,016 aapt.exe
2014/02/19 17:15 277,372 Apkd.apk//示例用apk文件
2012/12/23 23:39 92 apktool.bat
2013/02/03 02:37 2,655,843 apktool.jar
2.進入到apktool.bat所在的目錄,運行:
apktool d Apkd.apk decode_dir
反編譯後,decode_dir目錄下的內容如下:
2014/02/19 17:16 716 AndroidManifest.xml
2014/02/19 17:16 237 apktool.yml
2014/02/19 17:18
build
2014/02/19 17:16
res
2014/02/19 17:16
smali
此時我可以查看原文件AndroidManifest.xml了,也是查看smali源文件(是用smali語言寫的,可以對照java看)。
三.APKTOOL的使用
1).decode
該命令用於進行反編譯apk文件,一般用法為
apktool d
代表了要反編譯的apk文件的路徑,最好寫絕對路徑,比如C:\MusicPlayer.apk
代表了反編譯後的文件的存儲位置,比如C:\MusicPlayer
如果你給定的已經存在,那麼輸入完該命令後會提示你,並且無法執行,需要你重新修改命令加入-f指令
apktool d –f
這樣就會強行覆蓋已經存在的文件
2).build
該命令用於編譯修改好的文件,一般用法為
apktool b
這里的
就是剛才你反編譯時輸入的
(如C:\MusicPlayer),輸入這行命令後,如果一切正常,你會發現C:\MusicPlayer內多了2個文件夾build和dist,其中分別存儲著編譯過程中逐個編譯的文件以及最終打包的apk文件。
3).install-framework
該命令用於為APKTool安裝特定的framework-res.apk文件,以方便進行反編譯一些與ROM相互依賴的APK文件。具體情況請看常見問題
四.smali與java源碼對照,並做出相應的修改
java源代碼:
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.*;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView a = (TextView)this.findViewById(R.id.test) ;
a.setText("raoliang");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
對應的smali源代碼:
.class public Lali/text/apkd/MainActivity;
.super Landroid/app/Activity;
.source "MainActivity.java"
# direct methods
.method public constructor ()V
.locals 0
.prologue
.line 8
invoke-direct {p0}, Landroid/app/Activity;->()V
return-void
.end method
# virtual methods
.method protected onCreate(Landroid/os/Bundle;)V
.locals 2
.parameter "savedInstanceState"
.prologue
.line 12
invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
.line 13
const/high16 v1, 0x7f03
invoke-virtual {p0, v1}, Lali/text/apkd/MainActivity;->setContentView(I)V
.line 14
const/high16 v1, 0x7f08
invoke-virtual {p0, v1}, Lali/text/apkd/MainActivity;->findViewById(I)Landroid/view/View;
move-result-object v0
check-cast v0, Landroid/widget/TextView;
.line 15
.local v0, a:Landroid/widget/TextView;
const-string v1, "raoliang"
invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V
.line 16
return-void
.end method
.method public onCreateOptionsMenu(Landroid/view/Menu;)Z
.locals 2
.parameter "menu"
.prologue
.line 21
invoke-virtual {p0}, Lali/text/apkd/MainActivity;->getMenuInflater()Landroid/view/MenuInflater;
move-result-object v0
const/high16 v1, 0x7f07
invoke-virtual {v0, v1, p1}, Landroid/view/MenuInflater;->inflate(ILandroid/view/Menu;)V
.line 22
const/4 v0, 0x1
return v0
.end method
通過對比可以看到,常量是沒有必變的,可以根據的smali的語法,進行相應的修改
五.3、打包、簽名和安裝修改後的apk
修改完了,就可以打包回apk了。執行以下命令:
apktool b decode_dir
在mygame目錄下的dist在會看到打包好的apk。
當然,現在一般是無法安裝的,因為apk還沒有簽名。下面就來簽名。簽名需要keystore文件,我已經有專用的keystore了,如果還沒有,請參閱這里進行生成。
執行以下命令為重新編譯的my_game.apk簽名:
jarsigner -verbose -keystore demo.keystore Apkd.apk demo.keystore
最後,在安裝到手機前,需要把手機中的已有版本先卸載,因為如果簽名不同,是不能覆蓋安裝的,會提示「應用程序未安裝」錯誤。
完整的運行情況如下:
D:\developer\tools\test_apk\new\decode\dist>keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore
輸入keystore密碼:
再次輸入新密碼:
您的名字與姓氏是什麼?
[Unknown]: rao
您的組織單位名稱是什麼?
[Unknown]: rao
您的組織名稱是什麼?
[Unknown]:
您所在的城市或區域名稱是什麼?
[Unknown]:
您所在的州或省份名稱是什麼?
[Unknown]:
該單位的兩字母國家代碼是什麼
[Unknown]:
CN=rao, OU=rao, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 正確嗎?
[否]: y
輸入的主密碼
(如果和 keystore 密碼相同,按回車):
D:\developer\tools\test_apk\new\decode\dist>jarsigner -verbose -keystore demo.keystore Apkd.apk demo.keystore
輸入密鑰庫的口令短語:
正在添加: META-INF/MANIFEST.MF
正在添加: META-INF/DEMO_KEY.SF
正在添加: META-INF/DEMO_KEY.RSA
正在簽名: res/drawable-hdpi/ic_launcher.png
正在簽名: res/drawable-mdpi/ic_launcher.png
正在簽名: res/drawable-xhdpi/ic_launcher.png
正在簽名: res/drawable-xxhdpi/ic_launcher.png
正在簽名: res/layout/activity_main.xml
正在簽名: res/menu/main.xml
正在簽名: AndroidManifest.xml
正在簽名: classes.dex
正在簽名: resources.arsc
D:\developer\tools\test_apk\new\decode\dist>
到此為止,修改後的apk可以正常的安裝了,不過,在安裝之前,必須要先卸載以前的apk,不能直接替換(因為簽名不一樣)
㈣ 如何反編譯android應用並重新打包
概述:通過反編譯apk可以得到我們想要的資源,學習到自己想要的東西。如果有特殊需求還可以更改相應的地方然後再重新打包回去,達到自己需要的效果。這里我將分成兩個部分來描述。
第一:反編譯apk,然後根據自己需求更改,再重新打包回去。 用到的工具:apktool.zip
第二:將重新打包的apk進行簽名。用到的工具:auto-sign.zip
http://blog.csdn.net/yj_android_develop/article/details/47904201
㈤ 如何打包android apk
做完一個Android項目之後,如何才能把項目發布到Internet上供別人使用呢?我們需要將自己的程序打包成Android安裝包文件--APK(Android Package),其後綴名為".apk"。將APK文件直接上傳到Android模擬器或Android手機中執行即可進行安裝。Android系統要求具有其開發者簽名的私人密鑰的應用程序才能夠被安裝。生成數字簽名以及打包項目成APK都可以採用命令行的方式,但是通過Eclipse中的向導我們會更加方便地完成整個流程,打包發布的過程非常簡單。下面以前面開發的"Hello World"為例,演示如何生成APK。
右鍵單擊項目名稱,選擇"Android Tools",再選擇"Export Signed Application Package…",如下圖所示。
進入左圖所示頁面,單擊"Next>"按鈕,進入如右圖所示窗口。
其中,Location為證書庫將要存放的位置,Password是證書庫的密碼。
打包程序時,系統要求使用數字證書。如果沒有數字證書,我們選擇"Create new keystore"新創建一個證書庫,單擊"Browse…"按鈕選擇證書庫將要保存的位置並填入信息,如左圖所示。單擊"Next>"按鈕,如右圖所示
㈥ 為什麼安卓軟體重新打包簽名後無法安裝
必須用安卓專門的簽名才行,目前常用的是使用SDK開發臨時簽名。
網上找個APK簽名的工具,將apktool重新打包後的APK進行簽名就可以安裝了。
另外反編譯的QQ可能開啟,表現為閃退,QQ程序里有些代碼,程序有異常會中止自己進程
㈦ 修改apk並重新打包和簽名後怎麼和原app共存
反編譯所使用的到的工具
apktool,反編譯apk,從apk中提取圖片和布局資源
dex2jar,將可運行文件classes.dex反編譯為jar源碼文件
java-decompiler(jd-gui),主要用來查看jar源碼文件
在反編譯之前要確保電腦上有Java
檢查有無Java的方法,打開命令行,輸入java -version
如果出現如下圖所示就是安裝了Java,沒有的話需要自行配置環境
在這里插入圖片描述
下載apktool.bat腳本(右鍵,鏈接另存為…)
在這里插入圖片描述
下載最新版本的apktool.jar,並且重命名為apktool.jar
將apktool.bat和apktool.jar還有需要反編譯的Apk文件放在同一目錄下就可以正常使用了
反編譯命令行:
output_dir代表文件的輸出路徑
test.apk代表Apk的文件名
apktool.bat d -o
test.apk
1
1
-o 指定解碼目標文件夾的名稱(默認使用APK文件的名字來命名目標文件夾)
然後繼續執行命令行
apk-file是上一步輸出的文件夾的名字
apktool.bat b apk-file
1
1
會發現執行該命令行後會多出下面兩個文件夾,dist文件夾下面放的就是apk文件
在這里插入圖片描述
此時,可以查看AndroidManifest.xml,res及smali文件了。甚至可以修改這個目錄下的資源文件或者smali文件,然後重新編譯。如果需要修改圖片的話,只需要找到對應位置替換掉就好了;
apktool反編譯出來只能得到apk的smali文件,即匯編語言版本,並不能得到源代碼。
㈧ 怎樣修改APK文件!修改後怎麼打包成APK
1、首先打開apk反編譯軟體,點擊「打開」一個apk。或者直接把需要反編譯修改的apk拖入到窗口中。
㈨ 如何應用安卓APK文件進行解包打包和修改
不需要解包跟打包,直接修改就可以,修改的的方法。
如下參考:
1.將需要修改的apk包復制到100apktool的路徑中。注意:您需要將文件名更改為123apk,如下圖。
㈩ Android 如何對apk文件進行反編譯以及重新
第一:使用apktool直接反編譯apk
第六:把生成的hellodemo.apk安裝到手機,可以看到主界面上已經顯示的是hello,而不再是你好。說明反編譯重新打包成功!