2014ali crackme2

一個密碼破解


jni層做了加密


僞代碼層是這樣的

接着來動態調試。雙開ida。然後attach上之後整個app就會閃退

如何查看是否被調試呢

adb shell 下 ps|grep com.yao 包名。。
其中TracePid就是被調試的pid

檢測機制最早的兩個時機是.init_array 和Jni_onload

.init_array是最早加載的一個段信息。現在一般的so解密都是在這裏的。
jni——onload是在system.loadlibrary調用時執行。執行時機要早於native方法 但是晚於.init_array

所以ida在attach的時候在debugger中選擇debugger option 中勾選suspend on library load/unload

adb shell am start -D -n com.yaotong.crackme/com.yaotong.crackme.MainActivity

進入調試狀態

但是這裏會發現沒有rx權限的so文件
畢竟還沒有走system。loadlibrary

這時候用jdb命令去attach 等待的程序

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

注意這裏的apk包要debug模式 加在application塊中

這時候就跳到linker上面了

這時候我們靜態找到jni onload的地址
動態找到基地址

相加找到具體的jni onload的地址

1b9c

b3ba4000

相加如上

打個斷點

會發現從這個地方會退出

然後從靜態那邊找到地址是1c58
不過這邊我不是很確定怎麼找 onload裏面有兩個blx 其中一個下面有一個函數調用。估摸着是這麼找的

改一下
然後替換 打包一個新apk

打上斷點

調試到最後這個cmp

發現會跳轉到下面的函數 那麼斷定這裏就是密碼比較的地方

cmp比較的是r3寄存器的值 值採用的是寄存器尋址方式 即r2的地址

可以看到是aiyou,bucuoo

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章