1. 程式人生 > 其它 >教我兄弟學Android逆向07 IDA破解第一個so

教我兄弟學Android逆向07 IDA破解第一個so

上一篇 《教我兄弟學Android逆向06 用AndroidStudio編寫第一個so》我帶你用AS編寫了第一個so 現在回顧一下 首先我建立了一個myJNI類 裡面包含一個Native的sayHello方法 這個方法在native層返回一句話 hello 52pojie! 然後我在java層通過Log函式呼叫並輸入了sayHello方法完成了第一個so的編寫。
課程寫到這我已經不再是面向威一個人了 有很多同學私信我問威學的怎麼樣了 找到工作了嗎 其實威已經找到了逆向的工作 待遇還不錯 今年七月份回學校拿畢業證 現在正在忙著寫畢業論文等學校一堆的事情 當然他學的並不止這些東西。 雖然威找到了工作 但是應很多同學的要求課程還會繼續更新 後面我還會陸續放出來一些課程。


希望同學們好好學習 認真學習的人都能找到滿意的工作。

教我兄弟學逆向系列課程中的每一課我認為均是一個框架 這是一個拋磚引玉的過程 課程中我不會把東西講的這麼細 我只會教給大家一種破解的思路和實現方式 具體原理請自行百度。


要麼學!要麼不學!學和不學之間沒有中間值 不學就放棄,學就要去認真的學! --致選擇

本節課給你帶來的是so的破解 本節課用到的例子是上節課我帶你做的Demo 題目是更改Native方法sayHello的返回值 讓它原來返回的hello 52pojie!變成hello world!
那麼開始今天的課程。


本節課所有到的工具和Demo
IDA

連結:https://pan.baidu.com/s/15uCX8o6tTSSelgG_RN7kBQ
密碼:ftie

第六課Demo
連結:https://pan.baidu.com/s/1vKC1SevvHfeI7f0d2c6IqQ密碼:u1an


一 解包
1.使用apktool解包app-debug.apk

2.關於apktool的使用請看番外

https://www.52pojie.cn/thread-732007-1-1.html


二 開啟so檔案
1.進入解包後的lib目錄找到libJniTest.so並用IDA開啟

<ignore_js_op>


2.點兩次OK進入此頁面 點新建
<ignore_js_op>

3.找到so並開啟它 因為我的機型是支援arm的所以我這裡開啟的是armeabi資料夾下的so 如果機型是x86模式的那麼這裡要開啟x86模式下的libJniTest.so
armeabiv-v7a: 第7代及以上的 ARM 處理器。2011年15月以後的生產的大部分Android裝置都使用它.
arm64-v8a: 第8代、64位ARM處理器,很少裝置,三星 Galaxy S6是其中之一。
armeabi: 第5代、第6代的ARM處理器,早期的手機用的比較多。
x86: 平板、模擬器用得比較多。
x86_64: 64位的平板。
<ignore_js_op>

4.點選開啟後會有幾個彈框 全部點OK會進入到這樣一個介面 說明so已經開啟
<ignore_js_op>

三 找到字串hello 52pojie!並修改為hello world!
1.按住鍵盤組合鍵 shift + f12 開啟字串視窗這個視窗將會列舉出so中所包含的所有字串 因為上節課我們只編寫了一個字串 所以這裡只有一個hello 52pojie! 如果開啟的是x86的so這裡還會有一些.so 但是字串只有這一個
<ignore_js_op>

2.雙擊進去將會找到hello 52pojie!的記憶體地址
<ignore_js_op>

3.滑鼠點在hello 52pojie!字串上,開啟 Hex dump視窗,修改hello 52pojie!對應記憶體地址的內容
關於字元對應的16進位制可以在百度百科搜尋ascii碼錶 找到字元所對應的16進位制
<ignore_js_op>

<ignore_js_op>

4.因為我要把hello 52pojie!修改成hello world! 是不是隻要找到每個字元所對應的hex修改就好了
這裡我看到 hello 52pojie!對應的hex是:68 65 6C 6C 6F 20 35 32 70 6F 6A 69 65 21
我在ascii碼錶上找到world所對應的十六進位制是:77 6F 72 6C 64
所以hello world! 對應的十六進位制是:68 65 6C 6C 6F 20 77 6F 72 6C 64 21


5.找到所要修改的字元所對應的16進位制 右鍵Edit
<ignore_js_op>

6.由於52pojie!比world!多兩個字元 這裡把多出來的置為00 修改好後 右鍵Apply changes應用
<ignore_js_op>

7.儲存修改好後so
<ignore_js_op>

<ignore_js_op>

8.點選確定後 把修改後的so儲存到一個位置
<ignore_js_op>

四 替換so並重打包
1.關閉ida 並把armeabi和armeabi-v7a下的libJniTest.so替換成修改後的so 注意這裡兩個資料夾下的so都要替換同理 如果是x86模式的 這裡要替換x86資料夾的so
<ignore_js_op>

2 替換so後把app-debug資料夾用apktool命令重打包成new.apk 並進行簽名 生成簽名後的new_sign.apk
<ignore_js_op>

<ignore_js_op>

3.將new_sign.apk安裝到手機 執行 檢視Log成功顯示hello world! so破解成功
<ignore_js_op>

五.總結
本節課首先下載了ida這款逆向神器 然後通過ida修改so的16進位制 成功的將hello 52pojie!修改成了hello world! 完成了對第六課的破解 。



課後作業
1.完成第六課的課後作業並破解它
2.看完《IDA Pro權威指南》前六章
書籍連結:https://pan.baidu.com/s/1zHkHbeaGZ6wfeRR20Gav-A密碼:3vnu



下一篇:教我兄弟學Android逆向08 IDA爆破簽名驗證

學習時的痛苦是暫時的 未學到的痛苦是終生的