리버싱/CTF

sockaddr 구조체와 connect 함수

즉흥 2022. 10. 4. 15:05
728x90
반응형

CTF 문제를 접하다보면 악성코드 분석 등의 문제에서 바이너리가 통신하는 IP 주소를 구해야 하는 문제가 있다.

 

와이어샤크나 프록시를 이용해서 IP를 구하는 방법이 가장 덜 귀찮지만 리버싱을 통해 IP를 구해야 할 필요가 가끔 있는데,

 

여러 방법이 있겠지만 가장 단순한 방법은 connect 함수에 브레이크 포인트를 설치해 보는 방법이다.

 

https://learn.microsoft.com/ko-kr/windows/win32/api/winsock2/nf-winsock2-connect

 

connect 함수(winsock2.h) - Win32 apps

Connect 함수는 지정된 소켓에 대한 연결을 설정합니다.

learn.microsoft.com

int WSAAPI connect(
  [in] SOCKET         s,
  [in] const sockaddr *name,
  [in] int            namelen
);

 

connect 함수는 위 링크에서 확인할 수 있듯이 두 번쨰 인자로 sockaddr 구조체의 주소를 받는데, sockaddr 구조체를 통해 어느 ip에 연결하고자 하는지 확인할 수 있다.

 

https://learn.microsoft.com/ko-kr/windows/win32/winsock/sockaddr-2

 

sockaddr - Win32 apps

sockaddr 구조는 선택한 프로토콜에 따라 달라집니다.

learn.microsoft.com

struct sockaddr {
        ushort  sa_family;
        char    sa_data[14];
};

struct sockaddr_in {
        short   sin_family;
        u_short sin_port;
        struct  in_addr sin_addr;
        char    sin_zero[8];
};

 

connect 함수와 sockaddr 구조체

 

sockaddr 구조체에 저장된 ip는 구글에 'int to ip' 검색해서 나오는 적당한 컨버터 사이트에서 변환해 ip 주소를 확인할 수 있다.

 

 

https://www.browserling.com/tools/dec-to-ip

 

Decimal to IP Converter - Convert Integer to IP - Online - Browserling Web Developer Tools

 

www.browserling.com

 

.

728x90
반응형