1. 程式人生 > >安卓加密殼APK Protect分析——…

安卓加密殼APK Protect分析——…

之前發過一個帖子,是說5種常用的APK保護技術的,詳細可參閱:http://www.apkbus.com/android-138130-1-1.html. 帖子提到過線上加密加殼,也就是APKProtect:http://www.apkprotect.com/.於是我就做了一個測試,看看這個線上加密加殼是否真的有效。

下面是我的測試步驟:
分析工具: dex2jar + jd-gui  + ida 6.1+ ExamDiff Pro
加殼選擇的 1 個類:
Lcn/com/fmsh/cube/a/a;
用dex2jar後在jd-gui中看到該類只有兩個函式呼叫 a 和 b;
然後是上傳到網站www.apkprotect.com,這個要註冊賬號,不過是全部都是免費的,加密後將APK包下載回來,我們先看看最主要的classes.dex 檔案變了沒有:

加密前 classes.dex 檔案大小: 2,925,772位元組 
加密後 classes.dex 檔案大小: 2,926,676 位元組
接下來就開始動手分析程式碼了:
首先,我們使用ida逆向加密後的 dex 檔案。以 "cn.com.fmsh.cube.a.a.a("字串在IDA中查詢到函式入口,看看我們選擇的類的名為a的函式位元組碼有變化沒有:
加密前:

安卓加密殼APK <wbr>Protect分析——線上加密加殼保護的有效性分析ZZ 

加密後:
安卓加密殼APK <wbr>Protect分析——線上加密加殼保護的有效性分析ZZ 

加密後的程式碼IDA無法完整逆向,如此我們可以確定,該殼確實加密了classes.dex 中的位元組碼。
然後,讓我們看看加密後的包多了什麼,使用 ExamDiff對加密後apk解壓出來目錄和未加密apk解壓出來的目錄進行匹配,發現只多了libapkprotect.so的庫檔案。

接著,讓我們用 ida 對 libapkprotect.so 庫進行分析,發現只有 5 個 jni 層入口函式, JNI_OnLoad、_d、_a、Java_com_apkprotect_Init、Java_com_apkprotect_Version,通過檢視jni層函式程式碼的彙編碼,可以確信該庫是加過殼的,so的殼以前尚未見過,脫殼方法也有待探尋,所以我只能暫時先繞道,但是通過這個庫,我們可以做如下猜測:
如果Java層要呼叫這個庫,那麼必然會存在 System.loadLibrary 的函式呼叫,於是我使用IDA對加密後的 dex檔案分析查詢,發現了名為 apkprotect  的 Java類,而這個類的程式碼只有 與 函式,不存在其它函式,如此我們就可以確定該類的程式碼應該是這樣的:

public class apkprotect{
    static   {
       System.loadLibrary("apkprotect");   
}
    public native intInit(); 
   public native intVersion();
}

從以上程式碼的函式名,我們又可以猜測出最大的可能呼叫的函式應該是 Init,因此我們使用"apkprotect.Init("字串來搜尋dex程式碼,共搜尋到以下幾處呼叫點:
1. com.lakala.android.bll.receiver.AlarmReceiver.onReceive函式
2. com.lakala.android.bll.receiver.BroadcastReceiver.onReceive函式
3. com.lakala.android.bll.receiver.LoginoutReceiver.onReceive函式
4. com.lakala.android.bll.receiver.StatisticReceiver.onReceive函式
5. com.lakala.android.common.ApplicationExtension.函式
6. com.lakala.android.common.service.DownloadAppService.onCreate函式
7. com.lakala.android.common.service.DownloadFileService.onCreate函式8.com.zch.safelottery.broadcast.SafelotteryBroadcastReceiver.onReceive函式


個人猜測如下:
要使程式正常執行,那麼必然需要將加密的位元組碼在執行前就解密回來或者是接管系統的執行介面在執行加密類的時候使用自己的方法去執行,這個殼可能偏向於前者,因為它附帶的libapkprotect.so庫檔案並不是很大,要自己解密執行,肯定不止這麼一點程式碼才是。
由此可見,該線上加殼加密確實有效,讓破解難度增大不少。
以下是我的測試用例的下載地址:
http://pan.baidu.com/share/link?shareid=1355314020&uk=3157398793
分析深度尚淺,望高手繞道! 

相關推薦

加密APK Protect分析——…

之前發過一個帖子,是說5種常用的APK保護技術的,詳細可參閱:http://www.apkbus.com/android-138130-1-1.html. 帖子提到過線上加密加殼,也就是APKProtect:http://www.apkprotect.com/.於是我就做了一個測試,看看這個線上加密加殼是否真

&&協議分析&&burp輔助分析插件編寫

自動 ges 程序 ima 到手 插件 無線 gin adb 前言 本文由 本人 首發於 先知安全技術社區: https://xianzhi.aliyun.com/forum/user/5274 本文以一個 app 為例,演示對 app脫殼,然後分析其 協議加密和簽名方

【抓包分析】Charles和 夜神模擬器 對應用進行抓包分析

技術分享 windows red 工具 com nsh pro 4.2 name 準備工具 : 1 Charles : https://www.charlesproxy.com (收費) 2 夜神模擬器 : https://www.yeshen.com (免費)

【WhaleCTF逆向題】第一期加密writeup

