Timer是移动端的第一题,难度比较小,看看java就行了
题目背景是初始化200000秒时间,过了这个时间flag就会出来,我们不可能能等这么久,所以需要手动去逆向出来
[Java] 纯文本查看 复制代码 int beg = (((int) (System.currentTimeMillis() / 1000)) + 200000); 取当前时间转为秒为单位并加上20w秒
[Java] 纯文本查看 复制代码 final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
MainActivity.this.t = System.currentTimeMillis();
MainActivity.this.now = (int) (MainActivity.this.t / 1000);
MainActivity.this.t = 1500 - (MainActivity.this.t % 1000); //1500减去当前时间的秒数除以1000的余数
tv2.setText("AliCTF");
if (MainActivity.this.beg - MainActivity.this.now <= 0) { //当20w秒到达时,进入此判断
tv1.setText("The flag is:");
tv2.setText("alictf{" + MainActivity.this.stringFromJNI2(MainActivity.this.k) + "}"); //由于此处k值是参与运算的,所以不能直接修改秒数强制进入判断条件,计算出k后传入native
}
MainActivity mainActivity;
if (MainActivity.is2(MainActivity.this.beg - MainActivity.this.now)) {
mainActivity = MainActivity.this;
mainActivity.k += 100;
} else {
mainActivity = MainActivity.this;
mainActivity.k--;
}
tv1.setText("Time Remaining(s):" + (MainActivity.this.beg - MainActivity.this.now));
handler.postDelayed(this, MainActivity.this.t); //等待t时间后进入下一次循环
}
}, 0);
is2函数代码
[Java] 纯文本查看 复制代码 public static boolean is2(int n) {
if (n <= 3) {
if (n > 1) {
return true;
}
return false;
} else if (n % 2 == 0 || n % 3 == 0) {
return false;
} else {
int i = 5;
while (i * i <= n) {
if (n % i == 0 || n % (i + 2) == 0) {
return false;
}
i += 6;
}
return true;
}
}
其实is2完全可以忽略,只需要考虑onCreate方法中的函数即可
由于代码没混淆,我直接尝试重新编写了个app,添加了多个log,打印了t的值,实测发现t几乎约等于1s,相当于每过一秒进行一次循环,其实这也没什么鸟用,估计就是为了防止线程堵塞,真正计算时完全可以忽略
尝试按照他的逻辑复制函数,
[Java] 纯文本查看 复制代码 static int beg =(( (int) (System.currentTimeMillis()/1000))+200000);
static int now;
static long start = System.currentTimeMillis();
static int k =0;
static long med =0;
static int g =0;
public static void main(String[] args){
System.out.println(start%1000);
while (true){
start +=med;
now=(int)(start/1000);
med =1500-start%1000;
// System.out.println(med);
if (beg - now <=0) {
System.out.println(k);
break;
}
if(is2(beg-now)){
g=k;
k+=100;
}else {
g=k;
k--;
}
};
}
计算结果k=1616384
传入native,得到flag
|