CVVD首届车联网漏洞挖掘赛决赛-猜对密码算我输APP逆向

2021-首届CVVD车联网漏洞挖掘赛,唯一一道没出的APP,终于在某年某月突然想起来,求助逆向群大手子Yenkoc👴,Yenkoc👴很牛逼,一眼看出了在哪验证的密码,让我有了方向,出题人太狡猾了,搁这修改字符串,要不是被逼到没办法,Hook了一下才发现猫腻,特此记录。再次感谢Yenkoc👴大手子。Yyds了属于是

题目链接:https://pan.baidu.com/s/1ILLRwMhOKu4eSj5fqn2qDw
提取码:c2zc

​ 如图,要求输入5位数密码,但是事实只能输四位,也就是说除了修改APK重新打包,要是里面加一些验证,我直接寄了,只能用其他办法出。

主体结构,其中PasscodeView负责将界面输入转换出密码字符串,之前一直没找到,还是得yenkoc👴。

这里有一些串初始化,其中要格外注意D 和 E和底下的getString操作

再往底下看

我们尝试Hook验证猜想

这里推荐大家一款很牛逼的Hook工具 曲境 https://github.com/Mocha-L/QuJing

这里我输入1234,则返回1234 String类型,验证猜想1,剩下就是获得D 和 E 。然后爆破密码了

​ 先获取D,我们直接Hook Base64的decode方法,得到D未解码的串,注意这里输出是我故意base64编码过的,因为D本来就是Byte[]类型,而且是由很多不可见字符组成的

然后获取E,这里我寄了一万年,爆不出来,因为我一直以为E就是"flag{ttimasdf ♥ CICV}";,突然想到D 和 E是不是被修改过,返回去,HOOK前面这个位置。

返回下再进去查看调用结果

发现E被改动了,这下可以爆破了。

import org.bouncycastle.util.encoders.Base64;

import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

public class pin {
    public static void main(String []args) throws NoSuchAlgorithmException, UnsupportedEncodingException {

        byte[] D = Base64.decode("gJS0W9K9X3cG3r9yxQ19c7yivCqkEdauPde04kNMQEM=");
        String E = "cicvtonggegege!!~";
        for(int a = 0;a<=9;a++){
            for(int b = 0;b<=9;b++){
                for(int c = 0;c<=9;c++){
                    for(int d = 0;d<=9;d++){
                        for(int e = 0;e<=9;e++){
                            String v0 = a +""+ b +"" +c +""+d+""+e +"";

                            MessageDigest v3_1 = MessageDigest.getInstance("SHA-256");
                            v3_1.update(E.getBytes("GBK"));
                            v3_1.update(v0.getBytes(StandardCharsets.UTF_8));
                            boolean v3_2 = Arrays.equals(v3_1.digest(E.getBytes(StandardCharsets.UTF_8)), D);
                            if(v3_2 == true)
                                System.out.println("right" + v0);

                        }
                    }
                }
            }
        }

    }
}

得到密码38558

返回到这准备直接Hook出flag的方法

手机界面

posted @ 2021-08-01 00:04  LLeaves  阅读(382)  评论(0编辑  收藏  举报