yeuchimse
W-------
-
21/10/2013
-
0
-
131 bài viết
[WhiteHat Contest 09] Writeup All
Mình xin phép giật tít câu view một chút, vì đơn giản đây không phải là một bài writeup all. Dẫu thế mình vẫn hy vọng nó sẽ có ích, nó sẽ mang đến một tương lai tốt đẹp hơn cho các thế hệ sau, hoặc nếu mình có thể trở thành tỉ phú trước tuổi 30 nhờ thi WhiteHat thì càng tốt.
Crypto100
Bài này chắc ai cũng làm ra, vì nhìn vào có thể nhận thấy ngay đó là cú pháp hậu tố. Nói theo ngôn ngữ Exploit thì hướng xử lý là Push, Pop, Ret -_-
Crypto300
Bài này lúc đầu mình nhìn vào là đã nản rồi, vì mình không học điện tử nên không ưa gì mấy cái bản mạch. Cơ mà sau thấy vài team giải được, ngó kỹ cũng thấy chỉ vài phép toán NAND và XOR (tương đối đắng khi lúc đầu mình nhầm NAND với AND).
Bài này nhận ra ngay rằng thuật toán không có tính thực tế gì mấy, do phép toán NAND là phép toán mất mát thông tin, và theo như mình kiểm tra thì với tập input từ 0 đến 255 chỉ cho ra khoảng 150 output khác nhau, như vậy dẫn đến khi decode sẽ có trường hợp 1 cipher -> nhiều plaintext.
Ngoài ra có một lỗi sai ở hình mô phỏng mạch, đó là bit[0] của output được xor với bit[6] của input (trong khi phải là bit[7] mới đúng). Mô tả lại thuật toán như sau (mình nhìn mạch chép lại y nguyên, dài nhưng mà trong sáng):
Pwn300
Do vướng lỗi nên bài này bị bỏ vào gần cuối cuộc thi.
Pwn400
Bài này mình xem qua, cá nhân không thấy thích vì code mình thấy rối và mình không hiểu được mục đích của file binary. Mình chạy thử trên máy mình điền suto và ugotit thì crash nên không đi sâu nữa. Mà đi sâu cũng chưa chắc ra, trong khi lúc này mình vẫn còn một số bài khác khả quan hơn để làm.
Re100
Bài này check các cặp ký tự liên tiếp theo độ lệch cho trước, kiên trì chút sẽ ra. Đánh giá theo thang điểm thì bài này nên là Re200.
Re200
Bài này phần Re không khó, tuy nhiên mình nghĩ nhiều đội chơi bị vướng do không hiểu flag là cái gì, có thắc mắc nhưng BTC cũng không giải đáp, có lẽ sợ lộ đáp án (cá nhân mình thì thấy không lộ gì cả, do kiểu gì thì kiểu vẫn phải Re mới ra được). Tổng quan thì đây là một bài dạng maze game, nếu flag là đường đi để WIN thì có nhiều trường hợp, nên mình có nghĩ đến flag là text trong map, nhưng thử vài trường hợp vẫn không đúng. Nhìn giống 74ScLeo hoặc đại ý là vậy, phần dưới còn chữ WHITEHAT, mình bỏ qua vì nghĩ đó chỉ là nghi binh.
Re300
Đây là một bài .Net rất dễ, không bảo vệ gì cả, chỉ cần patch là thấy flag. Mình không hiểu ý đồ của BTC khi để 300 điểm ở bài này, cũng không hiểu sao flag lại xấu thế.
Re400
Bài này code dài nhưng chủ yếu là code gây nhiễu, thêm nữa do flag ngắn nên dễ bị đoán. Ngay ở đầu cipher (GALF_EHT_WRJ_XR]jRX_JRW_WKH_IODJ) đã có thể thấy chữ THE_FLAG viết ngược rồi. Thử một hồi thì thấy length(plain) = length(cipher) / 2, và flag ở dạng ABC_XYZ_THE_FLAG. Tiến hành Re một chút, xem trong hàm gena để ý có đoạn code sau:
Crypto100
Bài này chắc ai cũng làm ra, vì nhìn vào có thể nhận thấy ngay đó là cú pháp hậu tố. Nói theo ngôn ngữ Exploit thì hướng xử lý là Push, Pop, Ret -_-
Crypto300
Bài này lúc đầu mình nhìn vào là đã nản rồi, vì mình không học điện tử nên không ưa gì mấy cái bản mạch. Cơ mà sau thấy vài team giải được, ngó kỹ cũng thấy chỉ vài phép toán NAND và XOR (tương đối đắng khi lúc đầu mình nhầm NAND với AND).
Bài này nhận ra ngay rằng thuật toán không có tính thực tế gì mấy, do phép toán NAND là phép toán mất mát thông tin, và theo như mình kiểm tra thì với tập input từ 0 đến 255 chỉ cho ra khoảng 150 output khác nhau, như vậy dẫn đến khi decode sẽ có trường hợp 1 cipher -> nhiều plaintext.
Ngoài ra có một lỗi sai ở hình mô phỏng mạch, đó là bit[0] của output được xor với bit[6] của input (trong khi phải là bit[7] mới đúng). Mô tả lại thuật toán như sau (mình nhìn mạch chép lại y nguyên, dài nhưng mà trong sáng):
Pwn300
Do vướng lỗi nên bài này bị bỏ vào gần cuối cuộc thi.
Pwn400
Bài này mình xem qua, cá nhân không thấy thích vì code mình thấy rối và mình không hiểu được mục đích của file binary. Mình chạy thử trên máy mình điền suto và ugotit thì crash nên không đi sâu nữa. Mà đi sâu cũng chưa chắc ra, trong khi lúc này mình vẫn còn một số bài khác khả quan hơn để làm.
Re100
Bài này check các cặp ký tự liên tiếp theo độ lệch cho trước, kiên trì chút sẽ ra. Đánh giá theo thang điểm thì bài này nên là Re200.
Re200
Bài này phần Re không khó, tuy nhiên mình nghĩ nhiều đội chơi bị vướng do không hiểu flag là cái gì, có thắc mắc nhưng BTC cũng không giải đáp, có lẽ sợ lộ đáp án (cá nhân mình thì thấy không lộ gì cả, do kiểu gì thì kiểu vẫn phải Re mới ra được). Tổng quan thì đây là một bài dạng maze game, nếu flag là đường đi để WIN thì có nhiều trường hợp, nên mình có nghĩ đến flag là text trong map, nhưng thử vài trường hợp vẫn không đúng. Nhìn giống 74ScLeo hoặc đại ý là vậy, phần dưới còn chữ WHITEHAT, mình bỏ qua vì nghĩ đó chỉ là nghi binh.
Re300
Đây là một bài .Net rất dễ, không bảo vệ gì cả, chỉ cần patch là thấy flag. Mình không hiểu ý đồ của BTC khi để 300 điểm ở bài này, cũng không hiểu sao flag lại xấu thế.
Re400
Bài này code dài nhưng chủ yếu là code gây nhiễu, thêm nữa do flag ngắn nên dễ bị đoán. Ngay ở đầu cipher (GALF_EHT_WRJ_XR]jRX_JRW_WKH_IODJ) đã có thể thấy chữ THE_FLAG viết ngược rồi. Thử một hồi thì thấy length(plain) = length(cipher) / 2, và flag ở dạng ABC_XYZ_THE_FLAG. Tiến hành Re một chút, xem trong hàm gena để ý có đoạn code sau:
Mã:
arr = genar(a2);
if ( plain[i] >= 'A' && plain[i] = 'f' && plain[i]
Chỉnh sửa lần cuối bởi người điều hành: