Hackergame 2020

签到——FLAG 提取器

首先打开环境的界面如下

首先随便试了一下

并且无法靠进度条移动到1的位置
那这就F12冲

发现它进度条这里有最小值,那么就直接将最小值改为1,然后就能直接提取flag了

2048

打开题目环境,就是一个2048的游戏

F12发现中间注释部分有提示

所以直接访问http://202.38.93.111:10005/static/js/html_actuator.js
可以查看JS代码,并且可以看到有这一样段代码

其中不理解的就是后面的

('b'+'a'+ +'a'+'a').toLowerCase();

百度了解之后这一串代码的结果就是banana所以直接访问http://202.38.93.111:10005/getflxg?my_favorite_fruit=banana得到flag

一闪而过的 Flag

这题会直接下载一个可执行文件的附件,点开之后一下就消失了
所以打开命令提示符,执行文件就能得到flag了

从零开始的记账工具人

这个题目会下载一个excel文件,然后第一列的都是大写数字
这个可以通过脚本将大写数字转换成阿拉伯数字,脚本如下

using System;
using System.IO;

namespace ConsoleApp1
{
    class Program
    {

        static string ConverToDigit(string args)
        {
            //别字列表
            string[] WrongStr = { "○", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "千", "百", "正" };
            //标准数字
            string[] Standard = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾", "仟", "佰", "整" };
            //中文货币标准
            string[] RMB = { "兆", "仟", "佰", "拾", "亿", "仟", "佰", "拾", "万", "仟", "佰", "拾", "元", "角", "分" };

            string[] Num = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };

            //统一大写标准
            for (int i = 0; i < WrongStr.Length; i++)
            {
                args = args.Replace(WrongStr[i], Standard[i]);
            }
            //数字转换为阿拉伯数字
            for (int i = 0; i < Num.Length; i++)
            {
                args = args.Replace(Standard[i], Num[i]);
            }

            //将格式统一为:"#亿#仟#佰#拾#万#仟#佰#拾#元#角#分"

            args = args.Replace("0", "");           //去掉0          
            args = args.Replace("整", "");          //去掉整
            if (args.IndexOf("元") < 0)
            {
                args = "0元" + args;
            }                                       //只有角分的情况要加上元
            int Idx = RMB.Length;
            string tmp = "";
            string str = "";
            for (int i = args.Length - 1; i > 0; i--)
            {
                tmp = args.Substring(i, 1);
                if (!Char.IsNumber(tmp, 0))          //不是数字
                {
                    while (true)
                    {
                        Idx -= 1;
                        if (tmp == RMB[Idx])
                        {
                            string t = args.Substring(i - 1, 1);
                            str = (Char.IsNumber(t, 0) ? t : "0") + tmp + str;
                            break;
                        }
                        else
                        {
                            str = "0" + RMB[Idx] + str;
                        }
                    }
                }
            }

            //替换掉全部中文
            str = str.Replace("元", ".");
            if (args[0].Equals('拾'))
            {
                str = "1" + str;
            }
            for (int i = 0; i < RMB.Length; i++)
            {
                str = str.Replace(RMB[i], "");
            }

            return str.ToString();
        }

        static void Main(string[] args)
        {
            string path = "C:\\Users\\Administrator\\Desktop\\a.txt";
            StreamReader rd = File.OpenText(path);
            string line;
            while ((line = rd.ReadLine()) != null)
            {
                Console.WriteLine(ConverToDigit(line));
            }
            // Console.WriteLine(ConverToDigit("拾元捌角贰分"));
        }


    }
}

将大写数字转换成数字之后就直接计算总金额就行了

posted @ 2022-02-21 11:44  Townmacro  阅读(104)  评论(0编辑  收藏  举报