-
-
[原创]交响曲wp
-
2018-12-9 16:02 2699
-
看了题目要求(安卓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
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法