動態調試APK,以寶寶樹爲例

#####0x01.準備工具
1. IntelliJ IDEA
2. baksmali
3. Androidkiller
4. IDA6.6
5. Fiddler
6. 一臺Android真機(或者模擬器)
7. studio

#####0x02.抓包
手機連上`wifi`,與電腦處於同一局域網,然後設置好Fiddler,具體步驟不詳述。
打開`寶寶樹孕育6.2.1`版本,進入`登陸`窗口,輸入賬號密碼點登陸,在電腦查看封包。
可以得到請求`URL`:
        

        
方式:`POST`

參數:

         android_id=d77c45cb6182db0e&build_serial=mmmm&local_ts=1438682239&source_channel=pc_pregnancy_tongyong_app_140729&longitude=122.535462&latitude=35.582332&phone_number=buROv8rMh50AdCj7mYdAZwWv9YEpsIR2mClGrO43QK6E5GHko7aEZwtZMT%2F2nvyuUCYsFtx%2Bkz1kwpthbRlpZecGXjkbyaaeIE4ocYjolDyLXLduydRCjnG%2Bk9OEfBr3QCShaiJ2Z%2BeDQIeqgTssdlzZqzFfpHzsg3oWpdF3RbMLF3O93RzGWntJgkgvzjzK7BfwvRF8p8o6Se2l7mX7malpYrn35H2kh4mEAaLaBGoj2naCxcSXCn6X6w9za6hofkhogCtB7PpY6pulzY%2BOhejwG1jdoCpqRxcctRcsFPWNz72SD8Mmqkq6wRVeLYX5ZIoWNafwEJuPobuRtmvhQzg%3D%3D&version=6.2.1&imei=90000451032112&secret=b8a310e750c8af5187197c279a7e0241&email=zLkZURsmEpT8fGCGGNADu2KAZ79zkZI3b%2FMBDh5i1vCAbvFmKoGu7L4nBPsOvnzzsnWtuOJipiITnoRQ5w%2FNTy%2FvEx%2BX%2FO8Ff8jcU2qBAXTzGgd0x1lZ8PsGuan0944ax5n1douoaTC370Hv4A%2F58IhP8rhcQWnO4FzFol8FC%2FXQ%2Fd1%2FoAQOycwdLeBUm0JJ5tRKiaT2nBwD1z7Dn1CShswWCNN2zDCvYgtJ7Ig3JIQipUahL9OaR%2FQnzUzk%2BmaC%2Fm6iRr1q4wkiz9lexJkXFHf1g5VuFqshCNgxdgeDw%2BZHuagedfj5MakZD96Lj%2BtZtRf6GhaLbY29tSL65EdSgsg%3D%3D&password=AhOxbuypr6JYDgpP%2Fw%2BLhVlfzwusSMOaE0137YBOvOAZkk%2BbCHwzfduzqsjasx6zrhZUkZv3aoZ27HDIFAebdgsRS9lh2eeuxXiIxZdkaVPy47UNMdLHo1fFnuUEOCbE144H%2FL%2B2EeY%2BjbE8Ebjg0gXuZ7ziNZ%2Bmrgt4%2FrN8YbizcbyCx7A%2Fue3GD3p58GV3ztnlxWp9d4D1IlMT5V%2B8qxi3VDpQMr0Ghi4MaDTkH%2FV8fcRSCBqutHTDsEs%2F5AfBgksHFT6Dcxl3tpBIIfdgEmU4EZ%2BpqLqVxVFLdjPA0MJOhzE36P8NqTPiKEXzTuJcmaaS5qU34d2dHGYP2wc7Dg%3D%3D&client_type=android&app_id=pregnancy&mac=5c%3A51%5A57%3A55%3A26%3A4d&client_baby_status=1&bpreg_brithday=2100-01-01

分析可知:

`phone_number`,`password`,`email`,`secret`四個參數爲加密,其他參數均爲固定或者地理位置信息等參數。

所以此次目標就爲這`4`個參數


