Writeup-2020安洵杯-Misc题:一封情书

2022-01-13 12:58:20 浏览数 (2)

谁以后要是给我这样的情书我特么打死谁,虽说不太可能收到。。。

题目描述:6岁的小明给6岁的姐姐写了一封情书

附件下载

打开压缩包得到一个文本

经统计有9409个字符,开方得到97,可以看出97×97的规律,将1视为黑块,0视为白块转为图片可以得到二维码

至于转二维码我看网上基本都是python代码,这里给一个用js实现的(PS:因为算法的原因有一列色块位置生成错误,我也就懒得改了,可以通过打开浏览器开发者工具把那一列挤过去),代码:

代码语言:javascript复制
<html>
    <head>
        <style>
        *{
        padding: 0;
        margin: 0;
        }
        .a{
        width: 1px;
        height: 1px;
        background: #000;
        float: left;
        }
        .a{
        width: 1px;
        height: 1px;
        background: #000;
        float: left;
        }
        .b{
        width: 1px;
        height: 1px;
        background: #fff;
        float: left;
        }
        .c{
        width: 1px;
        height: 1px;
        background: #000;
        }
        .d{
        width: 1px;
        height: 1px;
        background: #fff;
        }
        </style>
    </head>
    <body>
        <center>
            <script type="text/javascript">
                var a = "二进制代码";
                document.write(a.length   "</br>");
                for (var o = 0; o < a.length; o  ) {
                    if (a[o] == 0) {
                        if ((o   1) % 97 == 0) {
                            document.write("<div class='d'></div>");
                        } else {
                            document.write("<div class='b'></div>");
                        }
                    } else {
                        if ((o   1) % 97 == 0) {
                            document.write("<div class='c'></div>");
                        } else {
                            document.write("<div class='a'></div>");
                        }
                    }
                }
            </script>
        </center>
    </body>
</html>

生成的二维码解码得到

代码语言:javascript复制
OTctMyAxLTMgMS0zIDMtMiAzLTIgMy0yIDEtMiAxLTUgMS0yIDEtMyAzLTIgOTctMyAzLTIgOTQtMSAxLTUgNC0yIDQtMiA0LTIgNC0yIDk3LTMgMS0zIDMtMiA0LTIgMS01IDMtMiA0LTIgMy0yIDMtMiAzLTIgNC0yIDk3LTMgMy0yIDEtNSAxLTUgMy0yIDEtMyA0LTIgNC0yIDEtMiAzLTIgMS0zIDQtMiA0LTIgNC0yIDMtMiA5NC0xIDEtMyAxLTMgMS0zIDMtMiAzLTIgMS0zIDk0LTEgMS0zIDk0LTEgNC0yIDMtMiAxLTIgOTctMyA5Ny0zIDEtMw=

经观察为Base64,注意中间的反斜杠是误导,删除后Base64解码得到:

代码语言:javascript复制
97-3 1-3 1-3 3-2 3-2 3-2 1-2 1-5 1-2 1-3 3-2 97-3 3-2 94-1 1-5 4-2 4-2 4-2 4-2 97-3 1-3 3-2 4-2 1-5 3-2 4-2 3-2 3-2 3-2 4-2 97-3 3-2 1-5 1-5 3-2 1-3 4-2 4-2 1-2 3-2 1-3 4-2 4-2 4-2 3-2 94-1 1-3 1-3 1-3 3-2 3-2 1-3 94-1 1-3 94-1 4-2 3-2 1-2 97-3 97-3 1-3

通过上面的坐标提取二维码上的色块值为:

代码语言:javascript复制
1110001111010110000110010000001011010010100001111001111001111

按照题目的暗示6×6将二进制转为三十六进制

得到最终flag:

代码语言:javascript复制
flag{j5w2a0o0}

0 人点赞