rich 헤더는 문서화 되지 않은 구조이며 컴파일 정보가 담겨있다.


실행할때 사용되는 정보가 아니기 때문에 없더라도 상관이 없다. 하지만 컴파일 정보를 사용하여 유사도 분석에 참고하는 것이 가능하다. 물론 신뢰성은 매우 낮다. 변조도 쉽고 이를 검사하는 것이 없기 때문.


이제 rich header의 구조에 대해 알아보자.


먼저 offset 0x3C부터 0x3F까지는 PE헤더의 시작부분을 나타낸다.

하지만 rich header는 stub와 PE헤더 사이에 있으므로 이것을 padding을 포함한 rich header의 끝으로 보기도 한다.


그리고 0x80부터 rich header가 시작된다.


Rich라는 문자열 이후. 즉 52 69 63 68 뒤의 4byte가 XOR key로 사용된다.

위 XORkey로 Rich의 앞을 복호화 하면 rich header의 평문이 나오게 된다.


a='''\x15\x10\x52\xB3\x51\x71\x3C\xE0\x51\x71
\x3C\xE0\x51\x71\x3C\xE0\xC2\x3F\xA4\xE0
\x50\x71\x3C\xE0\x3E\x07\x97\xE0\x72\x71
\x3C\xE0\x3E\x07\xA2\xE0\x45\x71\x3C\xE0
\x3E\x07\x96\xE0\x37\x71\x3C\xE0\x51\x71
\x3D\xE0\x22\x71\x3C\xE0\x58\x09\xAF\xE0
\x5E\x71\x3C\xE0\x3E\x07\x93\xE0\x50\x71
\x3C\xE0\x3E\x07\xA6\xE0\x50\x71\x3C\xE0
\x3E\x07\xA1\xE0\x50\x71\x3C\xE0''' #rich 문자열 앞의 byte들
b='\x51\x71\x3C\xE0' #rich 문자열 뒤에 있는 xor key
c=''
for i in range(len(a)):
c+=hex(ord(a[i])^ord(b[i%4]))[2:]+' '

print c

이렇게 평문은 언제나 DanS라는 문자열로 시작하게 된다. 이걸 이용해서 XORkey를 얻을 수도 있다.(XOR된 첫 4byte를 DanS로 XOR하면 XOR key가 나온다.)


이렇게 나온 byte들을 prodid값들과 매칭하여 컴파일러 정보를 보여준다.



'악성코드 분석 관련' 카테고리의 다른 글

악성코드들의 패킹해제  (0) 2019.04.26
ida 사용법 모음  (0) 2019.01.21
pdb 정보에 대하여  (0) 2019.01.17
악성코드의 yara rule 짜기 좋은 패턴들  (0) 2018.09.27
rich header(2)  (0) 2018.09.21

WRITTEN BY
Dukup11ch1
무근본, 실력 0, 아는척하기위한 블로그. 저는 귀엽습니다

,