1. XOR decode. XOR키는 대부분 유일한 것을 쓰므로 XOR연산을 반복하고 있다면 유심히 보자


2. 문자열들. 각 악성코드마다 특별한 문자열이 있을 것이다. 그것을 이용하자


3. unpack 함수들. 상용 packer를 쓴경우가 아니라면 그것은 자신만의 packer일 가능성이 높다. 이를 패턴화하자


4. icon. icon 역시 unique한 icon을 넣는다. 물론 안넣는경우도 있다만...


5. rich header정보. 컴파일 시의 정보는 역시 환경이 같으면 같을 것이고 특히 rich header의 xor키는 비슷한시기 같은 컴파일의 경우 XOR key가 같은 경우가 많다.


6. pdbpath나 pdb의 guid(or signiture)또한 같은 visual studio project에서 컴파일 되었다면 같기 때문에 사용할 수 있다.



위의 내용 모두 없을 때도 있고  있어도 아닌 경우가 있으므로 종합해서 따지도록 하자

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

악성코드들의 패킹해제  (0) 2019.04.26
ida 사용법 모음  (0) 2019.01.21
pdb 정보에 대하여  (0) 2019.01.17
rich header(2)  (0) 2018.09.21
rich header  (0) 2018.09.17

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

,

바이너리의 rich header가 얼마나 유사한지 알려주기 위한 프로그램의 아이디어를 떠올려 봤는데 rich header에서 나온 각 prodid 중 몇개나 일치하는지를 가지고 유사성을 구별 할 수 있을 것 같아 짜보았다.



I thinks idea of ​​a program to let me know how similar the binary's rich header is.

this idea is matching prodid.





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

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

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

,

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, 아는척하기위한 블로그. 저는 귀엽습니다

,