分析:
PS,试试左滑屏幕,随 安装apk尝试左滑,然 发现并不能左滑
反编译找到MainActivity 在最后发现 setUserInputEnabled,
const/4 v0, 0x0
.line 21
invoke-virtual {p1, v0}, Landroidx/viewpager2/widget/ViewPager2;->setUserInputEnabled(Z)V
return-void
随即 改const/4 v0, 0x0 为1
编译安装,发现是可以左滑了,显示一个yylx的手机图,图片可以拖动,肯定不是无意义的,继续分析代码
FoldFragment1就是个图片显示和媒体控制,
重点看第二页FoldFragment2
非常显眼的有个startLongPressTimer
直接长按,看到了提示让找flag,拖来拖去没想明白在哪,继续分析代码:
在startLongPressTimerlambda1中,
找到两段密文:
const-string v3, "hjyaQ8jNSdp+mZic7Kdtyw=="
const-string v1, "cYoiUd2BfEDc/V9e4LdciBz9Mzwzs3yr0kgrLA=="
密文通过TO->db
其中后面一段创了个Toast,应该就是提示flag的那句没跑了,那只需要将上面的密文替换给下面,其实就能获取到结果了。然后获取到结果 xnkl2025!}
此时还没意识到这是不完整的结果,提交好多遍没成功,还私信了大佬...在大佬回复之前,我继续分析代码,果然又找到一段密文,
const-string p4, "2hyWtSLN69+QWLHQ"
使用同样的替换法,就获取到了 “flag{”的开头。
到这里结果已经出来了,但是我想这个题设计目的应该不是这样,
找不应该是这么找,第二页图片转动也不能一点作用没有。
随即,深入分析代码,果然,在FloldFragment2onViewCreatedgestureDetector&1中,onScroll函数中,也就是 上面这段密文所在的函数中,得到了应该的获取方式
invoke-virtual {p1, p2}, Landroid/widget/ImageView;->setRotationY(F)V
.line 58
iget-object p1, p0, Lcom/zj/wuaipojie2025/FoldFragment2$onViewCreated$gestureDetector$1;->this$0:Lcom/zj/wuaipojie2025/FoldFragment2;
invoke-static {p1}, Lcom/zj/wuaipojie2025/FoldFragment2;->access$getA$p(Lcom/zj/wuaipojie2025/FoldFragment2;)F
move-result p1
iget-object p2, p0, Lcom/zj/wuaipojie2025/FoldFragment2$onViewCreated$gestureDetector$1;->this$0:Lcom/zj/wuaipojie2025/FoldFragment2;
invoke-static {p2}, Lcom/zj/wuaipojie2025/FoldFragment2;->access$getB$p(Lcom/zj/wuaipojie2025/FoldFragment2;)F
move-result p2
cmpl-float p1, p1, p2
if-ltz p1, :cond_4
.line 59
sget-object p1, Lcom/zj/wuaipojie2025/SPU;->INSTANCE:Lcom/zj/wuaipojie2025/SPU;
iget-object p2, p0, Lcom/zj/wuaipojie2025/FoldFragment2$onViewCreated$gestureDetector$1;->this$0:Lcom/zj/wuaipojie2025/FoldFragment2;
invoke-virtual {p2}, Lcom/zj/wuaipojie2025/FoldFragment2;->requireContext()Landroid/content/Context;
move-result-object p2
const-string p4, "requireContext(...)"
invoke-static {p2, p4}, Lkotlin/jvm/internal/Intrinsics;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V
const-string p4, "2hyWtSLN69+QWLHQ"
invoke-virtual {p1, p2, p3, p4}, Lcom/zj/wuaipojie2025/SPU;->s(Landroid/content/Context;ILjava/lang/String;)V
.line 63
:cond_4
iget-object p1, p0, Lcom/zj/wuaipojie2025/FoldFragment2$onViewCreated$gestureDetector$1;->this$0:Lcom/zj/wuaipojie2025/FoldFragment2;
invoke-static {p1, v0, v1}, Lcom/zj/wuaipojie2025/FoldFragment2;->access$setL$p(Lcom/zj/wuaipojie2025/FoldFragment2;J)V
return p3
通过滑动设置图片绕Y轴旋转角度,当满足 if-ltz p1, :cond_4
p1不小于0时,就可走入中间解密流程。
至于找的问题,我在SPU->s中发现了这个一个东西
invoke-interface {p1, p2, p3}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;
这不就是将解密后的东西本地存储了么,随即下了个文件管理器,在包目录中找到了xml,并在xml中完整的显示了flag。
自认改动最小,符合设计意图的正确解题方式:
const/4 v0, 0x0
.line 21
invoke-virtual {p1, v0}, Landroidx/viewpager2/widget/ViewPager2;->setUserInputEnabled(Z)V
return-void
改const/4 v0, 0x0 为 const/4 v0, 0x1
进入apk后右滑,将图片旋转一圈,获取到第一个存储值flag{
再长按获取到第二个存储值xnkl2025!} ,再进入包目录,在xml中获取到结果,无需研究算法如何实现,符合初级题目定位~
至此结束