BSides San Francisco CTF 2017 : pinlock-150
作者:互联网
了解应用的概况(View)
用jadx打开apk文件观察源码
找到程序的入口进行分析
if(pinFromDB.equalsIgnoreCase(hashOfEnteredPin){}
窃喜,我只要使下面两个相等就能得到flag?
观察DatabaseUtilities
于是乎就打开数据库,得到
pinDB:d8531a519b3d4dfebece0259f90b466a23efc57b
从上面可以知道得到的数据是经过处理的,
跳到CryptoUtilities
用工具计算出pin值:
打开程序输入pin:
-
emmmm,发现并没有得到flag
-
然后回去观察发现有一个 SecretDisplay的类,观察发现
设想**“v1"是否对应的就是前面得到的字符( secretsDBv1,而"v2”**对应( secretsDBv2,
两个方法:
修改Smali对应的寄存器值
1.把DatebaseUtilities.smali中的 const-string v1, "SELECT entry FROM secretsDBv1"改成: const-string v1, “SELECT entry FROM secretsDBv2”
2. 把SecretDisplay.smali中的const-string v7, “v1”,改成 const-string v7, “v2”
修改完成之后在输入前面得到的pin值,就得到了flag
解法2
得到pin -> 了解到secretsDBv1,secretsDBv2分别对应得过程,然后修改smali代码;认真看了CryptoUtilities类会发现数据通过这个类处理之后才会得到①中得flag,那么我们可以写一段类似于这个功能得代码(简化,
得到flag
总结
!题目链接
标签:150,Francisco,const,San,pin,v1,flag,得到,string 来源: https://blog.csdn.net/weixin_42052758/article/details/101156197