#####0x03分析調試1. 先把apk拖入AndroidKiller進行分析,可知無殼。
2. 根據先前分析,可在AndroidKiller中搜索相應字符串查找我們感興趣的函數
搜索`muser\login`,可知登陸的函數在`com.babytree.platform.api.muser`中的`login.smali`中。
由圖可知
Login.java的父類是ApiBase,可以猜想,所有Api的請求所公共的函數都會在此類中生成。
關鍵地方找一個就行,本次分析主要還是以動態調試爲主.
3. 用baksmali將apk反編譯成.smali文件
4. 然後打開IntelliJ IDEA,創建一個java工程.將上一步反編譯出的smali文件導入到src文件夾中。如圖:

5. 然後打開eclipse,切換到DDMS視圖,選中手機,查看其端口,如圖:

圖上可以看到,目標應用的端口爲8631.
6. 切換到IntelliJ IDEA,選擇Run-Configurations.
7. 然後新建一個Remote,填寫端口爲8631,然後選擇source using module's classpath爲我們之前創建的項目,點擊OK
8. 接下來在IntelliJ IDEA中打開Login.smali,快速瀏覽一下,選擇一個感興趣的地方下斷點,這裏我選擇.method protected a()Ljava/lang/String;
在函數起始處下斷點後,在手機中輸入賬號密碼,點擊登陸,可以看到斷點成功斷下,如圖所示:

從圖中可以看到,左下角爲函數的調用堆棧,從 登陸按鈕 按下(OnClick),到api.user.login整個的調用過程。
展開右下角的p0,可以看到此時已經生成了3個參數,

說明在斷點之前,參數已經生成好了。
所以我們按照函數的調用棧,挨個查看調用過的函數。
查閱一番後可以發現。Login對象是在
LoginActivity中的.method public a(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V方法創建的。
在new-instance v0, Lcom/babytree/platform/api/muser/Login;處下斷點,重新點擊登陸按鈕,如圖:

此時v1.v2.v3寄存器分別出現了加密的結果,由上可知,分別對應`phone_number`,`password`,`email`三個參數。
所以加密的函數應該就在上面。
往上下斷點,重新來一次觀察一下加密的過程。
可知:
iget-object v0, p0, Lcom/babytree/apps/pregnancy/activity/LoginActivity;->u:Ljava/lang/String;
這一句函數調用之後,v0是一串固定字符串。
invoke-static {p1, v0}, Lcom/babytree/apps/pregnancy/h/a;->a(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
調用之後,v1爲加密結果。查看a函數:

爲RSA加密,所以之前的v0就是RSA的pubKey了。
在a函數中下斷點,看一看加密的參數是什麼:

一切盡收眼底。由此可知`phone_number`,`password`,`email`三個參數的算法。
9. 接下來找`secret`的算法。
回到AndroidKiller搜索關鍵字,定位到com/babytree/platform/api/ApiCommonParams;
大致看一下,這個是API通用參數生成的類。且加載了一個so:api_encrypt.so
在`secret`關鍵字附近看一下,調用了so的invoke-static {v1, v2}, Lcom/babytree/platform/api/ApiCommonParams;->nativeGetParam(Landroid/content/Context;Ljava/util/List;)Ljava/lang/String;方法。
我們先在這句上面下個斷點,看看傳給so函數的是什麼參數。
斷點斷下後,看到傳遞給so的參數是一個List,POST參數中除`secret`之外的所有參數。
參數知道了,調用點知道了。分析一下so,看看需不需要動態調試。
載入ida,找到調用的nativeGetParam函數。大致看一下,發現又調用了java的md5函數,好了,調試so的步驟剩下了。

回到IntelliJ IDEA,在getMD5Str處下斷點,繼續調試:

很快我們可以知道,p0中就是進行md5的參數啦。
分析一下可知,`secret`就是 MD5(時間戳+所有參數排序+&asdf12341dfas!@#$%()(Ujjlasdflasdfj;asjdf23412313kljajsdflasjdflasjdflajsdf;lajsdf2342234sdfsdfffds)


#####0x04.總結

動態調試apk的方式讓我們瞭解apk運作的過程,通過動靜結合的分析方式,快速找到想要的東西~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章