修改页面后获得flag_逆向基础题五:获取Flag
划重点:关注公众号,后台回复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相关推荐
- 修改页面后获得flag_互动征集丨是时候为2021立flag了
2020马上就要过去了 今年的flag各位小伙伴实现了多少? 翻出了生灰的flag擦擦 说不定2021还能接着用哦 2020年就要过去了 还记得你在年初立下的那些Flag吗? 减肥 "明天我 ...
- 语言的顺序表的合拼_2020语文中考专题五:语言运用和综合性学习。掌握基础题五种题型...
提炼概括题 概括类型题,作为中考试卷中的重点题型,实际上着重考查考生的思维能力和语言表达能力.从试卷分析情况来看,在语言运用题和现代文阅读的相关考点中,考生的提炼概括能力是相对薄弱的,这会造成较多失分 ...
- 苹果8plus什么用计算机,【苹果iPhone8Plus评测】iOS 11:基础分满分后它要做附加题-中关村在线...
iOS 11:基础分满分后它要做附加题 iOS 11:基础分满分后它要做附加题 每次新的iPhone发布的日子,也是iOS系统重大更新的日子.正是因为这一策略,让使用不同iPhone手机用户对于新系统 ...
- designer.cs 删除后怎么恢复?(复制aspx修改名字后重新生成页面)
项目需要,经常拷贝页面过来修改,老是遇到页面出各种问题,对常见问题总结如下: 1.修改页面命名空间: <%@ Page Language="C#" AutoEventWire ...
- Vue 数组删除和修改元素后页面立即刷新
需求:页面立即刷新 vue 页面点击删除和修改后,数据不能够立马刷新,原因很简单:点击页面操作,分别调用删除和修改的后台方法成功后数据库数据是成功了,但是前端页面并没有拿到删除数据后的新数组和修改数据 ...
- 解决: idea 修改 jsp 后,页面刷新无效
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. idea 修改 jsp 后浏览器访问无效. 解决:进入 idea 配置 修改部署方式: 修改 更新文 ...
- 使用nginx代理网页,修改页面更新后,页面内容不变。停止nginx后,发现页面仍然可以访问。
我把一个页面的内容改变后,刷新页面,发现页面内容不变,我刚开始猜测是因为:页面已经在浏览器中缓存了,所以访问的页面仍然是以前的页面. 我通过以下方法直接清除浏览器缓存,却发现页面仍然是以前的内 ...
- web前端学习之——页面美妆师css3基础篇
页面美妆师css3基础 结构(html)与样式(css)相分离 1.css基本语法规范 1.1 行内式(内联样式) 是通过标签的style属性来设置元素的样式 <标签名 style=" ...
- java面试基础题整理(二)
java面试基础题整理 文章目录 java面试基础题整理 前端技术(HTML.CSS.JS.JQuery等) 在js中怎么样验证数字? js中如何给string这个类型加方法? 谈谈js的定时器? 请 ...
- 又是一年毕业季,这百道前端面试题你都会了嘛(基础题+2套简历模板)
文章目录 前言 一.HTML.CSS 相关 二.Javascript 相关 总结 前言 又到一年的毕业季了,大家都找到心仪的工作了吗?小牛马特此整理了百道前端面试基础题,对想要成为前端开发工程师的你一 ...
最新文章
- MapReduce运行原理和过程
- ruby简单的基础 4
- Java黑皮书课后题第6章:**6.24(显示当前日期和时间)程序清单2-7显示当前时间。改进这个例子,显示当前的日期和时间。程序清单6-12中的日历例子可以提供一些如何提供如何求年月日的思路
- BZOJ-2298|区间dp|线段树
- Java程序员的典型工作过程有哪些_Java程序员都要经历哪些阶段
- sed for windows 双引号内部内容的替换
- 【IoT】基于NB-IoT的CoAP协议浅析
- python白鹅类型_fluent python 11.10节 鹅的行为有可能像鸭子
- 如何在前端删除项目中的文件_如何在macOS上恢复已删除的文件
- 基于CentOS7.2安装Kubernetes-v1.2
- 动手实现MVC: 4. AOP的设计与实现
- 智能家居蓝海 如何才能破解“外热内冷”的尴尬?
- python打开excel大文件慢,excel内容很少,文件却很大,怎么解决:python处理excel文件...
- DL notes 05:深度学习相关的优化基础(入门级)
- 如何关闭伽卡他卡的开机自启
- 【笔记】创新思维工作坊(一)
- 【ACWing】1129. 热浪
- STM32学习笔记--DAC
- Python数据分析高薪实战第八天 数据计算统计与分析
- 28岁实现财务自由,网友:打扰了
热门文章
- 文件上传到部署服务器(添加附件)
- 探讨VSTS联合MS PROJECT协同开发之三:比较篇
- SQL查询效率-100w数据查询只要1秒
- 1.《Spring学习笔记-MVC》系列文章,讲解返回json数据的文章共有3篇,分别为:...
- Rust语言开发基础(二)开发环境安装
- android 名称解释
- python文本分类评价指标 top1如何计算_推荐算法评价指标
- 正则匹配字符串无匹配不到_10. 正则表达式匹配
- 发送HTTP请求返回415状态码的解决办法
- C# list常用的几个操作 改变list中某个元素的值 替换某一段数据 删除集合中指定对象