栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

XCTF

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

XCTF

题目信息,一个apk,一句提示。

提示信息为:flag格式为flag{}

首先下载apk

毕竟是第一题,应该不会多难,直接静态分析应该可以。

看smali代码没有看java代码痛快,还是决定反编译为jar包来看。

修改apk后缀名为zip,解压:

 结构很简单,我们使用dex2jar将dex文件反编译为jar文件:

然后就可以使用jd-gui查看java代码了。jar包中有多个类,我们直接看MainActivity类的构造函数:

 构造函数中,看到“验证通过”“验证失败”两个字符串,且分别在以if判断的两个分支中,所以重点是这个if判断。

if判断的条件为cyberpease.CheckString函数的返回值,该函数的参数为一个控件的文本:

 搜索这个控件的ID,为editText,猜测这里的参数应该就是我们输入的字符串

 查看cyberpease.CheckString函数代码,发现在jar包中该函数体为NULL。但函数名中出现了一个关键字:native。说明这是个native函数。

我们到apk解压后的目录下的lib目录内找cyberpeace库文件,可以看到有四个指令集的版本

 分析任何一个版本的都可以,这里我们分析x86版本的cyberpeace库:

 用IDA打开,从函数列表中可以看到我们要找的函数CheckString

 在IDA中对这个函数的代码进行反编译

代码整个流程为:通过两循环对输入的字符串进行变形,然后通过strcmp与字符串“f72c5a36569418a20907b55be5bf95ad”进行比较。

最终字符为32个字符,猜测输入字符串也为32个字符。

第一个循环将前16个字符和后16个字符调换顺序。

第二个循环遍历32个字符,以两个字符为单位,调换两个字符的顺序。

这两个变换都是可逆的,为了得到输入字符串,我们对最终的结果字符串执行逆变换:

首先针对第二个循环,将最终的字符串以两个字符为单位,调换两个字符的顺序:

f72c5a36569418a20907b55be5bf95ad  --> 7fc2a5636549812a90705bb55efb59da

然后针对第一个循环,将前16个字符和后16个字符调换顺序:

7fc2a5636549812a90705bb55efb59da  -->  90705bb55efb59da7fc2a5636549812a

根据题目的提示,flag格式为:flag{}。即可得到最终结果。

欢迎关注我的微博:大雄_RE。专注软件逆向,分享最新的好文章、好工具,追踪行业大佬的研究成果。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/462681.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号