吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7939|回复: 12
收起左侧

[Android CTF] 2016 Alictf Android Timer Writeup

[复制链接]
qtfreet00 发表于 2016-6-12 13:46
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

QQ截图20160612134729.png



免费评分

参与人数 1热心值 +1 收起 理由
wnagzihxain + 1 不错

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

GoldsNow 发表于 2016-6-14 21:06
我用八门神器 当外挂 加速50倍  硬生生 将时间搞到零 发现FLAG是错的 当时那个泪。。
feng3593 发表于 2016-6-12 15:07
就爱玩玩 发表于 2016-6-12 15:44
蓦留 发表于 2016-6-12 17:18
前排学习
mmmmar 发表于 2016-6-13 16:56
这是个比赛吗
Hmily 发表于 2016-6-14 17:14
实例呢?直接看你写的不知道是要干嘛,先描述下要干嘛呗?
头像被屏蔽
兼职逆向 发表于 2016-6-15 12:14
提示: 作者被禁止或删除 内容自动屏蔽
liu123456 发表于 2016-6-16 09:12
老大,你好,能请你帮解决一个问题,愿以¥,表示感谢。老大,请你看到信息后回复下,好吗?
头像被屏蔽
冷丝 发表于 2016-6-16 16:05
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-20 01:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表