CTF-misc(1)圖片隱寫

???筆記目錄


滲透測試工具(1)wireshark
滲透測試工具(2)Nmap
滲透測試工具(3)Burpsuite
AWD比賽(1)AWD入門攻略大綱
CTF-Web(2)SQL注入
CTF-Web(3)文件上傳漏洞
?

圖片隱寫目錄


(1)GIf和二維碼隱寫
  • 二維碼補全
  • 二維碼繪圖
  • Gif規律分析
(2)文本附加圖片隱寫
(3)IHDR文件頭修復圖片寬高
(4)文件拼接
(5)LSB隱寫(不改變圖片)
(6)Exif信息挖掘
(7) 基于DCT域的JPG隱寫
(8)兩張相同圖片
  • 異或
  • 盲水印
(9)自動拼圖
(10)IDTA隱寫(待完善)

1.Gif和二維碼隱寫


(1)二維碼補全

①抽幀 (StegSolve→Frame Browser)
②二維碼補全四個角(可以截取正常的二維碼角落拼湊新圖)并掃描

(2)二維碼繪圖

①都是01數據
  • 把0或1 用黑(255,255,255)或 白(0,0,01)替換
from PIL import Image#todo:修改邊長,假設二維碼是正方形
MAX = 70
pic = Image.new("RGB", (MAX, MAX))
binary_nums = """01組成字符串""".replace('\n', '')i = 0
for y in range(0, MAX):for x in range(0, MAX):if binary_nums[i] == '1':pic.putpixel([x, y], (0, 0, 0))else:pic.putpixel([x, y], (255, 255, 255))i = i + 1pic.show()
pic.save("flag.png")
②坐標繪制二維碼
  • 腳本繪圖(數據格式如(1,1) (1,2))
from PIL import Image, ImageDraw, ImageFont, ImageFilter
f1 = open(r'flag.txt','r')
width = 300
height = 300
image = Image.new('RGB', (width, height), (255, 255, 255))
draw = ImageDraw.Draw(image)
color = (0,0,0)
while 1:s = f1.readline()if not s:break#todo:去掉換行符和坐標括號()s = s.strip('\n')s = s.lstrip('(')s = s.rstrip(')')a = int(s.split(',')[0],10)b = int(s.split(',')[1],10)draw.point((a, b), fill=color)
image.show()

(3)Gif規律分析

①黑白規律
思路: 通過捕獲Gif黑白圖片,假設白黑是01或相反,按圖片順序組成二進制串解碼
②像素特征分析
思路: 綠色0、紅色1、黃色換行、熄燈跳過
from PIL import Image#(1)Gif提取所有圖片
im = Image.open('./Traffic_Light.gif')
try:# tell是幀數,而seek是取當前幀數的圖片。im.save('light{0}.png'.format(im.tell()))while True:im.seek(im.tell() + 1)im.save('light{0}.png'.format(im.tell()))
except:pass#(2)分析圖片規律
flag = ""
for i in range(1168):image = Image.open('./light' + str(i) + '.png')#todo:打開畫圖工具根據像素特征分析if image.getpixel((115, 55)) == 213:flag += str(1)elif image.getpixel((115, 145)) == 2:flag += str(0)elif image.getpixel((115, 145)) == 69:print(flag)flag=""
#(3)二進制轉十六進制 再轉ASCII碼# else:#     print(flag)#     flag=""

2.文本附加圖片隱寫


(1)圖片內容附加字符串

直接在圖片內容中增加字符串
? ? ①winhex預覽
? ? ②破空_flag查找

(2)文件結合

常見形式為可顯示圖片文件=圖片+壓縮包,解決方式:
①foremost分離
②binwalk分離

3.IHDR文件頭修復圖片寬高(圖片顯示不全)


(1)PNG圖片——爆破CRC

