简单CTF

了解应用的概况(View)

简单CTF_第1张图片
Screenshot_2018-08-21-14-37-33-228_pinlock.ctf.pi.png

用jadx打开apk文件观察源码

简单CTF_第2张图片
目录.PNG

找到程序的入口进行分析

简单CTF_第3张图片

if(pinFromDB.equalsIgnoreCase(hashOfEnteredPin){}
窃喜,我只要使下面两个相等就能得到flag?

观察DatabaseUtilities


于是乎就打开数据库,得到

pinDB:d8531a519b3d4dfebece0259f90b466a23efc57b
从上面可以知道得到的数据是经过处理的,


跳到 CryptoUtilities

简单CTF_第4张图片

用工具计算出pin值:

打开程序输入pin:

简单CTF_第5张图片
  • 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"

  1. 把SecretDisplay.smali中的const-string v7, "v1",改成 const-string v7, "v2"

修改完成之后在输入前面得到的pin值,就得到了flag


简单CTF_第6张图片

解法2

得到pin -> 了解到secretsDBv1secretsDBv2分别对应得过程,然后修改smali代码;认真看了CryptoUtilities类会发现数据通过这个类处理之后才会得到①中得flag,那么我们可以写一段类似于这个功能得代码(简化

简单CTF_第7张图片

得到flag

简单CTF_第8张图片

总结

!题目链接

你可能感兴趣的:(简单CTF)