Android--native層so檔案調試

來源:互聯網
上載者:User

標籤:

Android之so檔案調試分析

0x00:前言

       在做這道題之前發現有學長之前做過,所以理了下思路準備寫寫過程。畢竟我是新手,所以寫得很囉嗦,其中遇到的很多細節問題困擾了我很久,也是希望通過這些讓想入Android的朋友少跳點坑,還望不吝指正。

   這道題是在阿里挑戰賽上扒下來的,調試過程中遇到了不少的坑(畢竟第一次調=_=)。本來打算用真機調試,但是後面的步驟中有因為手機ROM的問題必須得刷機,所以還是用的模擬器來調。

 

0x01:

       這個CM主要是調試native層和patch so的使用。

       安裝apk進去是這樣的:

   

       目標就是破解密碼。

       一般思路是先看看java層,然而反編譯一看:

      

       絲毫沒有破解的地方,所以只好考慮native層,調試so檔案。

       將反編譯後的libcrackme.so丟進IDA裡可以看到驗證函式:

      

       接著嘗試IDA attach這個so檔案,但是attach上程式就退出了,所以就對下面的JNI_Onload()這個載入資料函數進行分析。

 

0x02:

       首先開啟ddms,不開啟的話調試連接埠是關閉的,後面沒法使用jdb。

   !注意,這裡有個坑是:最好先cmd 然後netstat –ano | find “8700”是否被佔用,否則後續的調試時無法進行的。

   只有佔用連接埠8700的程式為javaw時候才正常。

   小tips:IDA中android_server一般有兩個,一種是支援Android5.0以上的(字元短些),還有一種是Android5.0以下的(字元長一點)。

  

   我這裡為了方便把要用的android_server改了個名字

 

   接著把IDA的androidserver push到模擬器上,並且用root身份進行。

      

       接下來是連接埠轉寄 adb forward tcp:23946 tcp:23946

       然後以debug模式啟動程式。這裡同樣有個坑,要重新開個cmd來執行連接埠轉寄和debug啟動,否則會出錯。

   

       然後看模擬器上程式會顯示waiting for debugger的調試介面。

      

       然後IDA attach

       注意:attach的時候要先設定下

      

       attach

      

       然後調試選項(注意:一定要打上這個勾)

      

       接下來一定要在IDA裡面點擊運行(這裡我不知道所以重做了好多次- -!)

       使用jdb恢複程式

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

   然後在JNI_Onload下斷點

      

 

0x03:

       IDA中按p鍵後會將代碼塊作為函數分析,再F5

      

       發現是個死迴圈調試,參考了下so調試遇到死迴圈如何調試的方法比較後,選擇patch so的方式比較方便。

       tips:這裡選擇patch so的原因是在之前的IDA中存在一個android_log_print()函數

      

      每次啟動並執行時候固定輸出了I/yaotong (XXX): SecurityCheck Started...所以通過patch so修改列印的內容,
  可以直接利用這個android_log_print函數來比較輸出正確的值。
  當然也可以通過調試分析出上述的sub_130C()函數是用來反調試檢測的(即IDA attach就退出程式),nop掉這個函數就可以正常調試了。

0x04:

     因為arm架構沒有單獨的nop指令,所以採用蒸米所說的movs r0,r0的方法

  對應的機器碼為00 00 A0 E1

     來到sub_130C()的位置,將 13 FF FF EB 改為上述指令即可nop掉這個函數

  

  

     再F5一看,發現已經成功nop掉

  

     然後儲存so檔案,再覆蓋掉原來的so檔案,再重新簽名。

     這次attach沒有退出就表明patch so成功了,然後在驗證函式

   Java_com_yaotong_crackme_MainActivity_securityCheck下斷點。
  然後在app上輸入密碼,就會定位到這個點

  

    F5進去可以看到這裡應該就是加密的字串所在的地址

  

       點進去按D轉為指標模式再看這個地址

     

       aiyou,bucuoo應該就是flag了

      

0x05:

       測試一下

   

  破解成功!

0x06:

  以前接觸的都是java層的東西,一般都是找核心驗證函式寫個註冊機就ok了。第一次調試native層讓我學到了很多東西,同時領會到了IDA的強大。雖然過程中有很多坑,有時候都不知道怎麼查,但是堅持下來還是完成了,為以後調試so檔案打下了基礎。

 

0x07:

  參考

  Android動態調試Ida Pro

Android--native層so檔案調試

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.