栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

攻防世界misc——Reverse-it

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

攻防世界misc——Reverse-it

下载附件,得到未知格式文件0da9641b7aad4efb8f7eb45f47eaebb2,进kali,用file看一下,单纯是数据
010打开,一眼看见9D FF,最底下有8D FF,熟悉的jpg文件标识符,只不过反过来了
前后颠倒一下,恢复正常的FF D8和FF D9顺序,另存为jpg文件,文件打不开
考虑整个16进制字符排列全反了,将16进制复制走,用java反转一下

import java.io.FileInputStream;
import java.io.FileOutputStream;



public class reverse {

    public static void main(String[] args) {
        reverse.reverseFileInStringFromHex();
    }

    
    static void reverseFileInStringFromHex() {
        try {

            FileInputStream in = new FileInputStream("D:\Desktop\a.txt");// 读入数据

            byte[] b = new byte[1024];// 设置byte数组接受文件的内容
            int len = 0;// 数据长度

            String str = null;

            // 有一个返回值返回读取数据的长度,读取到最后一个数据则继续向后读一个,此时返回-1
            // 即:当返回-1,则表示文件读完
            while ((len = in.read(b)) != -1) {

                // b: 缓冲byte数组
                // 0: 从数组哪一位读起
                // len: 具体读了多少数据
                str += new String(b, 0, len);// 文件内容写入字符串

            }

            String str_r = (new StringBuilder(str)).reverse().toString();// 使用reverse()方法反转字符串

            FileOutputStream out = new FileOutputStream("D:\Desktop\2.txt");// 指定输出位置

            out.write(str_r.getBytes());// 把数据写入内存
            out.flush();// 把内存中数据写到硬盘
            out.close();// 关闭

            in.close();// 流在使用完一定要关闭

        } catch (Exception e) {

            e.printStackTrace();
        }
    }
}

复制出来的16进制字符串(部分)
反转后的字符串(部分)
虽然细枝末节上跟想象中不太一样,但整体上想要的结果出来了,也不影响结果,复制全文,010新建文件以16进制粘贴
另存为jpg格式,成功打开,但是内容是反的
Windows自带的画图翻转一下,得到flag

网上的wp,好多都是python做的,代码少,效率还挺高,可惜我不会,只能上java,代码实现不难,细节上bug一堆,浪费不少时间

总结:

  1. 多积攒常见文件16进制标识符,能很快确定文件类型,也能很快从杂乱无章的数据中发现解题思路
  2. 掌握至少一门编程语言
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/295069.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号