<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    原文地址:http://drops.wooyun.org/mobile/5942

                    0x00 前言


                    隨著智能手機的普及,移動APP已經貫穿到人們生活的各個領域。越來越多的人甚至已經對這些APP應用產生了依賴,包括手機QQ、游戲、導航地圖、微博、微信、手機支付等等,尤其2015年春節期間各大廠商推出的搶紅包活動,一時讓移動支付應用變得異常火熱。

                    然后移動安全問題接憧而至,主要分為移動斷網絡安全和客戶端應用安全。目前移動APP軟件保護方面還處于初級階段,許多廠商對APP安全認識不夠深入,產品未經過加密處理,使得逆向分析者能夠通過逆向分析、動態調試等技術來破解APP,這樣APP原本需要賬號密碼的功能可以被破解者順利繞過,使得廠商利益嚴重受損。

                    對未加殼的APP進行動態調試,通常可以非常順利且快速地繞過一些登陸限制或功能限制。本文將以安卓APP為例,來詳細介紹一下移動APP動態調試技術。

                    0x01 調試環境搭建


                    1.1 安裝JDK

                    JAVA環境的搭建請自行查找資料,這里不做詳述。

                    1.2 安裝Android SDK

                    下載地址:http://developer.android.com/sdk/index.html。

                    下載完安裝包后解壓到任意一目錄,然后點擊運行SDK Manager.exe,然后選擇你需要的版本進行安裝,如圖:

                    enter image description here

                    1.3 安裝Eclipse集成開發環境

                    下載地址:http://www.eclipse.org/downloads。選擇Eclipse for Mobile Developers,解壓到任意目錄即可。

                    1.4 創建Android Virtual Device

                    動態調試可以用真實的手機來做調試環境,也可以用虛擬機來做調試環境,本文采用虛擬機環境。因此創建虛擬機步驟如下:

                    1打開Eclipse –>windows->Android Virtual Device

                    enter image description here

                    2點擊Create,然后選擇各個參數如圖:

                    enter image description here

                    這里Target 就是前面步驟中安裝的SDK 選擇任意你覺得喜歡的版本就可以。點擊OK 就創建完畢。

                    1.5 安裝 APK改之理

                    這個是一個很好用的輔助調試的軟件,請自行搜索下載。

                    1.6 安裝 IDA6.6

                    IDA6.6開始支持安卓APP指令的調試,現該版本已經提供免費下載安裝,請自行搜搜。

                    0x02 Dalvik指令動態調試


                    2.1 準備工作

                    安卓APP應用程序后綴為apk,實際上是一個壓縮包,我們把它改后綴為rar打開如圖:

                    enter image description here

                    其中classes.dex是應用的主要執行程序,包含著所有Dalvik指令。我們用APK改之理打開apk,軟件會自動對其進行反編譯。反編譯后會有很多smail文件,這些文件保存的就是APP的Dalvik指令。

                    在APK改之理里雙擊打開AndroidManifest.xml,為了讓APP可調試,需要在application 標簽里添加一句android:debuggable="true" 如圖:

                    enter image description here

                    然后點擊保存按鈕,然后編譯生成新的apk文件。接著打開Eclipse –>windows->Android Virtual Device,選擇剛才創建的虛擬機,然后點擊start,虛擬機便開始運行。偶爾如果Eclipse啟動失敗,報錯,可以同目錄下修改配置文件:

                    enter image description here

                    把配置參數原本為512的改為256 原本為1024的改為512,然后再嘗試啟動。

                    在SDK安裝目錄有個命令行下的調試工具adb shell,本機所在目錄為E:\adt-bundle-windows-x86-20140702\sdk\platform-tools,把adb.exe注冊到系統環境變量中,打開dos命令行窗口執行adb shell 就可以進入APP命令行調試環境,或者切換到adb所在目錄來執行adb shell。

                    enter image description here

                    這里先不進入adb shell,在DOS命令行下執行命令:adb install d:\1.apk 來安裝我們剛才重新編譯好的APK文件。安裝完畢會有成功提示。

                    2.2 利用IDA動態調試

                    將APP包里的classes.dex解壓到任意一目錄,然后拖進IDA。等待IDA加載分析完畢,點擊Debugger->Debugger Options如圖

                    enter image description here

                    按圖所示勾選在進程入口掛起,然后點擊Set specific options 填入APP包名稱和入口activity 如圖:

                    enter image description here

                    其中包的名稱和入口activity 都可以通過APK改之理里的AndroidManifest.xml 文件獲取:

                    #!html
                    <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.simpleencryption">
                        <application android:allowBackup="true" android:debuggable="true" android:icon="@drawable/creakme_bg2" android:label="@string/app_name" android:theme="@style/AppTheme">
                            <activity android:label="@string/app_name" android:name=".MainActivity">
                    

                    然后在IDA點擊Debugger->Process Options

                    enter image description here

                    其他默認不變,端口這里改為8700。這里默認端口是23946,我在這里困擾了很久,就是因為這個端口沒有改為8700所致。然后我們看看這個8700端口是怎么來的。在Android SDK里提供了一款工具DDMS,用來監視APP的運行狀態和結果。在SDK的TOOLS目錄有個DDMS.BAT的腳步,運行后就會啟動DDMS。由于我的本機安裝了SDK的ADT插件,DDMS集成到了Eclips中,打開Eclips->Open perspective->ddms就啟動了DDMS。

                    如圖所示:

                    enter image description here

                    在DDMS選中某個進程后面就會注釋出它的調試端口,本機這里是8700。

                    到此所有的工作就準備就緒,然后就可以下斷點來調試該APP了。我們在APK改之理中在com目錄下查看smali文件 發現MainActivity.smali里有一個感興趣的函數getPwdFromPic(),那么我們就對它下斷以跟蹤APP的運行。

                    在IDA里搜索字符串getPwdFromPic,發現onClick有調用該函數

                    我們在onClick 函數開始位置按F2下斷如圖:

                    enter image description here

                    然后點擊上圖中綠色三角形按鈕啟動調試如圖:

                    enter image description here

                    調試過程中有一個問題出現了很多次,浪費了我大量的時間,就在寫文章的時候,操作時還是遇到了這樣的問題。就是點擊啟動后IDA提示can’t bind socket,琢磨了很久終于找到原因了,當打開過一次DDMS后 每次啟動Eclips都會啟動DDMS 而8700端口正是被這個DDMS給占用了,然后每次都會啟動失敗,解決辦法就是 虛擬機運行起來后關閉掉Eclips,這時一切就正常了!

                    事例中是一個APP crackme 提示輸入密碼才能進入正確界面。這個時候我們輸入123,點擊登陸,IDA中斷在了我們設置斷點的地方,這時選中ida->debugger->use source level debugger,然后點擊ida->debugger->debugger windows->locals打開本地變量窗口,如圖:

                    enter image description here

                    然后按F7或F8單步跟蹤程序流程,同時可以觀察到變量值的變化,也可以在IDA右鍵選擇圖形視圖,可以看到整個APP執行的流程圖:

                    enter image description here

                    如上圖所示 變量窗口中我們輸入了123 被轉化成的密碼是么廣亡,pw變量也顯示出了正確的密碼,其實這個時候已經很容易判斷出正確密碼了。

                    0x03 Andoid原生動態鏈接庫動態調試

                    通常為了加密保護等措施,有時dex執行過程中會調用動態鏈接庫文件,該文件以so為后綴,存在于APP文件包里。

                    enter image description here

                    這里我們以動態附加的方式來調試原生庫。

                    3.1 準備工作

                    1、將IDA->dbgsrv目錄下的android_server拷貝到虛擬機里,并賦予可執行權限

                    DOS命令分別為:

                    adb shell pull d:\ android_server /data/data/sv
                    adb shell chmod 755 /data/data/sv
                    

                    2、啟動調試服務器android_server

                    命令:adb shell /data/data/sv

                    服務器默認監聽23946端口。

                    3、重新打開DOS窗口進行端口轉發,命令:

                    adb forward tcp:23946 tcp:23946 如圖:

                    enter image description here

                    3.2 利用IDA進行動態調試

                    1、虛擬機里啟動要調試的APP 2、啟動IDA,打開debugger->attach->remote Armlinux/andoid debugger

                    enter image description here

                    端口改為23946 其他保持不變,點擊OK

                    enter image description here

                    如上圖,選中要調試的APP 的數據包名,然后點擊OK。

                    正常情況下,IDA會把APP進程掛起。

                    3、由于當前程序不是在動態鏈接庫領空,這時我們要重新打開一個IDA,用它打開需要調試的so文件,找到需要下斷的位置的文件偏移,并做記錄,然后關閉后面打開的這個IDA。

                    4、在原IDA界面按下ctrl+s鍵,找到并找到需要調試的so,同時記錄該文件的加載基址。然后點擊OK 或者cancel按鈕關閉對話框。

                    5、按下快捷鍵G 輸入基址+文件偏移所得地址,點擊OK 就跳轉到SO文件需要下斷的地方,這時按下F2鍵設置斷點。當APP執行到此處時便可以斷下來。

                    3.3 在反調試函數運行前進行動態調試

                    程序加載so的時候,會執行JNI_OnLoad函數,做一系列的準備工作。通常反調試函數也會放到JNI_OnLoad函數里。進行4.2中第2步時也許會遇到如下情況:

                    enter image description here

                    這時APP檢測到了調試器,會自動退出,那么這時調試策略需要有所改變。

                    接著4.1第3步后,在DOS命令行執行命令:

                    adb shell am start -D -n com.yaotong.crackme/com.yaotong.crackme.MainActivity    
                    

                    來以調試模式啟動APP 如圖:

                    com.yaotong.crackme是APP包名稱,com.yaotong.crackme.MainActivity是執行入口 這些可以用APK改之理查看。

                    enter image description here

                    這時由于APP還未運行,那么反調試函數也起不了作用,按照4.2中第2步把APP掛起。這時IDA會中斷在某個位置

                    enter image description here

                    然后點擊debugger->debugger opions設置如下:

                    enter image description here

                    點擊OK 后按F9運行APP,然后再DOS命令下執行命令:

                    jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
                    

                    這時APP會斷下來,然后按照4.2中的3、4、5補找到JNI_OnLoad函數的地址并下斷,然后按F9 會中斷下來。然后便可以繼續動態跟蹤調試分析。

                    0x04 主要參考資料


                    1、《Andoroid 軟件安全與逆向分析》

                    2、看雪論壇安卓安全版

                    3、吾愛破解論壇安卓版

                    感謝看雪論壇好友:我是小三、QEver、非蟲等的熱心指教!

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频