編輯:關於Android編程
又到周末一個人侘在家裡無事可干,這就是程序員的悲哀啊。好了我們利用周末的時間繼續介紹android apk防止反編譯技術的另一種方法。
一、對抗JD-GUI原理
通常在對apk進行反編譯的時候用到的最多的兩個工具就是apk-tool和dex2jar。利用這兩個工具將apk首先反編譯成classes.dex然後再將classes.dex反編譯成jar文件或者將apk直接反編譯成jar文件;得到jar文件以後就可以利用JD-GUI將得到的jar文件打開就可以直接查看apk的java源碼了。我們花了那麼大心思寫的程序就這麼容易被別人拿到源碼是不是很不甘心,現在我就告訴你對抗JD-GUI查看源碼的方法。我們在用JD-GUI查看源碼時有時有些函數的根本看不到直接提示error錯誤,我們就利用這點來保護我們的apk。原來JD-GUI在將經過混淆處理的jar裡面的class字節碼文件轉成java文件時,遇到函數中根本走不到的分支的特殊實現時就會提示函數error。這時我們只要查看這些提示error的文件或者函數對應的源碼是有什麼語句引起的,將這些語句加到我們的源碼中就可以防止利用JD-GUI去查看我們的apk源碼了。
二、原理實現
(1)假如我們的apk onCreate的函數實現如下:
1 2 3 4 5@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
(2)將我們的apk經過混淆處理後經過簽名導出我們的apk,我們用dex2jar工具將我們的apk轉換成jar文件
(3)用JD-GUI打開我們的jar文件就可以看到我們的apk onCreate函數的源碼了。如下:
(4)這時我們在apk onCreate函數裡面加上不可能的特殊分支語句,代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
switch
(
0
)
{
case
1
:
JSONObject jsoObj;
String date=
null
;
String second=
null
;
try
{
jsoObj=
new
JSONObject();
date=jsoObj.getString(
date
);
second=jsoObj.getString(
second
);
}
catch
(JSONException e)
{
e.printStackTrace();
}
test.settime(date,second);
break
;
}
}
1 2 3 4
class
test
{
public
static
void
settime(String a,String b){}
}
(5)我們用(2)中同樣的方法將apk轉成jar文件,然後用JD-GUI打開會看到提示error錯誤。如下:
根據上面的講述相信大家對對抗JD-GUI的方法有了一定的了解,我只是舉了其中的一個方法,之所以說是特殊的分支語句是因為不是所有的分支語句都可以讓JD-GUI提示error。我們可以根據原理多注意一些這樣的特殊分支語句以便用來保護我們的apk,下一篇我們將講解另一種android apk防止反編譯技術,期待大家的捧場。如果對這篇講的技術有任何疑問:
常用,記錄一下。效果圖:首先新建xml文件 bg_gradient.xml復制代碼 代碼如下:<?xml version=1.0 encodin
andriod短信整合備份發送到gmail郵箱,需要在andoid手機配置好gmail郵箱 github代碼 https://github.com/zhwj184/sms
引言:去年Android 6.0發布後,其新引入的(Requesting Permissions at Run Time)運行時權限就備受開發者關注,隨著今年國內手機廠商
我們聊聊我們常寫的登錄界面,這個界面我相信很多人都寫過,而且也沒什麼難度,但是如果要實現比較不一般的效果,那就要花點心思了,先看看項目的效果吧:我一直都不知道怎麼在編輯框