- Today
- Total
Phantom
Start Source Purpose HOW? Solve Start Source push esp push offset _exit xor eax, eax xor ebx, ebx xor ecx, ecx xor edx, edx push 3A465443h push 20656874h push 20747261h push 74732073h push 2774654Ch ; Let's start the CTF: mov ecx, esp ; addr mov dl, 14h ; len mov bl, 1 ; fd mov al, 4 int 80h ; LINUX - sys_write xor ebx, ebx mov dl, 3Ch ; '
32비트 바이너리이며 stripped되어있어서 gdb로 확인은 불가하다. 이것도 correct 아니면 Wrong을 출력하는 프로그램같다 IDA로 열어봐야겠다. if문의 함수의 리턴값이 1일경우 아래 함수를 콜하고 끝나는것 같다. byte_20~25 까지 값이 있고 이걸 짜맞추면 될것 같다. 아직 코딩이 딸려서 무조건 값이 정해져있는것들을 미리 적어놓고 xor 연산을 하였다.
OEP(Original Entry Point)를 찾는 문제이다 패킹때문인지 EXE인건 확인이 되는데 다른건 확인이 안된다. 패커도 UPX같은게 아닌 자체적으로 만든건가 싶다. 호로로로로로로롤로 겁나 길다. IDA로 봐선 잘 모르겠다 한번 열어봐야겠다. 첫번째 루프 jmp로 계속 반복하며 je조건이 충족되면 40A0C3으로 이동한다. 그러니 40A0C3에 BP를 걸고 이동해보자 2번째 루프 VirtualProtect와 GetProcAddress로 프로세스를 불러오는것 같다. 전부 다 불러오면 JNZ조건이 충족하는것 같아보여 JNZ다음에 BP를 걸고 계속 진행해보자 3번째 루프 LoadLibraryA함수로 dll을 로드한다. 그리고 조건이 충족되면 JE로 점프하는것 같다. 40A13E주소에 bp를 건다. 4..