zoukankan      html  css  js  c++  java
  • 日常破解---XCTF_APP1获取flag记录

    日常破解---XCTF_APP1获取flag记录


    一、题目来源

      来源:XCTF社区安卓题目app1


    二、解题记录

        1、首先安装到模拟器中运行一下,如下图所示,点击一下按钮,弹出提示年轻人不要耍小聪明哦
    图1

        2、将APK文件拖进AndroidKiller中反编译,直接搜索关键字年轻人以确定按钮触发的事件位置,搜索结果如下图所示:
    图2

        3、偷懒不看smali代码了,直接将apk拖进jeb中查看java代码(别问我为啥不要AndroidKiller,jeb转换出的java确实准确一些),java代码如下,分析代码可发现:程序首先获取输入框的值放进变量v1中,然后获取app的版本名称放进变量v3中,获取app的版本号放进变量v4中,接着在一个while循环中,将变量v3中每一个字符与变量v4进行异或操作,然后与变量v1(就是我们输入的flag)每一个字符相比较,若全部相等,则跳出循环,在循环外面又判断了一次我们输入的flag长度与变量v3长度是否相等,若不等,则弹出年轻人不要耍小聪明哦,若相等,则弹出恭喜开启闯关之门!。分析到这里,flag可以很明显看出来就是app的版本名称每一个字符与版本号异或之后组成的字符串就是flag!!!
    图3

        4、获取版本号这些可以直接在smali中log就行了,但感觉太烦了,就直接使用Android studio动态调试smali直接查看寄存器的值获取,怎么动态调试就不说了,下图是动态调试获取的版本名与版本号
    图4

        5、获取版本名称信息后,写个python脚本跑出flag如下,提交显示恭喜开启闯关之门!
    图5
    图6


    三、总结

        一道很基础的题,不知道总结啥了,就这样吧!!!!

        附上python脚本:
    str1 = 'X<cP[?PHNB<P?aj'

    for i in str1:
    m = ord(i) ^ 15
    print(chr(m),end='')
    

        PS:再次吐槽一波markdown粘贴python代码得把每行代码都tab才好看,需要跑脚本的把第一行第二行的缩进删除就行!!!!!

  • 相关阅读:
    Markdown学习
    二叉树的最近公共祖先
    javaCompiler简析
    自定义类加载器
    聚合和组合的区别
    拓扑排序
    C++ map和unordered_map
    静态文件加载路径
    文件上传
    jackson
  • 原文地址:https://www.cnblogs.com/aWxvdmVseXc0/p/11902184.html
Copyright © 2011-2022 走看看