一、文件描述
- 正儿八经的apk压缩文件,,
- 可以运行
- 1.28MB
好,,现在开始分析它,,,
二、解题思路
- 首先拿到这个文件,,第一反应是动态运行试试看,,
- 放到genymotion模拟器中运行,,它提示让你输入密码,,参照上图,,
- 随便输入密码试试看,,提示Toast为“try again”。。.
- 这,,,好吧,,
- 然后androidkiller打开,,静态反编译看看源码逻辑,,,
- 提示无法下一步源码反编译。。。这。。。。
- 好吧,转战JEB。。。
- 下图是JEB打开后的目录结构。。
- 可以看到MainActivity中有两个敏感的方法,,“checkPassword”和“getFlag”,,然后我们在Disassembly窗口中按【Tab】键来查看源码。。。
- checkPassword这个方法应该是判断程序入口我们输入的password是否正确,,如红色方框所示,,它里面做了一个equal判断,真正的判断的对象是从getFlag()中获取到的。
- 从getFlag中获取到String并且还reverse后再进行解密处理。
- getFlag()方法中获取字符串是一串编号“0x7F0B0020”,,,后面有注释,
- 就是这样一个字符串。。。
- 当然如果没有注释,,另一种方法就是根据resourceID来找到对应的字符串,,,,
- 由于是转到“Resource”目录下(也就是R目录),,找到id为‘0x7F0B0020’的字符串对应为toString,,
- 往上翻可以看到toString所在方法为String,,
- 从而我们去资源Resource里面找到value目录下得Strings.xml配置文件,,,这个文件存放着Android对字符文字的属性配置,,有疑惑的小伙伴可以去补下功课哦,,
- 从而我们在strings.xml文件的最后一行找到了toString对应的value、、、见下图
- 第10步中说过,,程序对这个字符串先做了一个reverse(),然后做了一个base64解密处理,,也就是说,,,我们得到的这个字符串是先经过加密后再reverse的。。。
- 二话不说,开始解密
- reverse后的字符串为“ZmxhZ3tIZXIzX2k1X3kwdXJfZjFhZ18zOWZiY199”
- base64解密后为“flag{Her3_i5_y0ur_f1ag_39fbc_}”
- 结束,,,FLAG——flag{Her3_i5_y0ur_f1ag_39fbc_}
- 注:上图用的解密工具为cyberchef,,,具体用法不介绍啦,反正很强大。。。
- 愉快的周末,,明天又是新的一周哇!!!