APK动态调试-FindPass为例

工具:

jeb-linux、adb、雷电模拟器、jadx

示例:

jarvis oj上的FindPass


步骤:

一、用模拟器打开程序,查看其功能

发现,当输入错误的时候就会提示not right

APK动态调试-FindPass为例_第1张图片

二、用jadx打开findpass.apk

APK动态调试-FindPass为例_第2张图片

分析程序逻辑

发现我们输入的值保存在fkey上面,ekey保存的是Resource/resource.asrc/res/values/strings.xml文件中的fkey的值(Tr43Fla92Ch4n93),然后读取图片scr.jpg的前1024个字节,然后循环对ekey数组中的值进行加减操作,然后到了关键部分,fkey和进行一系列运算的ekey进行对比,如果相同flag就是flag{feky},既然找到了关键部位,就动态调试找到这个值就OK了(也有很多大佬暴力出奇迹)

三、用jeb-linux打开要调试的apk


APK动态调试-FindPass为例_第3张图片

按tab切换到伪代码(jeb3版本),找到需要下断点的地方,可以看到,equal比较的是v5和v9,然后tab键切回去,然后按ctrl+b设置断点

APK动态调试-FindPass为例_第4张图片
APK动态调试-FindPass为例_第5张图片

四、adb连接模拟器,开启软件调试

APK动态调试-FindPass为例_第6张图片

模拟器里会出现等待调试的页面

APK动态调试-FindPass为例_第7张图片

五、点击jeb的调试器->开始,会出现如下图所示页面(这一步在win10上没能实现,就转移到了linux上,有大佬知道的可以交流交流)双击进程里标示为D的进程,就可以调试了

APK动态调试-FindPass为例_第8张图片

在软件里输入1111的时候,点击keyUP就会断在断点处,这时候查看局部变量v5和v9后,将局部变量

的类型转换成string就能发现flag

APK动态调试-FindPass为例_第9张图片
APK动态调试-FindPass为例_第10张图片

你可能感兴趣的:(APK动态调试-FindPass为例)