본문 바로가기
리버싱/CTF

sockaddr 구조체와 connect 함수

by 즉흥 2022. 10. 4.
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
반응형

'리버싱 > CTF' 카테고리의 다른 글

[SSCTF 2016 Quals] Re2  (0) 2016.07.15

댓글