題目資訊如下: 安裝到模擬器可以明顯看出用的XOR運算 JEB載入    發現關鍵在check2    check1這個方法一點用也沒有。。。 那我們就看看check2是怎樣運算的

Unity之啟動外部APK,無需程式碼(轉載)

if (GUILayout.Button("LoadApk")) { openPackage("com.test.apk"); } } void openPackage(string pkgName) {

開發中記憶體問題分析(一)工具篇

記憶體洩漏和記憶體溢位是安卓開發中經常碰到的問題,如何能夠快速有效的發現並追蹤記憶體洩漏或者記憶體溢位的源頭,是每個開發者都需要掌握的技巧,今天我給大家帶來常見的記憶體分析工具使用方法,希望對大家今後的開發帶來幫助。 使用Eclipse分析應用記憶體使用情況 具體步驟

中COLOR的值分析

   今天在做方面的安卓的影象顯示的時候,需要實時的改變圖片的顏色,然而,客戶端接收的都是RGB值,而JAVA中的BITAMP類構造時,需要的是一個顏色值,所以需要一個類似new Color(int r,int g,int b)的函式。由於JAVA.AWT.Color這個JA

怎樣快速在PC給手機安裝apk?

一、配置安裝環境 1、下載jdk,先配置Java環境 a、 安裝jdk b、配置環境變數JAVA_HOME C:\Program Files\Java\jdk1.8.0_131 c、在path中新增Java路徑 %JAVA_HOME%\lib;%JAVA_HO

優化之apk瘦身(27.7M-->17.5M)

概述 apk瘦身作為優化的一部分,它的大小決定安裝的時間與佔用的記憶體,進行鍼對性的瘦身也能夠提高使用者體驗,下面就看我怎樣將一個27.7M的安裝包減肥到17.5M,足足減少了37.18%。 一、優化圖片 圖片佔用了大部分體積,所以圖片的優化首當其衝。

利用IDA學習一個簡單的

這是看別人的文章學習的,當然還有加點自己的思考,截圖用自己的,這樣的學習才有效果啊 原理篇 dvmDexFileOpenPartial這是函式是關鍵,據說在這下 斷點就可以了,看名字就是虛擬機器去開啟Dexfile的意思,應該那時已經解殼完成了吧 函式原型: in

whaleCTF-30days-逆向【第一期】-加密-writeup

CTF小白,剛入坑,記錄一下做題的方法,寫的比較詳細,大牛請輕噴。 題目: 這是個用來儲存祕密的app,但是好像暴露了密碼演算法,你能找到密碼嗎?答案格式whaleCTF{xxxx} 下載檔案後,首先在模擬器中開啟執行一下,需要輸入通關密碼,隨便輸入一段提示“錯

逆向-修改APK-戰鬥直接勝利

前言   很久沒有總結過關於逆向程式設計的文章了,來寫一篇實踐分享給大家。主要來說說如何通過逆向修改APK來實現遊戲進入後直接獲得勝利領取獎勵。為了學習發展就不分享遊戲名稱了。下面我們開始吧: 使用到工具 AndroidKiller / IDE 3.1.0

廣播超時的原因分析及優化建議

前言 最終工作中經常碰到廣播超時的問題,於是花精力總結了一番,各位客官請看~ 基本概念 普通廣播與有序廣播 普

【天翼杯題二】 愛加密實戰

encode ask ner 符號 rom fse write 找到 ace 前言 這個apk使用愛加密加密,加密時間是2017.6月。這個題其實就是個脫殼題,脫完立馬見flag。(出題人也太懶了) 題目鏈接:https://gitee.com/hac425/blog_da

AndroidAPK反編譯分析、簡單修改內容、二次打包簽名

一、需求:想要修改一個apk裡面一串字串 環境: dex2jar----https://github.com/pxb1988/dex2jar/ JD-GUI----http://jd.benow.ca/ jdk1.8.0環境 二、先反編譯解包分析: (明

性能優化之計算apk啟動時間

height let 邏輯 第一個 cin 16px box tex 性能 之前有人在知乎提問:“怎麽計算apk的啟動時間?” : 利用Python或者直接用adb命令怎麽計算apk的啟動時間呢?就是計算從點擊圖標到apk完全啟動所花費的時間。比如,對遊戲來說就是點擊遊

React Native項目打包發布APK步驟

lar get ocs clas keys pre alias puts app 1、產生簽名的key 該過程會用到keytool,開發過安卓的都應該接觸過該東西。詳細請見密鑰和證書管理工具。在項目的主目錄(不是android文件夾)中執行: --生成簽名key,註意記下

APK瘦身

android post 安卓 ons blog view git 用法 strong 之前打包的時候直接就用eclipse或者android studio直接生成簽名文件,並沒有關心大小問題,近期有人問我有沒有對APK進行瘦身。對這方面內容一致沒有關註過,今天試用了

動手分析仿QQ聯系人列表TreeView控件

code children cas tail pri bstr abstract viewgroup teset 因項目需要需要用到仿QQ聯系人列表的控件樣式,於是網上找到一個輪子(https://github.com/TealerProg/TreeView)

Android下apk安裝的過程,項目的目錄結構

版本 自動 過程 apk drawable 分辨 jar 程序 軟件安裝 安卓下軟件安裝的過程: 1:拷貝XXX.apk到/data/app/XXX-1.apk 2.在/data/data目錄下創建一個文件夾 文件夾名稱 當前應用程序的包名. 安卓項目的目錄結構: