Just like normal morning with some CTFs

Peterjson
4 min readApr 23, 2018

--

Okay let’s go. Hôm nay lang thang tìm kiếm các chal cũ trên backdoorCTF chọn đại cái tag n00bCTF17(CTF for beginner) và chọn đại 1 bài crypto :v.

link nè :3

đề cho ta 1 file py để mã hóa và 1 đoạn cipher. Xem thử file py có gì hot nào

Đại loại là vậy. Từ 1 cái flag ta sẽ phân tách ra làm 2 phần bằng nhau L(left) và R(right). Sau đó encode hex từng phần và chuyển về dạng int

Sau đó sẽ thực hiện mã hóa Fiestel( đại loại là 1 loại mã hóa từ 2 phần đã tách của text và đã convert về int )

vòng lặp:

1) L = R và R = L^F(R) (hàm F đã được định nghĩa từ a,b,c,d nên chẳng để í mấy đến hàm này)

2) sau khi thực hiện xong bước 1 từ int đưa về hex qua hàm hex(). Lọc đi ‘0x’ ở đầu và ‘L’ ở cuối của chuỗi

3) R+L (1 chuỗi hex)

Kết thúc vòng lập sẽ in ra cipher

Okay, đến đây tương đối hiểu về file py rồi. Bây h bắt tay vào decrypt thôi

Đi từ cipher đến flag thôi

1) (cipher.decode(‘base64’)).encode(‘hex’) => R+L (chuỗi hex mà hàm fiestel trả về)

2) encrypt từ 2 phần R,L thì decrypt cũng phải từ 2 phần chứ :3

suy nghĩ đơn giản ở encrypt thì ta có:

L = R và R = L^F(R)

bây h decrypt thì ngược lại thôi: (nói chứ wiki có cả :3)

Chứng minh thử 1 round nè hihi

R = L và L = R^F(L)

3) tách R+L thành R,L(thử sử dụng 1 phần hàm G() xem )

ở đây thì mình thử đại vu vơ và thành công. Còn 1 điều lăng tăng là nếu như qua cách biến đổi của hàm fiestel thì liệu độ dài của R,L có chênh lệch nhau như lúc đầu hay ko?? Kết quả này sẽ ảnh hưởng đến việc tìm flag. Nhưng may mắn thay là lần thử đầu tiên mình đã thành công. Về phương án cho điều mình lăng tăng thì mình nghĩ sẽ dịch chuyển vài kí tự và xem tiếp kết quả :3

tách ra thôi :v => R,L = G(cipher)

nhưng lúc này R,L ở dạng hex

convert về int rồi loop cho nó trở về R,L ban đầu thôi

4) Bây h có R,L ở dạng int r. Đi ngược lại theo flow của chương trình ta thấy

muốn trả về R,L ban đầu thì cần convert int sang hex sau đó decode hex là dc

Cuối cùng ta tìm dc flag :3

Done!! Nói chung thì bài này cũng ko rối cho lắm. Lăng tăng xíu ở đoạn tách R,L từ R+L thôi. Nếu ko như ý muốn thì vẫn có thể xem dc 1 phần của flag r từ đó nhích vài kí tự cho đúng :3.

Have a nice day guys!!!!

--

--

No responses yet