so文件反编译_安卓攻防so模块自动化修复实战
生活随笔
收集整理的這篇文章主要介紹了
so文件反编译_安卓攻防so模块自动化修复实战
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
Android加固方案經過這么長時間的發展,從開始的整體dex加密壓縮方案逐步開始往native層發展,市面上知名的幾款商業級加固方案中很容易發現這種方案的身影。這樣看來,在今后相當長的一段時間內,Android逆向中不可避免的會頻繁接觸到與So加固的對抗了。
?工具的初衷
搜集常見So加固方案(主要是日常分析中遇到的)
自動化對抗加固方案,解放雙手
開源工具源碼
1.把切實可行的解決方案想法落地到代碼
2.方便需要的同學查看解決方案原理
3.希望有更多的人參與進來,慢慢打造一個好用上手的工具
目前狀態工具目前還處于娃娃階段,平時上班沒有太多時間來擼^..^,目前包含了如下的功能:
1.So文件信息讀取顯示
1.1 顯示Elf頭
1.2 顯示Program頭
1.3 顯示Section頭
2.So文件節表修復重建功能(適合面目全非型)
2.1 根據.dynamic 節重建其他節信息
工具簡介
- 開源地址:https://http://github.com/freakishfox/xAnSo。
- 目錄結構如下:
Core
- 主要存放一些基礎組件類
fix
- 主要存放一些修復方案邏輯
- 持續增加...
util
- 邏輯無關的工具類
viewer
- 界面顯示相關邏輯
Windows
- 工具在Windows平臺下編譯需要的工程配置及相關文件
工具編譯
- 目前Windows平臺的編譯可以在Visual Studio2013環境下完成,Android目錄下的編譯配置文件還沒配置上去
實戰一波(阿里安全加固方案測試版)
環境準備
- 要測試工具效果,我們自己寫一個很簡單的Android App, , 使用Android Studio創建一個工程,主要代碼如下:
開始分析
- 把下載回來的加固包丟入 AndroidKiller (請自行更新包里的工具ApkTool到最新版本,省的再踩老坑反編譯報錯...)
- 圖中我框出了經過加固之后的變化部分
- MainActivity->OnCreate函數變成了Native, 里面原先的代碼看不到了
- 增加了一個類fixHelper
- 增加了幾個附帶的So文件
- 為了更加直觀,我們把AndroidKiller反編譯出來的classes-dex2jar.jar 拖入jd-gui查看,代碼很直觀,如下:
- 很自然,我們要跟著 fixHelper.fixfunc 進一步分析,繼續觀察代碼,發現悲劇了,進入native層了,直接看圖:
- 逃不掉了,必須要看So的代碼了, 從這里的代碼我們知道,肯定有那么一個So庫,有那么一個導出函數fixfunc可以供Java層調用,看上面的這個代碼結構的架勢,估計是在運行時動態修復MainActivity.OnCreate函數的,
- 帶著這樣的疑問,我們在這個fixHelper類中找到了一個static{}代碼塊中找到了經典的 System.load("libdemolish.so"),那清楚了,二話不說在反編譯后的目錄里面找到這個So文件,直接拖入IDA靜候佳音!
陷入杯具
- IDA反編譯的結果是這樣的:
- IDA分析完成之后,函數列表是空的, 導出函數也是空的,代碼區域啥的都是 1% ~~~~,顯然是這個So文件經過了處理,并成功干擾到了IDA的分析
開始思考
- 內心的想法
- 到這里,一開始是懵逼的,到底這個So文件被搞了什么鬼導致IDA跟著懵逼呢?但是我知道一個前提,如果我們自己編譯一個So文件,不經過處理,那IDA分析起來是比較溜的,于是我們這個時候考慮啟用 對比大法
- 開始對比
- 要對比,那我們就找一個沒有經過(加固)處理的So模塊來,我隨便找了一個模塊,為了描述方便,我稱為A模塊吧, 于是開始使用 readelf 這個工具分別查看模塊的狀態,得如下結果:
- 這是節表顯示結果,通過對比,結果很直觀,被處理過的So模塊,節表大部分信息已亂,除了elf執行必須的.DYNAMIC節之外,于是我們首先懷疑可能就是這里的問題導致了IDA的紊亂,找到了一處懷疑點,那就開始干,把不一樣的變的一樣(西醫就是這么個思路~~), 那具體要怎么修復呢, 了解ELF格式的同學應該比較快速的知道,利用 .DYNAMIC信息來進行修復(修復原理可以參考:https://bbs.pediy.com/thread-192874.htm=>
6
[原創]ELF section修復的一些思考, 感謝 @ThomasKing),部分修復操作在 @ThomasKing的基礎上做了修改調整
- 這是節表顯示結果,通過對比,結果很直觀,被處理過的So模塊,節表大部分信息已亂,除了elf執行必須的.DYNAMIC節之外,于是我們首先懷疑可能就是這里的問題導致了IDA的紊亂,找到了一處懷疑點,那就開始干,把不一樣的變的一樣(西醫就是這么個思路~~), 那具體要怎么修復呢, 了解ELF格式的同學應該比較快速的知道,利用 .DYNAMIC信息來進行修復(修復原理可以參考:https://bbs.pediy.com/thread-192874.htm=>
- 解決問題
- 問題初步定位了大致方向, 原理也了解了, 于是落地到代碼, 啟動寫好的工具對節表信息進行修復:
- 等待一會兒會修復完畢,于是我們得到修復后的文件:、
再次嘗試
- 剛才跟節表磕了一會兒,現在再回過神來繼續想想 fixHelper.fixfunc 搞定了沒有,把我們修復之后的文件拖入IDA, 經過一小會兒的分析, 效果出來了, 基本有了我們希望的結果(直接有圖有真相):
就到這里了
- 到這里之后,估計很多人都能繼續著手分析了, 也達到了本文的目的。最后提醒一點是,大家在自己動手修復節表這種東西的時候,不要忘記修復 符號表,對IDA來說還是比較重要的,不然分析出來的效果會降低,具體情況大家可以嘗試一遍,印象會更深刻。
- 另外建議新手有空可以讀一下 apkTool 的代碼,確實沒幾行代碼,但是在熟悉這塊代碼之后,對后續的一些初級坑的幫助還是挺大的 ^..^
總結
以上是生活随笔為你收集整理的so文件反编译_安卓攻防so模块自动化修复实战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一键清除bios密码_电脑忘记开机密码?
- 下一篇: 这是泰山什么系列的香烟,多少钱一包?