【2023】春节解题领红包三

查看 58|回复 5
作者:梦旅意中人   
前言在开始阅读本解析前,强烈建议去看看 正己 大佬的Android教程帖https://www.52pojie.cn/thread-1695141-1-1.html,写的肥肠滴好,B站也有对应教程,相信认真看完之后一定会有所收获,并且可以很快解出Android的初级题。如果依旧没有思路,再来看看这篇解析也不迟。工具NP管理器/MT管理,JEB(考虑到各位有的坛友没有开通MT会员,所以用NP管理器平替也是可以的)分析安装App后打开,看到如下界面,点击一下按钮还会发出声音(开庭记得带上你的App哈哈哈),点击按钮页面次数增加,也就是需要点击999次才可能出现我们想要的东西。如果有一些Android基础的话,可以知道这里就是我们一个应用的MainActivity,使用MT管理器的Activity记录也会得到同样的结果,这就意味着我们要分析的代码就在这个类中。


image-20230203135433828.png (27.79 KB, 下载次数: 0)
下载附件
2023-2-6 10:45 上传

方法一手动或者使用模拟点击工具,点它999次必然可以出结果。虽然这样很容以可以拿到flag,但是这有悖于我们参与活动的初衷,当然还是要学习的嘛。方法二使用NP/MT管理器进行分析,这里以NP管理器为例,MT管理器操作同理,首先打开NP管理器,选择安装包提取。


image-20230203140125541.png (154.09 KB, 下载次数: 0)
下载附件
2023-2-6 10:45 上传

点击对应的应用,选择提取安装包。


image-20230203140216155.png (150.11 KB, 下载次数: 0)
下载附件
2023-2-6 10:45 上传

定位到提取后的安装包目录,点击应用可以看到包名、签名信息等一系列的信息。这里需要注意一点的是,现在很多App都有签名校验,如果修改了代码就会造成签名不一致导致应用无法打开, 因此我们需要先确定一下以保证后续的进行,当然这一步在修改完代码之后再进行也是可以的。


image-20230203140403923.png (113.07 KB, 下载次数: 0)
下载附件
2023-2-6 10:45 上传

我们直接点击功能,然后选择APK签名,安装后发现可以正常打开,我们继续向下分析。


image-20230203141321663.png (109.63 KB, 下载次数: 0)
下载附件
2023-2-6 10:45 上传

因为没有签名校验,这里使用原来的包或者刚签名的包都可以,根据主页面的请点击999次,从这个999入手吧,在安装包上点击查看,可以看到这个应用的整个内部信息,这里我们需要关注的是classes.dex这个文件。


image-20230203143228074.png (117.94 KB, 下载次数: 0)
下载附件
2023-2-6 10:45 上传

点击classes.dex,选择Dex编辑Plus,选择搜索栏


image-20230203143637166.png (52.8 KB, 下载次数: 0)
下载附件
2023-2-6 10:45 上传

这里选择发起新搜索,输入0x3e7 (也即是10进制的999),在搜索类型中选择整数,如果直接选择999在NP管理器来搜索的话,是没有结果的。


image-20230203143846408.png (48.99 KB, 下载次数: 0)
下载附件
2023-2-6 10:45 上传

但在MT管理器中可以直接选择搜索999,因为MT管理器对搜索做了优化,所以可以直接搜索,但是考虑到后边要用反编译功能功能,不一定都有开通会员,所以大家可以自行选择两个结合来分析,或者是使用其中一个也可以。此处为MT搜索时的截图。


image-20230203144614868.png (54.25 KB, 下载次数: 0)
下载附件
2023-2-6 10:45 上传

搜索结果如下图,这里直接点进去进入第三个就行,如果有印象的话,这是App的包名,并且之前提到的MainActivity类也在这里。


image-20230203144829826.png (62.94 KB, 下载次数: 0)
下载附件
2023-2-6 10:45 上传

点击进入可以看到对应的Smali代码,看起来就像我们使用OD分析的汇编代码一样,点击右上角的菜单栏,选择转成Java


image-20230203145322894.png (136.53 KB, 下载次数: 0)
下载附件
2023-2-6 10:45 上传

在这里可以很清晰的看到App的主要逻辑,以及点击按钮会发出声音的相关方法,感兴趣可以向上翻阅。这里重点来看一下我们看到的999,MainActiviy会调用一个check()方法,check()中会返回当前全局变量num的值,而按钮被添加了监听事件,每次点击都会修改num使文本框的值发生改变,最会被调用时会返回num的值,判断我们是否真的点击了999次,之后弹出去论坛领取CB的提示,以及在文本框显示flag,这里的“hnci}|jwfclkczkppkcpmwckng”并不是最终答案,因为它被作为参数传入了decrypt()方法中,我们可以继续分析decrypt()方法,或者改变程序逻辑,只要点击1次让最终的flag显示出来即可。这里直接修改check方法让其返回999即可。


image-20230203150404826.png (213.78 KB, 下载次数: 0)
下载附件
2023-2-6 10:45 上传

返回到Smali代码中,找到check()方法,在其返回值上方插入一行代码,const/16, v0,0x3E7, 表示将999赋值给寄存器v0


image-20230203152409836.png (137.61 KB, 下载次数: 0)
下载附件
2023-2-6 10:45 上传

关于smali用法可以在右上角三点的菜单栏选择Smali语法查询,或者查阅相关资料。


image-20230203152804311.png (185.35 KB, 下载次数: 0)
下载附件
2023-2-6 10:46 上传

修改完成后退出,依次选择保存并退出。由于NP管理器已经进行自动签名,因此直接选择安装即可。此时打开App,点击一次按钮即可获取flag。


image-20230203154121676.png (38.23 KB, 下载次数: 0)
下载附件
2023-2-6 10:46 上传

方法三使用JEB来进行分析,原本是采用Android Killer来分析的,但出现了很多问题,论坛搜索后得知建议使用JEB工具,起初对新的工具是有些抗拒的,会觉得难,但是使用之后,只能说境泽定律诚不欺我,真香。在JEB中打开应用,出现弹窗选择ok即可,之后等待分析完成。


image-20230203154639327.png (155.76 KB, 下载次数: 0)
下载附件
2023-2-6 10:46 上传

由于已经确定了关注的代码在MainActivity中,因此在左下角的窗口中双击即可。为了更清晰的了解代码逻辑,在当前窗口右键选择Decompile,点击ok后即可查看源码。


image-20230203155034791.png (201.6 KB, 下载次数: 0)
下载附件
2023-2-6 10:46 上传

在右侧窗口中除了源码以外,很容易就可以看到flag,这是源于JEB强大的字符串解密功能,可以轻松还原某些字符串加密前的内容。


image-20230203155758472.png (235.65 KB, 下载次数: 0)
下载附件
2023-2-6 10:46 上传

下载次数, 下载附件

lovekezi   

优秀,感谢分享
huzp   

教程很详细了,不错,值得学习
侃遍天下无二人   

写得挺详细的,不过都看了我的教程,初级题不是都应该没问题吗?
另外可以学习一下Markdown语法,写帖子更优美
El28PoJie   


正己 发表于 2023-2-6 12:46
写得挺详细的,不过都看了我的教程,初级题不是都应该没问题吗?
另外可以学习一下Makedown语 ...

是markdown
huzp   

学会了,谢谢分享
您需要登录后才可以回帖 登录 | 立即注册

返回顶部