지난번 포스트에서 Keylogger 에 대해서 간단하게 알아 보았습니다.
이제 기능들은 구현이 되었는데 이걸 프로그램 배포자가
원하는 기능을 입력 했을 때 정보를 GitHub로 보내도록 하고 싶지 않나요?
그러기 위해서는 Network 통신이 필요합니다.
그 중에서도 단방향 통신인 UDP가 아닌
양방향 통신
3Way-HandShaking인 TCP를 사용하는 방법을 알아 보겠습니다.
(바로 전 포스트에서 말씀드린 것처럼 악용하시는 분이 계실 수도 있기에 완성된 코드는 설명하지 않습니다. 물론 응용해서 하실 분들도 계시겠지만 이 포스트의 목적은 어디까지나 필자 본인의 개인 공부 및 교육용이기 때문입니다. 제가 올리는 내용들을 악용하셔서 문제가 발생 할 경우 즉시 삭제 조치 하겠습니다. 또한 악용시 책임은 본인에게 있습니다.)
우선 TCP통신을 위해서는 Server와 Client가 있어야 합니다.(Server역할을 하는 PC입니다)
위 사진에서 보면 알 수 있듯이 Server 역할을 하는 PC에서는 host IP와 port 번호를 지정해줍니다.
이때 port 번호는 int type 이어야 합니다.
s 라는 객체를 선언 해줍니다.
socket.SOCK_STREAM 옵션이 TCP 통신을 하겠다는 옵션입니다.
다음으로 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)은
한 번 사용한 포트를 다시 사용 하겠다는 설정입니다.
s.bind를 사용하여 host와 port를 묶어서 사용할 준비를 합니다.
s.listen(연결 허용 수)를 사용하여 연결을 할 수 있도록 소켓을 활성화 합니다.
conn, addr = s.accept()는 연결이 되었을 경우 addr에 연결 된 PC의 IP정보,
conn에 연결 된 PC의 정보를 각각 저장합니다.
conn.recv(읽어들일 Bytes 수)를 통해 conn 객체에서 보내온 정보를 읽습니다.
conn.send(보낼 내용)를 이용하여 연결된 PC에 내용을 전달합니다.
conn.close()를 이용하여 연결되어 있는 connection 객체를 연결을 해제 합니다.
Server 역할을 하는 PC의 소켓을 닫습니다.
다음은 Client 역할을 하는 PC의 코드 입니다.
위 사진에서 알 수 있듯이 TCP Server 역할을 하는 코드에 비해 훨씬 간결하고 짧습니다.
마찬가지로 SOCK_STREAM 옵션을 사용하여 TCP 통신을 하겠다는 선언을 해줍니다.
connect기능을 통해 TCP Server 역할을 하는 PC의 IP와 Port 번호를 입력해서 연결합니다.
send 기능을 이용해 내용을 전달합니다.
마찬가지로 TCP Client 또한 csock.recv() 가 있습니다. (저는 일부러 생략 했습니다)
마지막으로 연결 되어있던 csock 객체를 close()를 통해 닫아 줍니다.
이렇게 해서 Python GitHub 연동 프로그램에 네트워크 기능 까지 알아 보았습니다.
Python GitHub 연동 프로그램과 네트워크 기능을 합쳐서 정말 Virus 처럼 만들 수도 있습니다.
하지만 이에 대한 주의사항과 이 포스트의 목적은 여러번에 걸쳐서 말씀 드렸습니다.
그 부분 유의 해 주시고 GitHub에 올라가 있는 내용은 base64로 암호화 되어 저장이 되어 있습니다.
이 부분 확인 후 (디코딩은 여러분이 직접 해보세요 ! 디코딩도 필자는 직접 해봤습니다!)
Python GitHub 연동프로그램은 마치도록 하겠습니다.
다음은 GitHub에 보내진 정보들이 base64로 암호화된 모습입니다.
※ 다시 한 번 사용하실 때 악용 하지 마세요 ! 당신의 양심입니다. :)
그리고 시간 되는 대로 공부했던 거나 공부 하는 것들 중간 중간 올리도록 하겠습니다.
* [출처] Black Hat Python
* [출처] Everything 블로그 본인