748 words
4 minutes
PicoCTF Reverse Challenge - PicoGym Exclusive END.

Đây là phần cuối của giải PicoGym Exclusive. Tập trung vào cách sử dụng GDB trên Linux. GDB là một tool reverse mạnh được sử dụng dưới dạng CLI và nhờ khả năng đọc tốt của nó thì hầu như bạn có thể giải hầu như tất cả các dạng bài.

#GDB baby step 1#

alt text

Hints: gdb is a very good debugger to use for this problem and many others!

Tải file về và cấp quyền execute cho nó bằng lệnh:

sudo chmod +x [file]

Kiểm tra lại xem đã cấp quyền cho nó chưa. Điều này khá quan trọng vì mình từng quên check khiến cho việc phân tích bị ảnh hưởng.

alt text

Sau khi thử chạy file thì có vẻ không có gì được in ra và ngay lập tức exit code.

alt text

Sử dụng gdb nhằm kiểm tra thêm ở trong file thì như hint ta có thể có một số thông tin thông qua hàm main.

alt text

Để có thể đọc được bên trong hàm main có gì thì việc cần làm bây giờ là bung bên trong nó ra sử dụng câu lệnh disassemble [func].

alt text

Dựa vào đoạn code kia thì có thể nói rằng eax chứa giá trị 0x86342. Quy đổi qua python ta có:

alt text

Flag: picoCTF{549698}

#GDB baby step 2#

alt text

Hints: You could calculate eax yourself, or you could set a breakpoint for after the calculcation and inspect eax to let the program do the heavy-lifting for you.

Đối với cảm nhận cá nhân của mình thì bài này chỉ là một phần cơ bản của việc sử dụng breakpoint vì các bài hiện tại mình được tiếp cận thì không bao giờ bạn có thể chạm đến được nó nếu không đọc được hoặc không nhận ra nó trong lúc phân tích file.

NOTE

Đây là một trong những cốt lõi của các phần mềm reverse engineering.

Như bài đầu thì vẫn cấp quyền execute cho nó và chạy. Kết quả vẫn như bài đầu tiên > Không có output. Sử dụng gdb để phân tích.

alt text

Việc tính tay không ảnh hưởng tới kết quả nhưng biết cách sử dụng breakpoint sẽ giúp tiết kiệm thời gian và tránh bị tính sai khi đi qua nhiều vòng loop ở bên trong code.

Sử dụng cú pháp break [address] dựa vào trong hàm main thì ta có thể đọc được kết quả của eax ở dòng <+56>.

NOTE

Khi sử dụng break thì cần phải cho nó ở trước đoạn code mình muốn lấy kết quả - vì nó phải ở trong khoảng break.

Ta sẽ break ở dòng <+59> nhằm lấy dữ liệu ở dòng trên.

Sau đó dùng print $register để in ra kết quả:

alt text

Flag: picoCTF{307019}

#GDB baby step 3#

alt text

Ở đây sẽ liên quan tới memory layer vì lần này author cố tình giấu đi flag vào trong memory của hàm main.

TIP

Để hiểu được về phần này thì mình khuyên bạn nên đọc qua trước về Endianess giúp hiểu hơn tại sao nó lại tồn tại giữa Big-endian(BE) và Little-endian(LE)

Bắt đầu với việc phân tích hàm main thì đúng như đề đã nói thì 0x2262c96b đã được load vào trong eax.

alt text

Break ở đúng nơi và bắt đầu đọc giá trị bên trong $eax.

alt text

Giờ để biết được trước khi đến với eax thì giá trị bên trong rbp-0x4 đang chứa gì - thật ra là 0x2262c96b. Nhưng có một điều khá hay ho là nó sẽ không được lưu trữ như giá trị ta đưa vào mà sẽ sử dụng kiến trúc Little-endian để lưu.

Sử dụng câu lệnh x/4xb có cấu trúc như sau:

  • x - examine
  • n - repeat count
  • f - display format
  • u - unit size
$addr - $ như ref và không dùng dấu ngoặc vuông []

alt text

Flag: picoCTF{0x6bc96222}

#GDB baby step 4#

alt text

Hints: A function can be referenced by either its name or its starting address in gdb.

Lần này nếu để ý phần functions thì có thêm func1. Mình sẽ nói đến nó trong quá trình phân tích hàm main.

alt text

Khi đọc hàm main thì không có gì ngoài việc di chuyển giá trị 0x28e qua lại và cuối cùng gọi code segment 0x401106 ở đây là func1.

alt text

Vậy công việc tiếp theo là đọc qua hàm func1.

alt text

Bên trong func1 thì có một instruction mới với cú pháp là imul với nghĩa interger multiply

Phân tích đoạn này có ý nghĩa như sau:

  • eax(1st) - nơi sẽ lưu
  • eax(2nd) - số được nhân
  • 0x3269 - số bị nhân

=> lấy eax(2nd) * 0x3269 rồi lưu vào eax(1st).

Flag mà author muốn đó là số bị nhân dưới dạng decimal.

Flag: picoCTF{12905}

PicoCTF Reverse Challenge - PicoGym Exclusive END.
https://stewmalwarehunter.id.vn/posts/picogym-exclusive-part3/picoctfgym3/
Author
Stew
Published at
2025-07-23
License
CC BY-NC-SA 4.0