安云网 - AnYun.ORG | 专注于网络信息收集、网络数据分享、网络安全研究、网络各种猎奇八卦。
当前位置: 安云网 > 技术关注 > 系统文档 > Misc 第七篇——base64stego(伪加密,base64隐写)

Misc 第七篇——base64stego(伪加密,base64隐写)

时间:2021-08-24来源:未知 作者:安云网点击:
题目描述:菜狗经过几天的学习,终于发现了如来十三掌最后一步的精髓 附件给了一个压缩包,伪加密,使用360解压缩成功解压。 解压后是一个文本文件,如下图,使用base64加密的一堆字符串, 单纯使用base64解密,得到的是一堆
//内容来自安云网

题目描述:菜狗经过几天的学习,终于发现了如来十三掌最后一步的精髓 //内容来自安云网


//本文来自安云网

附件给了一个压缩包,伪加密,使用360解压缩成功解压。 FROM ANYUN.ORG


解压后是一个文本文件,如下图,使用base64加密的一堆字符串,




单纯使用base64解密,得到的是一堆关于隐写术的介绍,再结合题目标题,考虑是base64隐写题。




根据base64隐写的原理可得出结论:


1、base64加密后结尾无“=”号的无隐写位。


2、base64加密后结尾有1个“=”号的有2位隐写位。


3、base64加密后结尾有2个“=”号的有4位隐写位。


编码思想:首先判断每行数据的可隐写位数,然后将可隐写的每行最后一个字符根据base64码表,对应到相应的值,接着转为二进制,根据可隐写位数截取相应的位数,然后拼接这些隐写位,最后从左到右每8位一组截取二进制,分别将其转为十进制并对应ASCII码表,打印出相应的字符即可得到flag。


给出Java代码:(,,,到目前做CTF的题都是使用Java,Python是玩CTF的主流语言,后面会开始使用Python,不知道有没有人也是用的Java搞ctf,,,,,,,,,,)


public class Misc_010 {

public static void main(String[] args) throws IOException {

String row="";         //存放行

String lastString="";  //存放最后一个字符

StringBuffer bin= new StringBuffer();  //存放隐写的二进制

String b="";

String base64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";  //base64码表

FileReader file = null;

file = new FileReader("E:\\CTF\\newhand\\a2eb7ceaf5ab49f7acb33de2e7eed74a\\stego1.txt");

BufferedReader bReader=new BufferedReader(file);

row=bReader.readLine();

while(row != null){

if (row.contains("=")) {

if(row.contains("==")){

                    //两个等号

lastString=row.replace("=", "").substring(row.length()-3);

b=Integer.toBinaryString(base64.indexOf(lastString));

if(b.length()>=4){

bin.append(b.substring(b.length()-4));

}

else{

DecimalFormat g1=new DecimalFormat("0000");

        b= g1.format(Integer.valueOf(b));

        bin.append(b);

}

}

else {

                    //一个等号

lastString=row.replace("=", "").substring(row.length()-2);

b=Integer.toBinaryString(base64.indexOf(lastString));

if(b.length()>=2){

//System.out.println(b.substring(b.length()-2));

bin.append(b.substring(b.length()-2));

}

else {

DecimalFormat g1=new DecimalFormat("00");

        b= g1.format(Integer.valueOf(b));

        bin.append(b);

}

}

}

row=bReader.readLine();

}

//System.out.println(bin);//测试 打印隐写的二进制

for(int i=0;i<bin.length()-2;i+=8){

//每8位一组转换为十进制,并根据ASCII码表,强制转为字符,得flag                 System.out.print((char)Integer.parseInt(Long.toString(Long.parseLong(bin.substring(i, i+8),2))));

}

}

}

运行结果:




本题flag:flag{Base_sixty_four_point_five}


 

————————————————

版权声明:本文为CSDN博主「Rr.0」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/robacco/article/details/104829494


本文标题: Misc 第七篇——base64stego(伪加密,base64隐写) 安云网
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片
相关内容
推荐内容