题目下载:AliCrackme_1
一、查壳
结果:无壳
二、Hook
开启Frida,Objection直接无脑Hoo!人生苦短,先Hook再分析(●’◡’●)
android hooking watch class com.example.simpleencryption.MainAc
tivity --dump-args --dump-backtrace --dump-return
结果触发了以下方法
(agent) [jhbp27pdkjn] Called com.example.simpleencryption.MainActivity.getTableFromPic()
(agent) [jhbp27pdkjn] Called com.example.simpleencryption.MainActivity.getPwdFromPic()
(agent) [jhbp27pdkjn] Called com.example.simpleencryption.MainActivity.access$0(java.lang.String, [B)
(agent) [jhbp27pdkjn] Called com.example.simpleencryption.MainActivity.bytesToAliSmsCode(java.lang.String, [B)
Hook bytesToAliSmsCode方法看看它的入参和返回值。
android hooking watch class_method com.example.simpleencryption
.MainActivity.bytesToAliSmsCode --dump-args --dump-backtrace --dump-return
(agent) [c34p4xzd9tt] Arguments com.example.simpleencryption.MainActivity.bytesToAliSmsCode(一乙二十丁厂七卜人入八九几儿了力乃刀又三于干亏士工土才寸下大丈与万上小口巾山千乞川亿个勺久凡及夕丸么广亡门义之尸弓己已子卫也女飞刃习叉马乡丰王井开夫天无元专云扎艺木五支厅不太犬区历尤友匹车巨牙屯比互切瓦止少日中冈贝内水见午牛手毛气升长仁什片仆化仇币仍仅斤爪反介父从今凶分乏公仓月氏勿欠风丹匀乌凤勾文六方火为斗忆订计户认心尺引丑巴孔队办以允予劝双书幻玉刊示末未击打巧正扑扒功扔去甘世古节本术可丙左厉右石布龙平灭轧东卡北占业旧帅归且旦目叶甲申叮电号田由史只央兄叼叫另叨叹四生失禾丘付仗代仙们仪白仔他斥瓜乎丛令用甩印乐, [object Object])
(agent) [c34p4xzd9tt] Return Value: 么广亡门义之
三、分析源码
apk拖到Jadx分析源码
可以看到刚刚Hook的bytesToAliSmsCode方法代码,经过多次Hook发现参数table是不变的,估计就是个字符表,返回值是根据输入的密码的不同,不断变化的。所以这个参数data是问题的关键!
使用Jadx查找bytesToAliSmsCode方法的用例,只有一个。
可以看到下图参数data是password.getBytes(“utf-8”),也就是我们输入的密码转换成字节码;enPassword是bytesToAliSmsCode方法的返回值。
!pw.equals(enPassword)的意思是比较pw和enPassword的值。如果变量pw为null或空字符串,或者变量pw不等于变量enPassword,则执行条件语句中的代码块。
也就是说我们需要pw和enPassword的值相等,enPassword是我们要输入的值,所以要找到pw的值。可以看到下图pw的值来自于getPwdFromPic方法的返回值。
这次我们Hook getPwdFromPic方法,看看它的返回值是什么?这下找到了pw的值是义弓么丸广之
android hooking watch class_method com.example.simpleencryption
.MainActivity.getPwdFromPic --dump-args --dump-backtrace --dump-return
(agent) [dvjciqig0xu] Called com.example.simpleencryption.MainActivity.getPwdFromPic()
(agent) [dvjciqig0xu] Backtrace:
com.example.simpleencryption.MainActivity.getPwdFromPic(Native Method)
com.example.simpleencryption.MainActivity$1.onClick(MainActivity.java:34)
android.view.View.performClick(View.java:6266)
android.view.View$PerformClick.run(View.java:24730)
android.os.Handler.handleCallback(Handler.java:793)
android.os.Handler.dispatchMessage(Handler.java:98)
android.os.Looper.loop(Looper.java:173)
android.app.ActivityThread.main(ActivityThread.java:6698)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:782)
(agent) [dvjciqig0xu] Return Value: 义弓么丸广之
再次看这个加密算法bytesToAliSmsCode方法,现在参数table和返回值都知道了,就是求data。
四、逆向算法脚本
除非注明,否则均为呆小猴博客原创文章,转载必须以链接形式标明本文链接!付费资源为虚拟物品,一经出售,概不退款!
呆小猴 » 利用Frida Objection简单粗暴Hook AliCrackme_1
呆小猴 » 利用Frida Objection简单粗暴Hook AliCrackme_1