부동산, 채권, 주식, 경제흐름 자료를 모아 보는 블로그입니다.

Script Downloader 분석 - 4 ( XMLHTTP) 본문

Analysis

Script Downloader 분석 - 4 ( XMLHTTP)

runardor 2016. 4. 1. 00:25

이번장은 Script Downloader 에서 다룰 마지막 부분인 XMLHTTP입니다.


XMLHTTP



이름에서 유추가 가능하겠지만 XMLHTTP == XML + HTTP로 보셔도 크게 무리가 없습니다.



XMLHTTP는 기본적으로 HTTP를 기반으로 통신을 수행합니다.


하지만 WINHTTP와 차이가 존재합니다.




가장 큰 차이는 DATA 전송 방식의 차이입니다.


WINHTTP : 평문으로 된 Parameter를 사용하여 동작


XMLHTTP : XML 형태의 DATA를 사용하여 동작




XMLHTTP의 경우 Parameter 및 설정 내용을 XML DOM 객체에 실어서 서버로 DATA를 Request합니다.


또한 Return 되는 데이터 역시 XML DOM 객체로 받거나 또는 Binary로 Data를 받게 됩니다.




XMLHTTP의 기본 사용법은 아래와 같습니다. ( 객체 생성 )




XML기반 예제 풀 소스코드는 아래와 같습니다.


출처 : https://gist.github.com/udawtr/2053179



소스코드에 한글로 된 주석부분은 제가 이해를 돕기 위해 작성하였습니다.



XMLHTTP의 경우 3장에서 언급드렸지만 WINHTTP와는 다른게 XMLHTTP의 경우 ADO 객체를 사용하여 FSO 객체까지 전달하여 파일을 생성하게 됩니다.



그렇다면 왜 XMLHTTP는 ADO 객체와 연결해서 사용하냐는 궁금증이 발생하게 됩니다.



여기서 Window 기반의 약간 제반지식이 필요하게 됩니다.



MS에서는 OLE 파일이나 Binary File을 다룰때  빠른 I/O를 보장하기 위해 Stream이라는 개념을 사용하여 파일들을 다루게 해줍니다.



여기서 Stream이란 문자열 하나하나가 아닌 Data Block을 의미하게 됩니다. 일종의 Data 버퍼의 덩어리라고 생각 하시면 됩니다.


물론 이런 Data 버퍼 덩어리를 다루기 위한 Method역시 MS에서 제공하고 있습니다.




XMLHTTP를 설명하면서 "XML DOM 객체에 실어서 서버로 DATA를 Request합니다." 문장을 사용했습니다.


XML DOM객체는 일종의 Stream 객체로 보시면 됩니다. 그렇다면 여기서 ADO는 무슨 역활을 하기에 쓰일까라고 생각하시는 분이 있습니다.




1장에 언급드렸다 시피 ADO는 Universal Data Access 라는 특징이 존재하며, Data의 저장형식과 관계없이 다룰수 있는 장점이 존재합니다.


FSO의 경우 단순하게 파일을 생성하고 써주는 기능을 제공하고 XMLHTTP의 경우 통신기능을 제공하며 Stream형태의 객체를 리턴해주는데


Stream으로 반환된 객체(Ascii나 Text 형태가 아닌 가공된 객체 Data 이므로 )를 FSO로 바로 전달이 불가능합니다.


결론적으로 말하자면 FSO 객체와 XMLHTTP 객체의 가교 역활을 하는 객체가 바로 ADO 객체입니다.


1장의 ADO 객체의 Method중 SavetoFile을 예로 보여드렸습니다. 


2번째 줄의 내용을 잘 읽어보시면 Saves the binary contents of a Stream to a file이라는 문구가 존재합니다.


이러한 특성 때문에 XMLHTTP 예제에서 ADO 객체 코드가 존재하게 됩니다.


그렇다면 WINHTTP는 왜 ADO가 필요없는지 다시 집고 넘어 가보겠습니다.


WINHTTP의 경우 HTTP Response Body에 Asciii Data 평문 형태로 Data가 넘어오게 됩니다.


이 평문 DATA는 Stream 객체가 아닌 String Data이므로 1글자씩 끊어서 변환이후 저장하게 됩니다. 


변환 코드 : objFile.Write Chr( AscB( MidB( objHTTP.ResponseBody, i, 1 ) ) )


XMLHTTP의 경우 이런 변환 코드가 필요가 없습니다.



간단하게 정리하자면


WINHTTP를 쓰는경우는 FSO 객체 + WINHTTP 객체 + 변환코드가 존재해야하며, XMLHTTP를 쓰는경우는 FSO객체 + ADO 객체 + XMLHTTP 객체가 존재해야 합니다.




대부분의 Script Downloader의 경우 WINHTTP, XMLHTTP 전송이 대다수를 차지하게 됩니다.


각 코드별 특징 및 동작방식에 대한 이해만 충분하시다면 어떤 Script Downloader를 만나시더라도 쉽게 분석을 하실수 있을것 입니다.




글쓰는 재주가 다소 부족하여 Base가 되는 설명이나 코드 설명이 다소 부족할 수 있으니 양해 해주시면 감사하겠습니다.



감사합니다.



By runardor











'Analysis' 카테고리의 다른 글

메모리 교체형 악성 코드 분석 - 1  (0) 2016.04.04
Script Downloader 분석 - 3 ( WINHTTP )  (0) 2016.03.31
Script Downloader 분석 - 2  (0) 2016.03.30
Script Downloader 분석 - 1  (0) 2016.03.30
Comments