首页
社区
课程
招聘
52pojie2020春节红包-第三题(升级版)暴力破解
发表于: 2020-2-19 15:02 8885

52pojie2020春节红包-第三题(升级版)暴力破解

2020-2-19 15:02
8885

52pojie的2020春节红包第三题:

它是对结果进行倒推,在比较的时候给出结果的明文,导致直接hook就能拿结果;

题目见附件,比52pojie的题目稍微进步了一点,对输入进行操作,需要倒推输入的值,还有个SHA1,导致静态几乎解不了。

这里用frida的主动调用来爆破,直接跑出结果。

 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2020-2-19 15:16 被roysue编辑 ,原因:
上传的附件:
收藏
免费 2
支持
分享
最新回复 (6)
雪    币: 10944
活跃值: (7329)
能力值: ( LV12,RANK:219 )
在线值:
发帖
回帖
粉丝
2
这个狠
2020-2-19 15:09
0
雪    币: 2510
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2020-2-23 13:24
1
雪    币: 242
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
感谢分享
2020-2-25 08:06
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
直接hook verifyPassword方法为true不就行了么
最后于 2020-2-26 17:42 被ChearMG编辑 ,原因:
2020-2-26 17:40
0
雪    币: 3907
活跃值: (5817)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
6
ChearMG 直接hook verifyPassword方法为true不就行了么
那flag是多少呢?
2020-2-26 17:52
0
雪    币: 649
活跃值: (26)
能力值: ( LV4,RANK:46 )
在线值:
发帖
回帖
粉丝
7

这题没有so文件,纯java可以解(可以不用frida,但师傅的frida脚本解法学到了~),主要是复制粘贴jadx-gui反编译Verifier方法,然后修改下传入值,就可以直接爆破(也只能是爆破)
本题对输入字符串进行了加盐操作(salt:主要是为了防止密码过短。本题分别在输入字符串各个位置加了几个字符),然后用sha1加密字符串在与"09042ec2c2c08c4cbece042681caf1d13984f24a"比较

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;


public class MainActivity {
    public static boolean verifyPassword( String input) {//这里修改下传入值
        if (input.length() != 4) {
            return false;
        }
        byte[] v = encodePassword(input);
        byte[] p = "09042ec2c2c08c4cbece042681caf1d13984f24a".getBytes();
        if (v.length != p.length) {
            return false;
        }
        for (int i = 0; i < v.length; i++) {
            if (v[i] != p[i]) {
                return false;
            }
        }
        return true;
    }

    private static byte[] encodePassword(String input) {
        byte[] SALT = {95, 35, 83, 73, 75, 35, 95};
        try {
            StringBuilder sb = new StringBuilder();
            sb.append((char) SALT[0]);
            sb.append((char) SALT[1]);
            for (int i = 0; i < input.length(); i++) {
                sb.append((char) input.getBytes("iso-8859-1")[i]);
                sb.append((char) SALT[i + 2]);
            }
            sb.append((char) SALT[6]);
            byte[] bArr = new byte[0];
            return SHA1(sb.toString()).getBytes("iso-8859-1");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return null;
        }
    }

    private static String convertToHex(byte[] data) {
        StringBuffer buf = new StringBuffer();
        for (int i = 0; i < data.length; i++) {
            int halfbyte = (data[i] >>> 4) & 15;
            int two_halfs = 0;
            while (true) {
                if (halfbyte < 0 || halfbyte > 9) {
                    buf.append((char) ((halfbyte - 10) + 97));
                } else {
                    buf.append((char) (halfbyte + 48));
                }
                halfbyte = data[i] & 15;
                int two_halfs2 = two_halfs + 1;
                if (two_halfs >= 1) {
                    break;
                }
                two_halfs = two_halfs2;
            }
        }
        return buf.toString();
    }

    private static String SHA1(String text) {
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            byte[] bArr = new byte[40];
            md.update(text.getBytes("iso-8859-1"), 0, text.length());
            return convertToHex(md.digest());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e2) {
            e2.printStackTrace();
        }
        return null;

    }

//以上均为粘贴代码

     public static void main(String[] strArr) {
        int i;
        for(i = 999;i<10000; i++) {
            String sn = String.valueOf(i);
            if (verifyPassword(sn)){
                System.out.println("success:" + i);
                break;
            }
            else {
                System.out.println("fail:" + i);
            }
        }
        }
}

最后于 2020-3-4 22:40 被Deepinsky编辑 ,原因:
2020-3-4 22:28
0
游客
登录 | 注册 方可回帖
返回
//