【方法一:直接用風二工具梭哈】
①找到圖片crc值
? ? ②腳本爆破CRC 然后修改成正確的高度
import struct
import binascii
m = open("flag.png", "rb").read()
k = 0
for i in range(5000):
????if k == 1:
????????break
????for j in range(5000):
????????c = m[12:16] + struct.pack('>i', i) + struct.pack('>i', j) + m[24:29]
????????crc = binascii.crc32(c) & 0xffffffff
????????if crc == 0x77F34C7D:
????????????# 目標圖片對應的crc值
????????????k = 1
????????????print(i,j)
????????????break
【方法二:無法爆破時 用GIMP 手動調整寬高,顯示出flag】

(2)JPG和BMP

找到Y_image和X_image圖片, 直接修改寬高顯示沒有CRC校驗

4.文件拼接


(1)相關命令

copy /b 2.jpg+1.zip output.jpg

5.LSB隱寫(PNG,BMP)


(1)原理

  • LSB隱寫就是 修改RGB顏色分量的最低二進制位也就是最低有效位(LSB),而 人眼不會注意到變化,每個像數可以攜帶3比特的信息。

  • 可以修改最低位中的信息,實現信息的隱寫。此時 修改 最低有效位的信息的算法就叫做 lsb加密算法提取 最低有效位信息的算法叫做 lsb解密算法

(2)lsb解密

?? ?① StegSolve檢測:查看圖片不同通道,進行異或對比操作
②zsteg檢測png和bmp

(3)灰度圖片解密

from PIL import Image
p = Image.open('圖片名.png').convert('L')
#(1)新建大小一樣的圖片
a,b = p.size
flag = Image.new('L',(a,b),255)
#(2)像素為偶數填充黑,奇數白
for y in range(b):for x in range(a):if  p.getpixel((x,y))%2==0:flag.putpixel((x,y),255)else:flag.putpixel((x,y),0)
flag.show()

6.Exif信息挖掘(略)


(1)Exif查詢

  • exiftool 文件名
  • 右鍵屬性查看

7.JPG的DCT域隱寫


(1)原理

JPEG和MPEG格式使用離散余弦變換(DiscreteCosine Transform, DCT)函數來壓縮圖像。 這個圖像壓縮方法的核心是: 通過識別每個8x8像素塊中相鄰像素中的重復像素(如果是MPEG文件的話, 就是識別一系列圖像中相鄰幀中的重復幀)來減少顯示圖像所需的位數, 并使用近似估算法降低其冗余度。?
我們可以把 DCT 看作一個用于執行壓縮的近似計算方法。 因為丟失了部分數據, 所以 DCT 是一種有損壓縮技術, 但一般不會影響圖像或視頻的視覺效果。 ?
Stegdetect 的目的是 評估JPEG文件的 DCT 頻率系數, 把檢測到的可疑JPEG文件的頻率與正常JPEG文件的頻率進行對比。 頻率對比結果的偏差很大則說明被檢查文件存在異常, 這種異常意味著文件中存在隱藏信息的可能性很大。
【常見步驟】
?? ?① stegdetect分析圖片是什么類型隱寫
stegdetect.exe -tjopi -s 10.0 文件名.jpg??

? ??
stegbreak爆破密碼
stegbreak.exe -r rules.ini -f password.txt 文件名.jpg

③不同隱寫工具輸入密碼導出flag(見下)
注意:若stegdetect無法判斷類型,則只能從題目中獲取key密碼,然后采用不同方式導出

(2)JPHide密碼導出

③JPHS輸入密碼導出數據

(3)OutGuess密碼導出(環境未調通,一般需要密碼解密)

【有密碼】
outguess -k xx -r 文件名.jpg
【無密碼】
outguess?-r 文件名.jpg

