工具:
jeb-linux、adb、雷电模拟器、jadx
示例:
jarvis oj上的FindPass
步骤:
一、用模拟器打开程序,查看其功能
发现,当输入错误的时候就会提示not right
二、用jadx打开findpass.apk
分析程序逻辑
发现我们输入的值保存在fkey上面,ekey保存的是Resource/resource.asrc/res/values/strings.xml文件中的fkey的值(Tr43Fla92Ch4n93),然后读取图片scr.jpg的前1024个字节,然后循环对ekey数组中的值进行加减操作,然后到了关键部分,fkey和进行一系列运算的ekey进行对比,如果相同flag就是flag{feky},既然找到了关键部位,就动态调试找到这个值就OK了(也有很多大佬暴力出奇迹)
三、用jeb-linux打开要调试的apk
按tab切换到伪代码(jeb3版本),找到需要下断点的地方,可以看到,equal比较的是v5和v9,然后tab键切回去,然后按ctrl+b设置断点
四、adb连接模拟器,开启软件调试
模拟器里会出现等待调试的页面
五、点击jeb的调试器->开始,会出现如下图所示页面(这一步在win10上没能实现,就转移到了linux上,有大佬知道的可以交流交流)双击进程里标示为D的进程,就可以调试了
在软件里输入1111的时候,点击keyUP就会断在断点处,这时候查看局部变量v5和v9后,将局部变量
的类型转换成string就能发现flag