划重点:关注公众号,后台回复crackme,获得本题apk~

题目来源:

2016 ZCTF Android题

题目:

安装包是5.apk,要求获得flag

知识点:

Frida/objection、IDA dump内存、图片隐写

解题过程:

首先说明下Frida的使用可以参考“逆向基础十九:Android之Frida框架”这篇文章。

IDA dump内存的方法可以参考“逆向基础二十一:ART环境下使用IDA脚本脱壳”这篇文章。

安装APK并运行,用户名已自动填好,我们随机输入密码,提示“Auth Fail”,根据字符串找到如下代码。调用auth方法判断验证是否成功,auth有两个核心参数,一个是将用户名和密码拼接的字符串作为input,另一个的databaseopt方法的返回值作为passwd。

我们直接上objection获取databaseopt方法的返回值,如下所示,直接出结果。

我们再跟踪auth方法实现,代码如下,对input和passwd调用encrypt进行加密,然后将assets目录下的flag_bin文件字节流与之对比,相等则返回真。

令人欣慰的是解密函数已经帮我们写好了,如下所示。

这样我们可以直接用AndroidStudio写逆向代码,核心代码如下,直接打印密码。

上环境验证如下所示可以直接登录,APP进入另外一个Activity后,一会儿就退出了。继续回到之前分析的代码,auth方法调用成功后,会调用如下openNewActivity方式,且将上面求解出的密码作为参数,而该方法打开app这个Acitivity。

我们利用objection也可以得到如上结论。

下面开始分析app这个Activity。第一步,调用CheckOperatorNameAndroid方法,该方法里创建了个定时器,并调用getTaskId方法,返回值非0会直接kill掉apk。

利用frida先hook下getTaskId方法,如下所示,hook成功,该方法返回非0值,导致apk直接退出。

我们利用frida修改getTaskId返回值为0,此时APK进入如下界面。

继续分析app这个Activity的OnCreate函数,第二步调用native的add函数,如果返回1,也会apk退出,查看so中add函数,它调用了add_0函数,核心代码如下,检测程序是否被跟踪,如果被跟踪,则会导致apk退出。

OnCreate函数第三步,调用pushthebottom和sayHelloInc方法,其中pushthebottom代码如下,主要是把assets下文件保存到data目录自己的pkg下。

所以我们可以先用frida直接先hook下native函数sayHelloInc,看看什么效果,代码和测试结果如下。

我们先看下native函数sayHelloInc的流程,它是先调用add_0做下环境检测,如果没有被trace,则执行如下核心代码,打开之前pushthebottom方法生成的文件,并利用前面得到的passwd,调用DES_Decrypt对文件在内存中进行解码,解码完free内存。我们可以看出DES_Decrypt的最后一个参数就保存了解码后的信息,第二个参数是长度。

本来我们是打算直接利用frida去hook住native层的Java_com_zctf_app_JNIclass_add_0函数统一过反调试的,如下所示。

但是没有hook成功,根据如下打印发现,Java_com_zctf_app_JNIclass_add_0符号并没有导出,所以无法直接hook到Java_com_zctf_app_JNIclass_add_0,只能hook到Java_com_zctf_app_JNIclass_add,而该函数可以直接在Java层去hook。

因为环境没法同时开frida和ida,此时我们打算直接修改原APK,利用AK工具,删除APK中的反调试代码,最终删除反调试后的代码如下所示。

这时我们利用IDA动态调试so中sayHelloInc方法,首先在如下代码处修改CBZ为CBNZ过反调试。补充说明下CBNZ的机器码是B9,CBZ的机器码是B1,BNE的机器码是D1, BEQ的机器码是D0。

然后运行到DES_Decrypt前,可以看到R1的值,即为解密后文件长度。

接着在free前,我们可以看到R7指向的地址空间开头是个.PNG,说明它是个png文件。

然后我们使用IDA脚本直接dump出这个内存,代码如下。

最后我们利用图片隐写查看神器stegsolve 打开dump.png,点击箭头,查看得到flag,如下所示。

扫码关注,一起学习

