stripped 바이너리 main 함수 진입 방법

Sisyphus·2025년 12월 3일

기타

목록 보기
18/19

Entry Point 주소 찾기

pwndbg> info file
Symbols from "/home/ion/wargame/dreamhack/Base64_Encoder/deploy/chall".
Native process:
        Using the running image of child Thread 0x7ffff7fb1740 (LWP 3594).
        While running this, GDB does not access memory from...
Local exec file:
        `/home/ion/wargame/dreamhack/Base64_Encoder/deploy/chall', file type elf64-x86-64.
        Entry point: 0x555555555180
        0x0000555555554318 - 0x0000555555554334 is .interp
        0x0000555555554338 - 0x0000555555554368 is .note.gnu.property
        0x0000555555554368 - 0x000055555555438c is .note.gnu.build-id
        0x000055555555438c - 0x00005555555543ac is .note.ABI-tag
  • info file 명령어로 Entry point 주소 찾기
  • Engry point : 0x555555555180

main 함수 주소 찾기

pwndbg> pdisas 0x555555555180 10
 ► 0x555555555180    endbr64
   0x555555555184    xor    ebp, ebp                    EBP => 0
   0x555555555186    mov    r9, rdx
   0x555555555189    pop    rsi
   0x55555555518a    mov    rdx, rsp
   0x55555555518d    and    rsp, 0xfffffffffffffff0
   0x555555555191    push   rax
   0x555555555192    push   rsp
   0x555555555193    xor    r8d, r8d                    R8D => 0
   0x555555555196    xor    ecx, ecx                    ECX => 0
   0x555555555198    lea    rdi, [rip + 0x351]          RDI => 0x5555555554f0 ◂— endbr64
   0x55555555519f    call   qword ptr [rip + 0x2e33]    <__libc_start_main>

   0x5555555551a5    hlt
   0x5555555551a6    nop    word ptr cs:[rax + rax]
   0x5555555551b0    lea    rdi, [rip + 0x2eb1]         RDI => 0x555555558068
   0x5555555551b7    lea    rax, [rip + 0x2eaa]         RAX => 0x555555558068
   0x5555555551be    cmp    rax, rdi
   0x5555555551c1    je     0x5555555551d8              <0x5555555551d8>

   0x5555555551c3    mov    rax, qword ptr [rip + 0x2e16]     RAX, [0x555555557fe0] => 0
   0x5555555551ca    test   rax, rax
   0x5555555551cd    je     0x5555555551d8              <0x5555555551d8>
  • call qword ptr [rip + 0x2e33] <__libc_start_main> 위에 rdi 레지스터에 대입되는 값이 main 함수의 주소
  • main : 0x5555555554f0

pwndbg> nearpc 0x5555555554f0
 ► 0x5555555554f0    endbr64
   0x5555555554f4    push   rbp
   0x5555555554f5    mov    rbp, rsp
   0x5555555554f8    sub    rsp, 0xc0
   0x5555555554ff    movabs rax, 0x657962206f686365         RAX => 0x657962206f686365 ('echo bye')
   0x555555555509    mov    edx, 0                          EDX => 0
   0x55555555550e    mov    qword ptr [rbp - 0x30], rax
   0x555555555512    mov    qword ptr [rbp - 0x28], rdx
   0x555555555516    mov    qword ptr [rbp - 0x20], 0
   0x55555555551e    mov    qword ptr [rbp - 0x18], 0
   0x555555555526    mov    eax, 0                          EAX => 0
  • nearpc 명령어로 해당 주소 근처의 명령어를 확인해보면 main 함수의 프롤로그 확인 가능

main 함수 진입하기

pwndbg> b * 0x5555555554f0
Breakpoint 1 at 0x5555555554f0
  • main 함수 주소에 break point 설정

pwndbg> c
Continuing.

Breakpoint 1, 0x00005555555554f0 in ?? ()
  • continue 명령어를 입력하면 main 함수로 진입

LEGEND: STACK | HEAP | CODE | DATA | WX | RODATA
─────────────────────────────────[ REGISTERS / show-flags off / show-compact-regs off ]─────────────────────────────────
*RAX  0x5555555554f0 ◂— endbr64
 RBX  0
*RCX  0x555555557d78 —▸ 0x555555555220 ◂— endbr64
*RDX  0x7fffffffded8 —▸ 0x7fffffffe1d6 ◂— 'HOSTTYPE=x86_64'
*RDI  1
*RSI  0x7fffffffdec8 —▸ 0x7fffffffe19e ◂— '/home/ion/wargame/dreamhack/Base64_Encoder/deploy/chall'
*R8   0x7ffff7e1bf10 (initial+16) ◂— 4
*R9   0x7ffff7fc9040 (_dl_fini) ◂— endbr64
*R10  0x7ffff7fc3908 ◂— 0xd00120000000e
*R11  0x7ffff7fde660 (_dl_audit_preinit) ◂— endbr64
*R12  0x7fffffffdec8 —▸ 0x7fffffffe19e ◂— '/home/ion/wargame/dreamhack/Base64_Encoder/deploy/chall'
*R13  0x5555555554f0 ◂— endbr64
*R14  0x555555557d78 —▸ 0x555555555220 ◂— endbr64
*R15  0x7ffff7ffd040 (_rtld_global) —▸ 0x7ffff7ffe2e0 —▸ 0x555555554000 ◂— 0x10102464c457f
*RBP  1
*RSP  0x7fffffffddb8 —▸ 0x7ffff7c29d90 (__libc_start_call_main+128) ◂— mov edi, eax
*RIP  0x5555555554f0 ◂— endbr64
──────────────────────────────────────────[ DISASM / x86-64 / set emulate on ]──────────────────────────────────────────
 ► 0x5555555554f0    endbr64
   0x5555555554f4    push   rbp
   0x5555555554f5    mov    rbp, rsp                        RBP => 0x7fffffffddb0 ◂— 1
   0x5555555554f8    sub    rsp, 0xc0                       RSP => 0x7fffffffdcf0 (0x7fffffffddb0 - 0xc0)
   0x5555555554ff    movabs rax, 0x657962206f686365         RAX => 0x657962206f686365 ('echo bye')
   0x555555555509    mov    edx, 0                          EDX => 0
   0x55555555550e    mov    qword ptr [rbp - 0x30], rax     [0x7fffffffdd80] <= 0x657962206f686365 ('echo bye')
   0x555555555512    mov    qword ptr [rbp - 0x28], rdx     [0x7fffffffdd88] <= 0
   0x555555555516    mov    qword ptr [rbp - 0x20], 0       [0x7fffffffdd90] <= 0
   0x55555555551e    mov    qword ptr [rbp - 0x18], 0       [0x7fffffffdd98] <= 0
   0x555555555526    mov    eax, 0                          EAX => 0
───────────────────────────────────────────────────────[ STACK ]────────────────────────────────────────────────────────
00:0000│ rsp 0x7fffffffddb8 —▸ 0x7ffff7c29d90 (__libc_start_call_main+128) ◂— mov edi, eax
01:0008│     0x7fffffffddc0 ◂— 0
02:0010│     0x7fffffffddc8 —▸ 0x5555555554f0 ◂— endbr64
03:0018│     0x7fffffffddd0 ◂— 0x1ffffdeb0
04:0020│     0x7fffffffddd8 —▸ 0x7fffffffdec8 —▸ 0x7fffffffe19e ◂— '/home/ion/wargame/dreamhack/Base64_Encoder/deploy/chall'
05:0028│     0x7fffffffdde0 ◂— 0
06:0030│     0x7fffffffdde8 ◂— 0x76e1713fc63e8bb3
07:0038│     0x7fffffffddf0 —▸ 0x7fffffffdec8 —▸ 0x7fffffffe19e ◂— '/home/ion/wargame/dreamhack/Base64_Encoder/deploy/chall'
─────────────────────────────────────────────────────[ BACKTRACE ]──────────────────────────────────────────────────────
 ► 0   0x5555555554f0 None
   1   0x7ffff7c29d90 __libc_start_call_main+128
   2   0x7ffff7c29e40 __libc_start_main+128
   3   0x5555555551a5 None
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  • Context 에서 main 함수의 프롤로그 확인 가능

0개의 댓글