2021-01-24

Bugku-CTF-阿里Timer

可以先拖到模拟器里面去看看效果
在这里插入图片描述

等200000秒,有时间的可以尝试一下

拖进androidkiller里面看下
在这里插入图片描述
这就是smali代码,就相当于一种新的语言。看不懂也不要紧,点击java标志就可以切换为java代码。
在这里插入图片描述

在这里插入图片描述
第一张图片中beg = (int)(System.currentTimeMillis() / 1000L) + 200000;
这就和之前的200000秒对上了
oncreat就是函数的入口
注意run函数下的三行代码
MainActivity.this.t = System.currentTimeMillis();
MainActivity.this.now = ((int)(MainActivity.this.t / 1000L));
获得系统的时间,再进行运算。
MainActivity.this.t = (1500L - MainActivity.this.t % 1000L);
这里的t上面的t不同,指的是这200000次运行的时间间隔
if (MainActivity.this.beg - MainActivity.this.now <= 0)
{
paramBundle.setText(“The flag is:”);
localTextView.setText(“alictf{” + MainActivity.this.stringFromJNI2(MainActivity.this.k) + “}”);
这里就是条件beg的值是固定不变的200000秒,而now的值是不断增加的
这就是第一个要改的判断
还一个就是判断成功后的MainActivity.this.stringFromJNI2(MainActivity.this.k)
这里JNI2就是so文件,对k进行计算,如果计算200000次后,k的值是正确的就输出flag,否则必然是错的。
for (localMainActivity.k += 100;; localMainActivity.k -= 1)
{
paramBundle.setText(“Time Remaining(s):” + (MainActivity.this.beg - MainActivity.this.now));
localHandler.postDelayed(this, MainActivity.this.t);
return;
这就是k运算的流程,用JEB2看会清楚一些。

那现在要做就是改判断,打开androidkiller,找到对应的字段
在这里插入图片描述

这个程序比较简单,很快就能找到相应的字段,也可以在左边的搜索框搜索

if-gtz v0, :cond_0这里就是判断条件
改为if-lez v0, :cond_0意思是v0小于等于0,就可以跳过等待了
然后点左上角的编译就可以把代码编译出来了
注意选择合适的apktool,修改完后记得设置为默认。不一定最新的apktool就适用。
安装新的安卓程序就会发现随着时间的变化,输出的flag也在变。
计算k值的代码如下

public static boolean is2(int n) {
        boolean v1 = true;
        if(n > 3) {
            if(n % 2 != 0 && n % 3 != 0) {
                int v0 = 5;
                while(true) {
                    if(v0 * v0 <= n) {
                        if(n % v0 != 0 && n % (v0 + 2) != 0) {
                            v0 += 6;
                            continue;
                        }
 
                        return false;
                    }
                    else {
                        return v1;
                    }
                }
 
                return false;
            }
 
            v1 = false;
        }
        else if(n <= 1) {
            v1 = false;
        }
 
        return v1;
    }
 
 
 
 if(MainActivity.is2(MainActivity.this.beg - MainActivity.this.now)) {
                    MainActivity.this.k += 100;
                }
                else {
                    --MainActivity.this.k;
                }

 public static boolean is2(int n) {
        boolean v1 = true;
        if(n > 3) {
            if(n % 2 != 0 && n % 3 != 0) {
                int v0 = 5;
                while(true) {
                    if(v0 * v0 <= n) {
                        if(n % v0 != 0 && n % (v0 + 2) != 0) {
                            v0 += 6;
                            continue;
                        }
 
                        return false;
                    }
                    else {
                        return v1;
                    }
                }
 
                return false;
            }
 
            v1 = false;
        }
        else if(n <= 1) {
            v1 = false;
        }
 
        return v1;
    }
 
 
 
 if(MainActivity.is2(MainActivity.this.beg - MainActivity.this.now)) {
                    MainActivity.this.k += 100;
                }
                else {
                    --MainActivity.this.k;
                }

加得到的k值1616384添加到smali文件中
在这里插入图片描述
再次编译打包运行,即可得到flag

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值