freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

尝试用代码解CTF题-找茬游戏
蚁景科技 2021-04-20 17:25:35 193415
所属地 湖南省

今天玩一个找茬游戏。但是我们不是用眼睛找,我们用代码找。

最近做的题基本都是用工具做题,这次来尝试一下用代码解题。

来看题目解压附件cry200.zip,得到两张图片(附件在c盘根目录下的解密200文件夹中)

headImg.action?news=6aa01de0-1b7d-42f8-8efa-f6fe4a5e6852.png

headImg.action?news=f2eb5343-fa78-4dfe-b113-dad2292028c7.png

我们一般就是比较两张图片的像素,用程序进行对比(这段代码在c盘根目录下的解密200文件夹中有)

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStreamReader;

import javax.imageio.ImageIO;

import java.awt.image.BufferedImage;

public class PicTest2 {

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

int i,j;

int rgb1[] = new int[3];

int rgb2[] = new int[3];

File file1 = new File("C:\1.png");// 实例化file对象,并设置读取图片路径

File file2 = new File("C:\2.png");

File file3 = new File("C:\3.png");

BufferedImage bi1 = null; // 像素缓冲区开始为空

BufferedImage bi2 = null;

BufferedImage bi3 = null;

bi1 = ImageIO.read(file1);

bi2 = ImageIO.read(file2);

bi3 = ImageIO.read(file3);

int width = bi1.getWidth();

int height = bi1.getHeight();

for (i = 0; i < width; i++) {

for (j = 0; j < height; j++) {

int pixel1 = bi1.getRGB(i, j);

rgb1[0] = (pixel1 & 0xff0000) >> 16;

rgb1[1] = (pixel1 & 0xff00) >> 8;

rgb1[2] = (pixel1 & 0xff);

int pixel2 = bi2.getRGB(i, j);

rgb2[0] = (pixel2 & 0xff0000) >> 16;

rgb2[1] = (pixel2 & 0xff00) >> 8;

rgb2[2] = (pixel2 & 0xff);

bi3.setRGB(i, j, Integer.parseInt(Integer.toHexString(rgb1[0]^rgb2[0])+Integer.toHexString(rgb1[1]^rgb2[1])+Integer.toHexString(rgb1[2]^rgb2[2]),16));

}

}

ImageIO.write(bi3, "PNG", file3); //写入文件

}

}

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

然后打开3.png,如下图

headImg.action?news=83b8d685-647a-438f-89fd-ad2d3f1eeed4.png

隐隐约约可以看到图中有个二维码(这是真的很隐约)

那我们再加点代码让他看得更清楚些在ImageIO.write(bi3, "PNG", file3); 上面加入下面的代码(需要添加的这段代码在c盘根目录下的解密200文件夹中有)

for(i = 0; i < width; i++) {

for(j = 0; j < height; j++) {

//System.out.println(bi3.getRGB(i, j));

if(bi3.getRGB(i, j)==-16777216) bi3.setRGB(i, j, -1);

}

}

添加了代码之后,再运行

再次打开3.png,如下图

headImg.action?news=bc821acf-36f1-488e-9e5b-9bda38753801.png

扫码即可得到flag。

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

本文实验地址:https://www.hetianlab.com/expc.do?

ec=ECID9d6c0ca797abec2016111111233100001&pk_campaign=freebuf-wemedia
# CTF
本文为 蚁景科技 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
蚁景科技 LV.9
湖南蚁景科技有限公司主要从事在线教育平台技术研究及网络培训产品研发,专注网络空间安全实用型人才培养,全面提升用户动手实践能力。
  • 907 文章数
  • 675 关注者
蚁景科技荣膺双项殊荣,引领网络安全教育新潮流
2025-03-28
FlowiseAI 任意文件写入漏洞(CVE-2025–26319)
2025-03-27
路由器安全研究:D-Link DIR-823G v1.02 B05 复现与利用思路
2025-03-18