1. 程式人生 > >記一次利用動態除錯so包破解協議 (1)

記一次利用動態除錯so包破解協議 (1)

前期工作:

1.設定手機為除錯模式,我這裡用了 mprop

相關命令:

1.chmod 755 /data/local/tmp/mprop
2.data/local/tmp/mprop
3.setprop ro.debuggable 1
4./data/local/tmp/mprop -r
5.檢視 getprop ro.debuggable

這樣程式碼成功了

2.修改selinux的許可權

相關命令:執行setenforce 0, 執行成功的話會變為Permissive

 

3.將IDA裡面的android_server檔案   push 進  這個目錄/data/local/tmp

並且要設定許可權

chmod 777 /data/local/tmp/android_serve

 

下面可以進入動態除錯的相關操作了

第一步:啟動android_server服務

會出現的問題就是地址被使用了:

解決辦法就是檢視其的程序,kill掉在執行啟動就ok了

第二步:再啟動一個命令視窗

1.埠轉發,因為IDA預設埠是23946:  adb forward tcp:23946 tcp:23946

2.啟動app的頁面: adb shell am start -D -n cn.mama.cityquan/cn.mama.cityquan.activity.SplashActivity

之後app會停留在

 

第三步:

去sdk裡面開啟ddms工具

之後在ddms工具裡面顯示的app包名列表中找到你要除錯的包名

看到埠是8623,之後做連線偵錯程式

jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8623

這裡的埠一定是在ddms裡面看到的埠

注意:中途android_server監聽有可能會斷開,需要重新啟動android_server

第四步:啟動32位的IDA,因為32位的才能按F5檢視原始碼

進去之後操作 Debugger -> Attach -> Remote ARMLinux/Android debugger

配置引數:

點選Debug options

點選ok,進入等待一會

如果顯示無法連線,那就重啟一下手機,重新來過所有操作

如果成功進入的就會到選擇包

成功進入,找到要除錯的so包,就可以進行除錯了

進去之後先按F9過掉,之後才在需要打點地方打點,我這裡是除錯他的加密演算法

由於第一次動態除錯so,還沒有完全分析成功, 裡面的加密演算法都是md5 加密,只不過是新增引數/混亂引數進行MD5加密而已

這裡有兩種引數組合,我只分析出用來登入的那個的,另一種組合不知道為啥加密的引數一直會變,所以就還沒有分析成功,後續看吧

格式:

device_id +key+password + t + username + ver +  9fd8b9cb5d31e7c6efef4bba1c5eb145(這裡是固定的)

加密的內容從箭頭指向的v33裡面可以看到

注意:進入程式碼除錯的時候操作  按F5 再 按F8,反正就是要按F8才能在原始碼裡面進行F7下一步的

 

①除錯快捷鍵:

F2設定斷點,F4執行到滑鼠位置,F7單步步入,F8單步步過,F9執行程式

F5/Tab 將相應的簡單彙編代表粗略轉換為C/C++程式碼