flag怎么读

更新时间:2022-11-24 04:10:01 阅读: 评论:0


2022年11月24日发(作者:看了动物的英文)

ctfphp读取flag,ctf题:pinstore获取flag

⾸先先⽤jadx反编译出源代码,可以看到⽬录结构

从这⾥就可以知道我们只需查看re⽬录下的代码即可

先从MainActivity看起

从源代码我们可以知道pinFormDB是数据库中存储的密码、hashOfEnteredPin属于我们输⼊的密码加密后的密⽂,在这⾥我们可以修改if

的判断条件

接下来通过apktool⼯具对apk⽂件进⾏反编译得到smail代码

分别找到pinFormDB对应的是v5,hashOfEnteredPin对应的是v3

然后接下来找到两个参数在⼀起被调⽤的地⽅

通过修改蓝⾊⽅框内的内容:if-eqz=>if-nez

注:if-eqz:如果vAA为0则跳转

if-nez:如果VAA不为0则跳转

于是我们在只要输不出正确的密码就可以直接读取数据,结果如下图

可惜这不是我们想要的flag,所以恢复原来的smail,继续分析源代码,

在这⾥我们找到⼀个Toast,Toast是⽤来显⽰消息的,我们可以修改smail源码让密码爆出来(v5是从数据库中读取的密⽂

pinFromDB,v7是密码输⼊错误提⽰信息"IncorrectPin,tryagain")

通过修改蓝⾊⽅框内的内容:v7=>v5

结果如下图,

得到加密的密码密⽂:d8531a519b3d4dfebece0259f90b466a23efc57b

MD5解密得:7498

可惜也不是我们想要的flag。

在这⾥还是话费了我⼤量时间来找flag位置,

这⾥是后知后觉的,我们⽤navicatforsqlite打开,这⾥我们可以发现他有pinDB、cretsDBv1和cretsDBv2

然⽽在源代码中我们查看,发现我们只读取过cretsDBv1和pinDB

//[]

pinFromDB=newDatabaUtilities(licationContext()).fetchPin();//***********************

Intentintent=newIntent(,);

ra("pin",enteredPin);

ctivity(intent);

//[]

t(NewCryptoUtilities("v1",pin).decrypt(newDatabaUtilities(getApplicationContext()).fetchSecret()));

所以我们更可以读取cretsDBv2数据看看,但是要注意⼀个问题

我们可以发现从数据库中读取数据的解密⽅式不⼀样

所以我们需要修改两处位置:

位置⼀:在⾥找到字符串”SELECTentryFROMcretsDBv1”

通过修改蓝⾊⽅框内的内容:

SELECTentryFROMcretsDBv1->SELECTentryFROMcretsDBv2

位置⼆:在⾥找到字符串”v1”(这⾥也可以同上⾯⼀样修改if条件吗;"v1"字符串好找,这⾥就改v1了)

通过修改蓝⾊⽅框内的内容:

v1->v2(这⾥可以是任意⾮v1内容)

然后打包回编译,签名apk后,我们就可以得到flag了

本文发布于:2022-11-24 04:10:01,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/9795.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:definite
标签:flag怎么读
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图