官术网_书友最值得收藏!

4.3 APK逆向之反調試

為了保護應用關鍵代碼,開發者需要采用各種方式增加關鍵代碼逆向難度。調試技術是逆向人員理解關鍵代碼邏輯的重要手段,對應的反調試技術則是應用開發者的“鎧甲”。Android下的反調試技術大多從Windows平臺衍生而來,可以分為以下幾類。

1.檢測調試器特征

? 檢測調試器端口,如IDA調試默認占用的23946端口。

? 檢測常用調試器進程名,如android_server、gdbserver等。

? 檢測/proc/pid/status、/proc/pid/task/pid/status下的Tracepid是否為0。

? 檢測/proc/pid/stat、/proc/pid/task/pid/stat的第2個字段是否為t。

? 檢測/proc/pid/wchan、/proc/pid/task/pid/wchan是否為ptrace_stop。

2.檢測進程自身運行狀態

? 檢測父進程是否為zygote。

? 利用系統自帶檢測函數android.os.Debug.isDebuggerConnected。

? 檢測自身是否被ptrace。

? 檢測自身代碼中是否包含軟件斷點。

? 主動發出異常信號并捕獲,如果沒有被正常接收說明被調試器捕獲。

? 檢測某段程序代碼運行時間是否超出預期。

攻擊者繞過上述各類檢測方式最便捷的方式是定制Android ROM,從Android源碼層面隱藏調試器特征。比如,通過ptrace函數檢測是否被ptrace時,可以修改源碼,讓ptrace函數永遠返回非調試狀態,即可繞過ptrace檢測;對系統自帶的isDebuggerConnected函數,也可以通過修改源碼繞過??傊?,熟悉Android源碼,準備一套專門針對反調試定制的系統,能大大加速逆向進程。

主站蜘蛛池模板: 津市市| 吴川市| 达州市| 仁寿县| 东阳市| 郴州市| 忻州市| 南昌县| 金沙县| 波密县| 虎林市| 云安县| 若羌县| 木里| 来安县| 灵宝市| 陇西县| 中西区| 曲松县| 乌恰县| 株洲市| 罗江县| 武城县| 永修县| 馆陶县| 柳州市| 宜丰县| 临邑县| 抚远县| 东乌| 和田市| 丰顺县| 德兴市| 绥江县| 河源市| 恭城| 宁化县| 揭阳市| 富阳市| 和田市| 五指山市|