標籤:nbsp 十進位 雙擊 修改 sock arm 接下來 位移地址 版本
反調試方案:我們最通常使用的動態工具是IDA, IDA的動態調試連接埠預設為23946,我們可以通過/pro/net/tcp 查看android 系統所有TCP Socket啟動android_server之後,/proc/net/tcp ,連接埠號碼是0x5D8A,十進位為23946
我們可以利用預設的調試連接埠23946 來實現反調試。實現代碼如下, 實現原理: Android作業系統不允許一個IP可能同時存在多個相同的連接埠的通訊端 解決方案:最常見的解決的解決方案, 我們不使用預設轉送連接埠23946。 android_server 提供命令指定轉送連接埠命令: ./android_server -p12345 ,注意連接埠號碼和參數之間沒有空格連接埠號碼變為0x3039,即12345雖然這種做法很簡單,但是對於一個崇尚簡約的程式員而言,每次都要都要指定連接埠,煩不煩。我們能不能和之前的通過逆向android_server, 通過修改android_server的預設連接埠來永久改變連接埠號碼。不同IDA版本的android_server 使用指令集不太一樣,比如IDA6.6 使用是ARM指令集, IDA6.8 使用的是Thumb指令集。不過修改方案是一致的, 筆者以使用Thumb指令集的IDA6.8的android_server.1. IDA開啟android_server, 找到main函數,如下:對應的二進位指令代碼
2.這裡需要知道一點關於ARM指令的知識,這裡的LDR R5, =5D8A, 一條偽指令, =5D8A指的指令和變數(儲存值為5D8A)的相對位移地址,這句為什麼同一條ARM彙編對應16進位不一樣了,因為指令地址不一樣,導致位移地址不一樣。 按照慣例,這個儲存5D8A的地址就在所在函數結束的後面.如下:
右側有個DATA_XREF可知,這裡有兩處被應用,即兩個偽指令LDR, R5, =0x5D8A的地址, 雙擊可以驗證。 3.接下來我們用二進位編輯工具010 Editor 編輯檔案位移B8D8將這個值改成我們指定連接埠號碼:12345(0x3039),儲存,測試 3. 測試OK
淺談android反調試之 轉送連接埠