-
-
[原创]安卓CTF题
-
发表于:
2019-6-7 21:33
10383
-
将目标文件,安装至夜神模拟器,打开后界面如图:
应该是某年的ctf大赛题。
随便输入序列号,弹出如下错误提示:
用AK打开,搜索字符串 “错误”,发现并没有找到
转换为Unicode ,搜索可以找到字符串,得知改字符串,在a.smail文件中调用
反编译对应的java文件,我们发现,影响程序执行流程的函数为
check()
如下图:
继续搜索check()函数,可以发现在M.smail文件中定义
同理转到M.smail对应java文件,发现check函数的实现为以下代码:
我们现在对这个函数进行分析。
首先第一个判断为:
原以为程序都完try块,没有产生异常,是会走final或者继续往下走,可是单单给前边几个初始化,并不能完成16个字节的校验,而且下面只进行了一次判断就退出,难道不应该是循环吗?
为了证明我的猜想,我进行了动态调试,发现程序确实走到了catch块
那么,我们继续往下分析,第二个判断
相比于OD的动态调试来说,这个还是很简单的,因为Android Studio 界面太大,切图太占地方,我将注释写在了每一行的smali代码上面
对应的smali为:(详细分析已注释)
通过上述代码,我们可以得知
要想让代码正确,我们需要让下列条件满足
我们先提取arrayOfInt数组,提取后的值为(C语言):
str1,也就是密码表为
整体逻辑 可以表述为以下C代码:
打印结果为:blow,in the winD
尝试一波:
bingo!
(因为逆向安卓程序的经验并不多,错误之处,忘大佬们指正),不知道能不能发程序,所以有想要入手分析的小伙伴可以私信我
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2019-6-18 08:14
被Kalendsi编辑
,原因: