Challenge Description
Now for something a little different. 0x2262c96b is loaded into memory in the main function. Examine byte-wise the memory that the constant is loaded in by using the GDB command x/4xb addr.
The flag is the four bytes as they are stored in memory.
If you find the bytes 0x11 0x22 0x33 0x44 in the memory location, your flag would be: picoCTF{0x11223344}.
Debug this.
Approach and Steps
I started with gdb debugger0_c to load the file into the debugger.
Disassembled it using disass main and go the following.
Dump of assembler code for function main:
0x0000000000401106 <+0>: endbr64
0x000000000040110a <+4>: push %rbp
0x000000000040110b <+5>: mov %rsp,%rbp
0x000000000040110e <+8>: mov %edi,-0x14(%rbp)
0x0000000000401111 <+11>: mov %rsi,-0x20(%rbp)
0x0000000000401115 <+15>: movl $0x2262c96b,-0x4(%rbp)
0x000000000040111c <+22>: mov -0x4(%rbp),%eax
0x000000000040111f <+25>: pop %rbp
0x0000000000401120 <+26>: ret
End of assembler dump.Added breakpoint at 0x000000000040111c by running b *0x000000000040111c and then run the program
Examined the memory using x/4xb $rpb-0x4 to get the flag.
0x7fffffffd9cc: 0x6b 0xc9 0x62 0x22The flag is just the reverse bytes of $0x2262c96b which we found in disassembly because the program’s Endianness is little endian.
Flag
Flag
picoCTF{0x6bc96222}