# Steganography - Mission level 1
https://www.hackthissite.org/missions/playit/stego/1

This is an encoded message, the only tip you get is '2 null bytes'.
Đề bài hint cho mình là nhìn vào 2 null bytes (00 00).

Giữa 2 cặp 00 00 là những chuỗi 16 17, điều đó làm mình nghĩ đến 0 và 1 trong binary, 16 đại diện cho 0 và 17 đại diện cho 1.
```
16161717171616161617171616171716161717161717171617171617161616161717161616161716171717161617171616171716171716
```
=> 0011100001100110011011101101000011000010111001100110110.
Ý tưởng là mỗi 8 kí tự nhị phân sẽ quy đổi tương ứng với 1 kí tự ASCII, nhưng len của str là 55 không phải bội của 8 nên mình phải suy đoán bit còn thiếu và vị trí của bit còn thiếu. Đầu tiên mình đoán là thêm bit 0 vào vị trí đầu tiên nhưng không phải, đáp án là thêm bit 0 vào cuối kí tự đầu tiên, chính là lấy 7 kí tự đầu xong thêm 0 vào cuối.
```python
arr = '00111000001100110011011101101000011000010111001100110110'
for i in range(0, len(arr), 8):
print(chr(int((arr[i:i+8]),2)), end="")
# 837has6
```
=> key: **837has6**
# Steganography - Mission level 2
https://www.hackthissite.org/missions/playit/stego/2
Mở tệp âm thanh bằng [Sonic Visualiser](https://www.sonicvisualiser.org/) và add spectrogram layer. Về cơ bản, điều này sẽ làm là cung cấp hình ảnh trực quan của tệp âm thanh - bạn có thời gian dọc theo trục x, tần số dọc theo trục y và cường độ được xác định bởi màu sắc tại điểm cụ thể đó.

key sẽ hiện ra:

=> key: **jb298abc9qb2**
# Steganography - Mission level 3
https://www.hackthissite.org/missions/playit/stego/3
## Cách 1:
Với bài này mình sử dụng tool tên là Stegsolve:
```
#!/bin/bash -ex
wget http://www.caesum.com/handbook/Stegsolve.jar -O stegsolve.jar
chmod +x stegsolve.jar
mkdir bin
mv stegsolve.jar bin/
```
Có hơn 10 planes khác nhau được stegsolve hỗ trợ như Alpha, Blue, Green, Red, XOR, v.v.

## Cách 2:
Giá trị màu RGB được hỗ trợ trong tất cả các trình duyệt. Giá trị màu RGB được chỉ định bằng: rgb(red, green, blue). Mỗi thông số (đỏ, lục và lam) xác định cường độ của màu với giá trị từ 0 đến 255. Ví dụ: rgb(255, 0, 0 ) được hiển thị dưới dạng màu đỏ, vì màu đỏ được đặt ở giá trị cao nhất (255) và hai giá trị còn lại (xanh lục và xanh lam) được đặt thành 0. Một ví dụ khác, rgb(0, 255, 0) được hiển thị dưới dạng màu xanh lục, vì màu xanh lục được đặt thành giá trị cao nhất (255) và hai giá trị còn lại (đỏ và xanh lam) được đặt thành 0. Để hiển thị màu đen, hãy đặt tất cả tham số màu thành 0, như sau: rgb(0, 0, 0). Để hiển thị màu trắng, đặt tất cả tham số màu thành 255, như sau: rgb(255, 255, 255).
Dùng python để trích xuất giá trị RGB của mọi pixel, mình thấy rằng giá trị RGB của hầu hết các pixel là (62,62,62).
```python
from PIL import Image
# Mở hình ảnh
image = Image.open('3.bmp')
# Lấy kích thước hình ảnh
width, height = image.size
# Chuyển đổi hình ảnh thành định dạng RGB (nếu chưa phải RGB)
image = image.convert('RGB')
# Duyệt qua từng pixel và trích xuất giá trị RGB
pixels = []
for y in range(height):
for x in range(width):
r, g, b = image.getpixel((x, y))
pixels.append((r, g, b))
# In giá trị RGB của các pixel
for i, pixel in enumerate(pixels):
print(f'Pixel {i}: {pixel}')
```
Vì vậy idea của mình là set những giá trị không phải 62 thành 255 hoặc 0 để hiện rõ lên key là gì.
```python
from PIL import Image
im =Image.open('3.bmp','r')
pix = im.load()
width,height = im.size
for i in range(height) :
for j in range(width) :
r,g,b = pix[j,i]
if r != 62 :
pix[j,i] = 255,255,255
im.save('3solved.bmp')
```

=> key: **n38f298hsjf**
# Steganography - Mission level 4
https://www.hackthissite.org/missions/playit/stego/4

Lấy chuỗi nhị phân ở dưới giải mã ra:
```python
bin_str = '0111000000110110001110000110001101110001001100010110100001100010'
ascii_string = ''
# Chia chuỗi nhị phân thành các nhóm 8 bit và chuyển đổi từng nhóm thành ký tự ASCII
for i in range(0, len(bin_str), 8):
byte = bin_str[i:i+8]
ascii_char = chr(int(byte, 2))
ascii_string += ascii_char
print(ascii_string)
# p68cq1hb
```
=> key: **p68cq1hb**
# Steganography - Mission level 5
https://www.hackthissite.org/missions/playit/stego/5
Stego 5
First dump the file into a hex dump file, hd:
hd stego5.bmp | cut -f 2-20 -d ” ” | tr “\\n” ” ” | sed ‘s/ / /g’ | sed ‘s/ / /g’ > hd
edit the file and take the 00003a2e off at the end…
There are streams of pixels, with 3 hex bytes representing the RBG. Sometimes they are a little off:
3e 3f 3f 4e 4f 4f 42 43 42 3b 3b 0a
0 1 1 0 1 1 0 1 0 1 1 0
The full bit stream reveals the password to be: syn-ack-rst

# Steganography - Mission level 6
https://www.hackthissite.org/missions/playit/stego/6

```
Tm90IGxpa2UgaXQncyBoYXJkIHRvICdkZWNyeXB0JyB0aGlzIGh1aD8gVGhlIHBhc3N3b3JkIGlzIGhnYnZadzA3Lg==
```
decode base64:
```python
import base64
s = 'Tm90IGxpa2UgaXQncyBoYXJkIHRvICdkZWNyeXB0JyB0aGlzIGh1aD8gVGhlIHBhc3N3b3JkIGlzIGhnYnZadzA3Lg=='
print(base64.b64decode(s))
```
=> key: **hgbvZw07**
# References
https://github.com/divyanshusahu/HackThisSite/blob/master/Stego/README.md