电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 3144 人浏览分享

尝试用代码解CTF题-找茬游戏

[复制链接]
3144 0
今天玩一个找茬游戏。但是我们不是用眼睛找,我们用代码找。
最近做的题基本都是用工具做题这次来尝试一下用代码解题。
来看题目解压附件cry200.zip 得到两张图片附件在c盘根目录下的解密200文件夹中

1618910736_607e9e1013f0fb0f5ba16_看图王.jpg

16_看图王.jpg

我们一般就是比较两张图片的像素 用程序进行对比这段代码在c盘根目录下的解密200文件夹中有。
  1. import java.io.BufferedReader;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import javax.imageio.ImageIO;
  8. import java.awt.image.BufferedImage;
  9. public class PicTest2 {
  10. public static void main(String[] args) throws IOException {
  11. int i,j;
  12. int rgb1[] = new int[3];
  13. int rgb2[] = new int[3];
  14. File file1 = new File("C:\1.png");// 实例化file对象,并设置读取图片路径
  15. File file2 = new File("C:\2.png");
  16. File file3 = new File("C:\3.png");
  17. BufferedImage bi1 = null; // 像素缓冲区开始为空
  18. BufferedImage bi2 = null;
  19. BufferedImage bi3 = null;
  20. bi1 = ImageIO.read(file1);
  21. bi2 = ImageIO.read(file2);
  22. bi3 = ImageIO.read(file3);
  23. int width = bi1.getWidth();
  24. int height = bi1.getHeight();
  25. for (i = 0; i < width; i++) {
  26. for (j = 0; j < height; j++) {
  27. int pixel1 = bi1.getRGB(i, j);
  28. rgb1[0] = (pixel1 & 0xff0000) >> 16;
  29. rgb1[1] = (pixel1 & 0xff00) >> 8;
  30. rgb1[2] = (pixel1 & 0xff);
  31. int pixel2 = bi2.getRGB(i, j);
  32. rgb2[0] = (pixel2 & 0xff0000) >> 16;
  33. rgb2[1] = (pixel2 & 0xff00) >> 8;
  34. rgb2[2] = (pixel2 & 0xff);
  35. bi3.setRGB(i, j, Integer.parseInt(Integer.toHexString(rgb1[0]^rgb2[0])+Inte
  36. ger.toHexString(rgb1[1]^rgb2[1])+Integer.toHexString(rgb1[2]^rgb2[2]),16));
  37. }
  38. }
  39. ImageIO.write(bi3, "PNG", file3); //写入文件
  40. }
  41. }
复制代码

这里运行没有成功 看一下代码里面的地址。需要把1.png和2.png放到c盘根目录下程序中已经指定为c盘根
目录把1.png复制到c盘根目录下一份重命名为3.png打开eclipse 新建一个工程 运行代码自己安装eclipse
安装程序在c盘根目录下的解密200文件夹中有

然后打开3.png如下图

QQ截图20210429165142.png

隐隐约约可以看到图中有个二维码 这是真的很隐约
那我们再加点代码让他看得更清楚些在ImageIO.write(bi3, "PNG"file3);上面加入下面的代码
需要添加的这段代码在c盘根目录下的解密200文件夹中有。
  1. for(i = 0; i < width; i++) {
  2. for(j = 0; j < height; j++) {
  3. //System.out.println(bi3.getRGB(i, j));
  4. if(bi3.getRGB(i, j)==-16777216) bi3.setRGB(i, j, -1);
  5. }
  6. }
复制代码

添加了代码之后 再运行

再次打开3.png 如下图


QQ截图20210429165424.png

扫码即可得到flag。
这道题是真题 当年难倒了一大片人。题目有迷惑性 要用程序对比像素用代码解游戏
题虽然是一种思路但是速度应该会慢一些。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.