시작하기 앞서,, 본 게시글에 이야기 하는 프로그램은 이경문 교수님께서 공개하신 영상과 SSL에대해 설명한 한 Cisco의 게시물을 바탕으로 작성되었습니다.
(해당 자료들의 제작자 분들,,, 감사합니다,,)
뭐 암튼, 해당 영상을 보면 Client Hello패킷을 쪼개서 보냄으로서, 통신사에서 하는 SNI체크를 우회할 수 있음을 알 수 있습니다.
그래서,, WSASend를 후킹해서 Client Hello패킷만 처음16바이트와 나머지 바이트들을 쪼개서 보내는 프로그램을 작성했습니다.
아마(?) 모든 32비트 브라우져에서 동작 하겠지만 일단 DLL을 인젝션해주는 프로그램은 IE를 타겟으로 잡고 만들었습니다.
아 물런 32비트용으로 작성했기때문에,, 64비트 브라우져에서는 안통합니다. (다음주쯤에 시간나면 이것도 만들 예정)
Download : ie_hook(Release_2.1).7z (19.2.12 PM 6시 수정)
p.s DLL 핵심부분 코드 (나머지 코드는 그냥 WSASend주소 얻어와서 핫패치 적용하는겁니다, 길어서 생략)
int WINAPI hook_WSASend(SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD dwFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine) { DWORD CutLen = 16; sockaddr_in peeraddr; int size = sizeof(peeraddr); getpeername(s, (struct sockaddr *)&peeraddr, &size); if (htons(peeraddr.sin_port) == 443) { BYTE *buf = (BYTE *)(lpBuffers->buf); DWORD org_Len = lpBuffers->len; PCHAR org_buf = lpBuffers->buf; /* Handshake (22, 0x16) - Hello Request (0, 0x00) - Client Hello (1, 0x01) <<<<< 별별별 - Server Hello (2, 0x02) - Certificate (11, 0x0B) - Server Key Exchange (12, 0x0C) - Certificate Request (13, 0x0D) - Server Hello Done (14, 0x0E) - Certificate Verify (15, 0x0F) - Client Key Exchange (16, 0x10) - Finished (20, 0x14) Change Cipher Spec (20, 0x14) Alert (21, 0x15) Application Data (23, 0x17) */ if ((buf[0] == 0x16 && buf[5] == 0x01) && ( (buf[1] == 0x03 && buf[2] >= 0 && buf[2] <= 4) || (buf[1] == 0x00 && buf[2] == 0x02) ) ) { lpBuffers->len = CutLen; p_WSASend(s, lpBuffers, dwBufferCount, lpNumberOfBytesSent, dwFlags, lpOverlapped, lpCompletionRoutine); lpBuffers->len = org_Len - CutLen; lpBuffers->buf += CutLen; DWORD Result = p_WSASend(s, lpBuffers, dwBufferCount, lpNumberOfBytesSent, dwFlags, lpOverlapped, lpCompletionRoutine); lpBuffers->len = org_Len; lpBuffers->buf = org_buf; *(DWORD *)lpNumberOfBytesSent = org_Len; return Result; } } return p_WSASend(s, lpBuffers, dwBufferCount, lpNumberOfBytesSent, dwFlags, lpOverlapped, lpCompletionRoutine); }
4,227 total views, 1 views today