修改页面后获得flag_逆向基础题五:获取Flag相关推荐

  1. 修改页面后获得flag_互动征集丨是时候为2021立flag了

    2020马上就要过去了 今年的flag各位小伙伴实现了多少? 翻出了生灰的flag擦擦 说不定2021还能接着用哦 2020年就要过去了 还记得你在年初立下的那些Flag吗? 减肥 "明天我 ...

  2. 语言的顺序表的合拼_2020语文中考专题五:语言运用和综合性学习。掌握基础题五种题型...

    提炼概括题 概括类型题,作为中考试卷中的重点题型,实际上着重考查考生的思维能力和语言表达能力.从试卷分析情况来看,在语言运用题和现代文阅读的相关考点中,考生的提炼概括能力是相对薄弱的,这会造成较多失分 ...

  3. 苹果8plus什么用计算机,【苹果iPhone8Plus评测】iOS 11:基础分满分后它要做附加题-中关村在线...

    iOS 11:基础分满分后它要做附加题 iOS 11:基础分满分后它要做附加题 每次新的iPhone发布的日子,也是iOS系统重大更新的日子.正是因为这一策略,让使用不同iPhone手机用户对于新系统 ...

  4. designer.cs 删除后怎么恢复?(复制aspx修改名字后重新生成页面)

    项目需要,经常拷贝页面过来修改,老是遇到页面出各种问题,对常见问题总结如下: 1.修改页面命名空间: <%@ Page Language="C#" AutoEventWire ...

  5. Vue 数组删除和修改元素后页面立即刷新

    需求:页面立即刷新 vue 页面点击删除和修改后,数据不能够立马刷新,原因很简单:点击页面操作,分别调用删除和修改的后台方法成功后数据库数据是成功了,但是前端页面并没有拿到删除数据后的新数组和修改数据 ...

  6. 解决: idea 修改 jsp 后,页面刷新无效

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. idea 修改 jsp 后浏览器访问无效. 解决:进入 idea 配置 修改部署方式: 修改 更新文 ...

  7. 使用nginx代理网页,修改页面更新后,页面内容不变。停止nginx后,发现页面仍然可以访问。

    ​ 我把一个页面的内容改变后,刷新页面,发现页面内容不变,我刚开始猜测是因为:页面已经在浏览器中缓存了,所以访问的页面仍然是以前的页面. ​ 我通过以下方法直接清除浏览器缓存,却发现页面仍然是以前的内 ...

  8. web前端学习之——页面美妆师css3基础篇

    页面美妆师css3基础 结构(html)与样式(css)相分离 1.css基本语法规范 1.1 行内式(内联样式) 是通过标签的style属性来设置元素的样式 <标签名 style=" ...

  9. java面试基础题整理(二)

    java面试基础题整理 文章目录 java面试基础题整理 前端技术(HTML.CSS.JS.JQuery等) 在js中怎么样验证数字? js中如何给string这个类型加方法? 谈谈js的定时器? 请 ...

  10. 又是一年毕业季,这百道前端面试题你都会了嘛(基础题+2套简历模板)

    文章目录 前言 一.HTML.CSS 相关 二.Javascript 相关 总结 前言 又到一年的毕业季了,大家都找到心仪的工作了吗?小牛马特此整理了百道前端面试基础题,对想要成为前端开发工程师的你一 ...

最新文章

  1. MapReduce运行原理和过程
  2. ruby简单的基础 4
  3. Java黑皮书课后题第6章:**6.24(显示当前日期和时间)程序清单2-7显示当前时间。改进这个例子,显示当前的日期和时间。程序清单6-12中的日历例子可以提供一些如何提供如何求年月日的思路
  4. BZOJ-2298|区间dp|线段树
  5. Java程序员的典型工作过程有哪些_Java程序员都要经历哪些阶段
  6. sed for windows 双引号内部内容的替换
  7. 【IoT】基于NB-IoT的CoAP协议浅析
  8. python白鹅类型_fluent python 11.10节 鹅的行为有可能像鸭子
  9. 如何在前端删除项目中的文件_如何在macOS上恢复已删除的文件
  10. 基于CentOS7.2安装Kubernetes-v1.2
  11. 动手实现MVC: 4. AOP的设计与实现
  12. 智能家居蓝海 如何才能破解“外热内冷”的尴尬?
  13. python打开excel大文件慢,excel内容很少,文件却很大,怎么解决:python处理excel文件...
  14. DL notes 05:深度学习相关的优化基础(入门级)
  15. 如何关闭伽卡他卡的开机自启
  16. 【笔记】创新思维工作坊(一)
  17. 【ACWing】1129. 热浪
  18. STM32学习笔记--DAC
  19. Python数据分析高薪实战第八天 数据计算统计与分析
  20. 28岁实现财务自由,网友:打扰了

热门文章

  1. 文件上传到部署服务器(添加附件)
  2. 探讨VSTS联合MS PROJECT协同开发之三:比较篇
  3. SQL查询效率-100w数据查询只要1秒
  4. 1.《Spring学习笔记-MVC》系列文章,讲解返回json数据的文章共有3篇,分别为:...
  5. Rust语言开发基础(二)开发环境安装
  6. android 名称解释
  7. python文本分类评价指标 top1如何计算_推荐算法评价指标
  8. 正则匹配字符串无匹配不到_10. 正则表达式匹配
  9. 发送HTTP请求返回415状态码的解决办法
  10. C# list常用的几个操作 改变list中某个元素的值 替换某一段数据 删除集合中指定对象