首页
论坛
课程
招聘
[原创]交响曲wp
2018-12-9 16:02 1720

[原创]交响曲wp

2018-12-9 16:02
1720

看了题目要求(安卓8.0顺利运行),以为sdkver是27,为了做这道题,还特地买了台亲儿子pixel,刷上了安卓9.0,下载到了题目,折腾了半天反编译工具,浪费了1个多小时配置环境,结果发现sdkver是14,我的nexus5也能跑。

打开了jeb开始分析。


首先OnCreate里会初始化成功后会输出的字符串的数组。

同时发现了其他的全局数组


按下按钮之后会来到


我们先看函数c


看起来是个年份,根据a()中不为0的判断,限定了必须在1984-2006年之间


之后根据e(),f(),g()内代码可知

输入的年月日最终作为全局int数组d c b的下标

看之前的函数d()


根据if(this.i == 1 || this.i == 4 || this.i == 5 || this.i == 7 || this.i == 10 || this.i == 11 || this.i == 12)得知剩下的月份可能性为2 3 6 8 9,但如果年份为1999,那么年月日+m中的下标的值将大于34,那么判断月份不能为以上月。

if(this.j <= 1994 && (this.i == v4 || this.i == v3 || this.i == v2))

if(this.j >= 1996 && (this.i == v4 || this.i == v3 || this.i == v2))

得出年份必须为1995。

从数组c中按可能的月份从小往大找,并通过代码

int v4 = 2;

约束日期找可能的数值。

已知1995代入函数e()得出的值为7,回到开始的地方

this.a(this.e() + this.f() + this.g() + this.h());


继续排除不可能的月份3 6 8,函数a中只要满足v1=34即可通关,同时根据上面d()中的条件,月份和日期不能相等,并且日期不能大于月份+2,得出月份为2月,剩下的可能不多了,直接遍历一下得出答案1995 02 03 05to07


【看雪培训】目录重大更新!《安卓高级研修班》2022年春季班开始招生!

收藏
点赞2
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回