(4)F5密碼導出(環境未調通

【有密碼】
java Extract 文件名.jpg -p 密碼
【無密碼】
java Extract 文件名.jpg

8.兩張相同圖片


(1)異或

  • 合并兩張圖
Stegsolve → Analysis → Image Combiner

(2)盲水印

  • 合并兩張圖(python3 轉為python2)
python bwm.py decode 1.png 2.png flag.png --oldseed

9.拼圖


(1)gas工具

①計算小圖像素塊面積
  • 高=704/11=64,寬=1024/16=6,因此圖像塊為 64*64
②gas工具輸入
python gaps --image puzzle.jpg --generation 50 --population 150 --size 64??--verbose
Option??????????| Description
--------------- | -----------
`--image`???????| 拼圖文件
`--size`????????| 每一塊圖像大小
`--generations` | 算法迭代次數 暫時用50
`--population`??| Number of individuals in population
`--verbose`?????|?每次生成后顯示最佳結果(若10次迭代沒更改則退出)
`--save`????????| Save puzzle solution as image

10.IDTA隱寫(待完善)


(1)原理

它存儲實際的數據,在數據流中可包含多個連續順序的圖像數據塊。它采用 LZ77 算法的派生算法進行壓縮,可以用 zlib 解壓縮。
import zlib
import binascii
IDAT = " ".decode('hex')????
#雙引號中填IDAT數據
result = binascii.hexlify(zlib.decompress(IDAT))
print(result)

(2)IDAT長度異常

IDAT 塊只有當上一個塊充滿時,才會繼續一個新的塊。一旦出現不符合這個規律的情況(有一塊IDAT還沒填滿但緊跟其后的是一個新的塊),那么就是人為添加了數據塊

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213952.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213952.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213952.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux端口轉發

使用iptables 例如要將本地的8080端口轉發到80端口,你可以使用以下命令: sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080這將把進入80端口的流量重定向到8080端口。 使用socat 另一種方法是使用socat工具。首先&am…

?Unity 搭建UDP服務端(02)接收客戶端消息

客戶端在上一篇 由于服務器邏輯寫的較為簡單 所以直接上代碼了~ using System; using System.Net; using System.Net.Sockets; using System.Text; using UnityEngine;public class UdpServer : MonoBehaviour {public static UdpServer instance;private void Awake(){if (…

Springboot管理系統數據權限過濾——ruoyi實現方案

本文主要簡述,Ruoyi框架使用的權限過濾實現方案,實現簡單易懂。主要知識點有: 注解定義;面向切面編程,在執行有數據權限注解的方法之前獲取用戶組織權限,拼接到domain對象的params參數中; 1. …

AI:100-基于卷積神經網絡的農作物生長狀態監測

?? 本文選自專欄:人工智能領域200例教程專欄 從基礎到實踐,深入學習。無論你是初學者還是經驗豐富的老手,對于本專欄案例和項目實踐都有參考學習意義。 ??? 每一個案例都附帶有在本地跑過的核心代碼,詳細講解供大家學習,希望可以幫到大家。歡迎訂閱支持,正在不斷更新…

基于CMT2300A定制的模組諧波測量及調試事例

1.1 芯片介紹 CMT2300A華普微推出的一款超低功耗 Sub-1GHz 射頻收發器,是一款SPI接口射頻前端芯片,調制方式支持OOK (G)FSK 、(G)MSK,速率最大可以做到300 kbps,休眠大概1uA,功率最大可以做到20dB,但各國的…

Android 刪除瀏覽器導航頁面修改默認主頁

Android 刪除瀏覽器導航頁面修改默認主頁 近來收到客戶需求反饋,需要刪除瀏覽器導航頁面并將百度設置為默認主頁,具體修改參照如下: 刪除瀏覽器導航頁面: /vendor/mediatek/proprietary/packages/apps/Browser/src/com/android…

軟文怎么寫才能讓消費者行動起來?媒介盒子分享

軟文的本質是營銷,做營銷文案不是玩文字藝術,它需要洞察用戶需求,懂產品,了解賣點,懂營銷,懂消費心理,最終讓消費者行動起來。有些文案可能在你看起來遣詞造句和配圖都很一般,但就是…

分布式uuid常用的算法

1、雪花算法介紹 面試官:集群高并發情況下如何實現分布式唯一全局id生成? - 墨天輪 2、百度的UidGenerator 介紹,適合容器化配置,同時兼容springboot,只需要mysql數據庫, https://github.com/baidu/uid-…

Python辦公之Excel篇

1.準備環境 Python版本:3.6.5 IDE集成開發環境:pycharm Python庫選擇:openpyxl openpyxl操作的excel文件以xlsx結尾。 基礎命令 查看 Python 版本 python --version查看 pip 版本 pip --version安裝openxlsx pip install openpyxl -i…

9.靜態路由

靜態路由 中小型網絡都會用到,防火墻核心交換機用的很多,一般是用在出口 路由表:路由器用來轉發數據包唯一的依據 NextHop下一跳 Static靜態路由需要手動設置 ip route-static 目標網段 掩碼 下一跳例如:ip route-static 192…

QT講程序打包成安裝包讓任何人可以使用

💂 個人主頁:pp不會算法v 🤟 版權: 本文由【pp不會算法v】原創、在CSDN首發、需要轉載請聯系博主 💬 如果文章對你有幫助、歡迎關注、點贊、收藏(一鍵三連)和訂閱專欄哦 文章目錄 1、release模式下編譯2、windeploy 打包發布3、使用inno setu…

node.js express cors解決跨域

目錄 什么是跨域 示例 postman請求 前端請求 cors中間件解決跨域 流程 配置cors參數 什么是跨域 跨域(Cross-Origin)是指在 Web 開發中,當一個網頁的源(Origin)與另一個網頁的源不同時,就發生了跨域…

day6 arm

main.c #include "uartt.h"//封裝延時函數void delay(int ms){int i,j;for(i0;i<ms;i){for(j0;j<2000;j);}}int main(){//串口初始化uart4_init();//燈初始化led_init();//char a;char *s;while(1){myputchar(\n);myputchar(\r);//從串口讀取一個字符// amyget…

手把手教你反編譯小程序

本次實驗環境 操作系統: win10 10.0.19042 node: v14.17.0 微信開發者工具: Stable 1.05.2110290 前期準備 在電腦端安裝模擬器工具&#xff0c;這里以夜神模擬器為例&#xff0c; 在模擬器中安裝微信&#xff1a;用于微信打開小程序時加載小程序包。在模擬器中文件管理器&…

論文筆記:A review on multi-label learning

一、介紹 傳統的監督學習是單標簽學習&#xff0c;但是現實中一個實例可能對應多個標簽。這篇文章介紹了多標簽分類的定義和評價指標、多標簽學習的算法還有其他相關的任務。 二、問題相關定義 2.1 多標簽學習任務 假設 X R d X R^d XRd&#xff0c;表示d維的輸入空間&am…

面試經典150題(10-13)

leetcode 150道題 計劃花兩個月時候刷完&#xff0c;今天&#xff08;第四天&#xff09;完成了4道(10-13)150&#xff1a; 10. &#xff08;45. 跳躍游戲 II&#xff09;題目描述&#xff1a; 給定一個長度為 n 的 0 索引整數數組 nums。初始位置為 nums[0]。 每個元素 nums[…

日本服務器:確保其穩定性的幾個要點

?  在租用日本服務器時&#xff0c;用戶們大多一定會關注它的穩定性&#xff0c;其實這些顧及都是正常的。畢竟&#xff0c;網站要想正常運行&#xff0c;保障服務器穩定是關鍵。本文將討論有關如何保障日本服務器穩定性的一些有用技巧&#xff0c;希望對您有所幫助。 1.注重…

Linux定時循環備份指定文件或文件夾,每月永久備份留1份

備份需求&#xff1a;每天完成一次指定文件的備份&#xff0c;壓縮后存放到指定目錄 問題&#xff1a;備份時間長了以后占用空間較大&#xff0c;浪費存儲&#xff0c;實際歷史備份意義不大&#xff0c;并不需要永久保存。但是如果直接刪除可能導致無法恢復歷史狀態的數據。 …

SpringBoot 啟動加載器解析

計時器介紹 啟動加載器實戰 實現方式1 實現CommandLineRunner接口重寫run方法通過Order進行排序 示例: Component Order(1) public class FirstCommandlineRunner implements CommandLineRunner {Overridepublic void run(String... args) throws Exception {System.out.pr…

一篇上手機器學習

一、上手機器學習的幾個階段 上手機器學習&#xff0c;第一步當然是看完我的這篇文章啦~&#xff0c;然后就按以下步驟來就可以了&#xff1a; 學習Python編程語言&#xff1a;Python是一種易于學習的高級編程語言&#xff0c;廣泛應用于機器學習領域。你可以通過學習Python的…