使用jeb进行反编译成java代码,MainActivity为程序的入口,首先对这个部分进行查看,找到了输出flag的地方。
对程序进行分析
this.beg = (((int)(System.currentTimeMillis() / 1000))) + 200000;beg为一个定值,在上面代码的run()函数中,k是可以变化的
MainActivity.this.t = System.currentTimeMillis();
MainActivity.this.now = ((int)(MainActivity.this.t / 1000));
给出了now的赋值,从程序的运行来看,beg在now初始赋值后应该比now大了200000,now代表的是程序运行的时间,当now变化了200000的时候,也就是说beg小于now的时候,会进入设置flag的地方。
也就是说,程序一开始k是变化的,flag的值并没被设置,只有当beg==now的时候,flag会被设置并显示,然后到下面k可能还会变化,那么这个被设定的初始flag可能就是我们要拿到的flag了。
直接根据k的变化部分的函数进行模拟,算出进行了200000s之后的k值:
public class test{
public static boolean is2(int arg4) {
boolean v1 = true;
if