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