Okoonzz

@Okoonzz

Joined on Nov 13, 2022

  • 1. Unpackme Đề: Ở đây, ta nhận được một file có tên là "binary", tiến hành tải file này về và ta được kết quả như sau: Nhìn sang hint lúc này ta nhận được là UPX là gì. Tiến hành tra google tìm hiểu UPX Thử làm xem nếu như không giải nén file theo UPX thì nó sẽ ra gì. Và tất nhiên khi bỏ vào IDA-64 mã sẽ giải được ra như sau: Ở đây thấy được rẳng chỉ duy nhất 7 dòng và vẫn chưa thấy được vấn đề liên quan cũng như flag của bài
     Like  Bookmark
  • Tải file tại đây. LessEQualmore Bài này dựa trên bài tham khảo của brosu (người đã hoàn thành trong giải) Trước khi tìm hiểu cách giải bài này ta sẽ cùng tham khảo qua bài viết tại đây. Bài này đầu tiên khi debug thật sự cũng chả thấy gì, ngoài thấy chỉ load nội dung ở file chal.txt vào (nhưng có lẽ sẽ rất khó thấy quy luật bởi có lúc thì nó sẽ nhảy tới 3 có lúc thì nhảy tới 6) và sau đó nhập vào để check flag. Sau khi một hồi ngồi decompile lại toàn bộ nội dung của chương trình, thì sẽ thấy được đây chính là một bài vm dùng để check flag. Không hiểu sao lần này IDA trả về mã giả khá ngu. Đây chính là nội dung mà IDA trả về:
     Like 2 Bookmark
  • wanna-one vpn Vẫn như thường lệ, tiến hành kiểm tra xem file này là gì: Thấy được rằng đây là ELF-64 và điều đặc biệt ở đây là "not stripped". Có vẻ như bài này khá dễ. Tiến hành phân tích ở IDA. Điều thú vị ở đây là sau khi mình tiến hành xem mã giả trả về là gì thì chương trình lại không cho :(( Thế là phải ngồi đọc mã ASM (mình rất lười cũng may là nó khá đơn giản :v)
     Like  Bookmark
  • Tải file tại đây. Chain Khi mở file này, nhận thấy được rằng được viết và complie trên macbook bởi mã trả về toàn ARM =)) Đọc qua mã giả trả về thấy được rằng logic bài này khá đơn giản, chỉ việc xor và trả lại kết quả. Nhưng một điều đáng chú ý ở thử thách này đó chính là (_BYTE *)off_210F4. Khi đọc qua, nhận thấy rằng đây là một địa chỉ của offset nào đó. Tiến hành kiểm tra thì thấy rằng nó dẫn đến một hàm sub_105AC và hàm này có địa chỉ tại 0x105AC. Khi vào được hàm này kiểm tra thì đây chính là hàm đó. Ở code C ta có được như *(ptr + i) = ptr[i] với ptr chính là con trỏ trỏ đến một địa chỉ nào đó. Thì đoạn code này cũng tương tự, thực chất nó chính là dword_210F4[dword_21040[i]]. Cuối cùng, chỉ cần tìm ra được giá trị của "dword_210F4" là gì. Vì như đã nói ở trên nó chính là con trỏ trỏ đến một địa chỉ nào đó thì giá trị của "dword_210F4" chính là địa chỉ của hàm sub_105AC. Sau khi có được tất cả các dữ kiện cần thiết, đây là script để giải bài này:
     Like  Bookmark
  • Đây là 3 giải khác nhau, nhưng về độ khó cũng như kiến thức mới khá hay nên mình đã gộp chúng lại với nhau để phân tích cho có mạch :>> Tải file tại đây. MANGO(JUST) Đối với bài này tuy thuật toán của nó rất dễ nhưng cách nhận ra nó và biết nó mới là một vấn đề :))). Ở đoạn ASM này có thể nhìn qua thấy được rằng sẽ in ra terminal dòng chữ Type plain text that will be converted , tiếp đến nhập "flag" vào. Chú ýe kĩ sau đoạn fmt_Fscanln có những mov như mov rax, [rdx] và mov rbx, [rdx+8] chính là dữ liệu nhập vào là độ dài của chuỗi được nhập vào. Tiếp đến là hàm chuyển đổi từng ký tự sang OCT (này là do mình đã chuyển đổi lại chứ trong mặc định thì phải debug mới thấy rõ ràng được). Kiểm tra hàm này chuyển đổi như thế nào. Khi vào hàm này và debug thứ đạp vào mắt mình đầu tiên đó chính là đoạn code này.
     Like  Bookmark
  • Tải file tại đây. DECOMPILE-ME Đề bài: Đối với thử thách này, khi tải về nhận được một file định dạng .pyc và một file output. Có thể tham khảo thêm file với đuôi .pyc là gì tại đây. Sau khi xác định được hết tất cả, công việc còn lại chỉ cần chuyển được file .pyc về mã nguồn ban đầu của nó là .py. Đây là cách mình đã chuyển về lại file .py ban đầu: $ uncompyle6 -o . decompile-me.pyc
     Like  Bookmark
  • Đề: Tải file tại đây. Trước khi giải bài này, hãy xem qua đoạn code sau: void decimal_to_hexadecimal(int decimal_num) { int i = 0, quotient, remainder; char hexadecimal_num[100];
     Like  Bookmark
  • Crypto + RE Tải file tại đây. Khi lần đầu tiếp xúc với dạng bài như này, mình đã rất lúng túng trong việc xác định các hàm. Nên đã có các anh hint cho mình nó là gì và thế là đã giải được. Đọc qua code của đề bài, thấy được rằng để thực hiện file này cần phải tạo riêng một file với nội dung là "flag.txt" bởi nếu không thực hiện thì khi chạy bình thường sẽ không trả được bất kì kết quả nào. Phân tích các dòng code tiếp theo, thì ta sẽ tiến hành thực hiện nhập vào 2 input và sẽ có một hàm đầu tiên kiểm tra các input này. Phân tích xem hàm này kiểm tra cái gì. Ở đây, thấy được rằng 2 input của ta tiếp tục cho qua một hàm "s". Sau đó sẽ có 2 mảng đó là v8[8] và v9[10], tiếp đến là một vòng for để kiểm tra xem hàm "s" đã làm một điều gì đó với input và lưu kết quả tại biến v6 có bằng với hai mảng v8 và v9 cho trước hay không. Nếu bằng thì tiếp tục chương trình, nếu không thì sẽ thoát. Công việc tiếp theo đó là phải xác định được hàm "s" đã làm gì với input.
     Like  Bookmark
  • Đề: Lời đầu tiên cho em cảm ơn anh Mochi đã hỗ trợ em :> Tải file tại đây Bài này không thể nào đọc bằng code C được bởi file quá nặng chứa rất nhiều hàm cũng như các biến cục bộ. Phải đọc kĩ mới nhìn ra được cách chương trình này hoạt động cũng như thuật toán chính của bài này. Khi phân tích file ta thấy rằng file này có tới 1293 func. Mỗi func này có nhiệm vụ add một con số nào đó vào các code segment, nếu ta nhìn kĩ hơn thì các code segment này lưu cách nhau 8bytes. Và điều đặc biệt hơn đó là nó vẫn giữ địa chỉ các code segment này qua các hàm func. Vậy nên ta có thể xem nó như là một mảng và lần lượt cộng thêm lên một lượng nhất định qua từng func. Hàm này đặt tên là "check[i]". Phân tích đến hàm main, điều ta thấy đầu tiên ở đây là rất nhiều biến cục bộ được lưu trữ tại đây. Để quá trình phân tích dễ dàng hơn thì ta sẽ đổi lại tên một số biến cho dễ hình dung.
     Like  Bookmark