移动安全(三)|一道CTF题的apk逆向实战

  • A+
所属分类:逆向工程

0x00 @[email protected]#~#$

MaoXH(胡小毛)Android逆向之路系列又来了,本次他分享了一道CTF题的逆向详细过程,希望有缘人能够有所收获~

0x01 开整~

实验环境:雷电模拟器+AndroidStudio+androidKiller+jad-gui

目标apk:

 

移动安全(三)|一道CTF题的apk逆向实战


目的:获取inputflag

移动安全(三)|一道CTF题的apk逆向实战


  • 第一步:安装apk&&反编译

首先将111.apk安装在雷电模拟器上,并且将apk拖入androidKiller反编译(习惯性操作,没有为什么)

移动安全(三)|一道CTF题的apk逆向实战

移动安全(三)|一道CTF题的apk逆向实战

  • 第二步:分析如何获取inputflag

思路:首先打开apk,发现一打开就启动了input flag页面,点击go ,弹框Failed

然后获取当前页面的activity(adb shell dumpsys activity | findstr"mFocusedActivity"),也可以借助一款工具

移动安全(三)|一道CTF题的apk逆向实战

找到当前activity对应的smali代码,由于我是点击GO!才会有回显提示failed,说明这个获取flag应该是和点击按钮事件关联,找到点击事件onGoClick(),分析其逻辑代码:

移动安全(三)|一道CTF题的apk逆向实战

由于smali代码看起来不太明了,其实是我太菜,看不大懂smali整体逻辑,此时不要紧,然后打开jad-gui工具反编译我们的111.apk,分析onGoClick()处的代码逻辑:

移动安全(三)|一道CTF题的apk逆向实战

分析知道,点击的时候调用了getFlag()函数并对其加密,然后和encrypt()后的paramView(我们输入的字符)进行比较(同样加密),相等就返回true,否则返回true.

由此可知,我们只需要获取getFlag()函数结果和encrypt()处理我们输入的字符串逻辑即可反向解密获取flag.

  • 第三步获取getFlag()的值

然后我们打开AndroidKiller的smali语法,修改我们最后点击弹框后返回的Failed为 待获取的getFlag()值,即如图:

移动安全(三)|一道CTF题的apk逆向实战

然后我们保存,回编译,运行app,发现成功获取到getFlag()的值,之后我们只需要理解了encrypt()函数逻辑就大功告成。

移动安全(三)|一道CTF题的apk逆向实战


接着我通过分析查看Java代码得知encrypt()的逻辑写在so层,因此无法在smali代码再继续分析,而由于目前我还不大会使用ida对so代码分析,因此我采用另外一种方式来继续探讨,忘了说,其实getFlag()代码也放在了so文件中。

所以我打算采用动态分析来查看encrypt()的逻辑,也即手动分析下其写的逻辑,可能不成功,但这是我目前唯一的手段去获取encrypt()的逻辑。

 

重要:我们动态调试一定不要忘了application中的android:debuggable="true",如果没有,手动添加上。


  • 第四步:分析encrypt()的逻辑

首先我们将反编译后的111.apk的project导入到AndroidStudio中(后面我简称为AS),然后导入插件smalidea,配置好jdk和配置mark source  as 为root,以及配置远程调试端口为8700,然后打开apk,获取当前apk进程的进程号(adbshell ps),以及转发端口(adb forward tcp:8700 jdwp:2345),其中jdwp后的端口号为我们获取的进程pid,然后下断点在onGoClick()处,AS中启动调试

移动安全(三)|一道CTF题的apk逆向实战

移动安全(三)|一道CTF题的apk逆向实战

然后我在apk启动页面输入23456789ab来判断点击后encrypt()的逻辑,然后点击GO!,发现成功的在onGoClick()处断掉,然后我一步步调试:

移动安全(三)|一道CTF题的apk逆向实战

由此得出encrypt()作用就是对输入的字符串的ascill码减一操作,

由此我们就可以将getFlag()的值的ascill码自增一,即可完成最终的inputflag的获取,由此终于大功告成。

0x02 一气呵成,到此结束~

MaoXHAndroid逆向之路还在继续,我们继续期待下一次他的学习成果,一起加油、共勉~

往期经典推荐:

----------------------------------------------------------------------

深入探究浏览器编码及XSS Bypass

“最后”的Bypass CDN 查找网站真实IP

漏洞笔记(一)|记一次与XXE漏洞的爱恨纠缠

漏洞笔记(二)|利用Excel进行XXE攻击

渗透实战(一)|BSides Vancouver 2018 (Workshop)

移动安全(一)|Android设备root及神器Xposed框架安装

移动安全(二)|APK打包流程及签名安全机制初探


>>关于我们:

WhITECat安全小组隶属于起源实验室分支安全小组,主要致力于分享小组成员技术研究成果、最新的漏洞新闻、安全招聘以及其他安全相关内容。团队成员暂时由起源实验室核心成员、一线安全厂商、某研究院、漏洞盒TOP10白帽子等人员组成。

欢迎各位大佬关注^_^

移动安全(三)|一道CTF题的apk逆向实战




 

 

 


发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: