티스토리 뷰

분석사유
1. 남산도서관에 온 기념 (글 게시일이 2017년인데 정작 내용 다 작성한건 2018년 3월임)

2. 분석하는 방법을 다 까먹고 멍청멍청해 질까봐 간만에 분석해봄

3. 어차피 기능에 대해선 똑똑한 분들이 분석해놓은 자료가 많을테니 패스하고 암/복호화 알고리즘에 대해서만 자세히 들여다봄
 

관련자료
 
바쁜현대인들을 위한 3줄 요약
1. 남산도서관 식당은 저렴하다.
2. 남산도서관 야경은 아름답다.
3. 귀찮아서 미루다가 이제서야 포스팅한다.
 
분석방법
1. IDA를 킨다
2. Olly DBG를 킨다.
3. F2, F7, F8, F9를 연타한다.
4. 마음에 안정을 얻는다.
 
분석
분석하기전에 밥을 먹는다. 남산도서관은 저렴한 가격에 맛있는 식사들을 제공한다.

남산 도서관 가는길에 있는 삼순이 계단

저렴하고 맛있는 남산 도서관. 제육덮밥이 가격대비 훌륭했다.
 
IDA WinMain을 보면 인자가 들어가지 않는 함수 5개가 쪼르륵 실행되고 난 후 CreateThread스럽게 생긴 어느 함수가 실행된다. (dword_4C1C94)
그렇다면 위에 있는 다섯 개의 함수들은 API 주소 가져와서 메모리에 저장해주는 녀석이겠지 뭐..
 


메인함수


대충 때려 맞춘게 맞는지 확인하러 첫번째 함수를 들어가면 아래와 같은 코드를 볼수있다. 역시 인생은 감이다(아니다.).
코드는 "memset -> memcpy -> 복호화 추정 -> GetProcAddress -> API 주소 저장" 형태가 계속 반복된다.

반복


오늘의 주인공인 암/복호화 함수 sub_4092f0 함수만 분석하면 귀찮은 포스팅은 끝나겠지.

귀찮....

 
XX … 함수가 2개 더 있다….. 차근차근 확인해보자. 함수 실행 전까지의 루틴을 분석해보자.
1. 인자로 받은 데이터는 암호화된 문자열로 추정됨
2. ExtendTable 변수 (임의로 지정한 변수명)를 0으로 초기화
3. v4 변수를 0xFF만큼 초기화
4. v1 에 들어가는 값은 무시
5. InitKey (임의로 지정한 변수명) 부터 연속된 변수들에 16바이트 데이터를 입력해줌
 
위의 과정을 거치고 번째 함수를 실행하게 된다. 함수의 인자 값은 초기화해준 변수 (ExtendTable, v4) 16바이트 데이터 (InitKey, v7, v8, v9), 번째 인자의 길이를 넣어준다. 인자에 암호화된 문자열이 들어가지 않는 것으로 보아 복호화를 수행하는 함수가 아니라 16바이트 데이터를 기반으로 0x100 크기의 복호화에 필요한 데이터를 생성해 주는 것으로 유추할 있다.
함수 내부를 살펴보자.


첫번째 함수

 
함수 내부에는 두 개의 반복문이 존재한다첫 번째 반복문은 인자로 받은 0x100 크기의테이블에 0 ~ 0xFF까지의 문자열을 생성한다,
두 번째 반복문에서는 16바이트 키의 특정 위치값을 테이블의 특정 위치와 더해 자리를 섞어준다. Memory View와 함께 확인해보면 다음 그림의 결과가 나온다.
 

메모리뷰

복호화를 위한 테이블을 얻었다. 이로서 첫함수는 16바이트 데이터를 기반으로 0x100만큼의 데이터를 뒤죽박죽 섞어주는 함수란걸 확인할 수 있다. 두번째 함수를 살펴보기전 지금까지 확인한 내용을 정리해 보자면 다음과 같다.

데이터 흐름

두번째 함수를 살펴보자. 두번째 함수의 인자들은 확장한 0x100바이트의 키 테이블, 암호화된 문자열 + 1, 문자열, 첫번째 데이터이다.
함수 내부를 살펴보자

두번째 함수 내부

풀어서 설명하기에는 내 머리가 너무 나쁘다. 정리해서 적어보자
ExpandTable + 0x100 : count : 1씩 증가하는 카운트 값
ExpandTable + 0x101 : index : Swap할 데이터의 위치를 가리키는 Index (테이블의 위치값 + 기존 값)
ExpandTable[count] 의 값과 ExpandTable [offset_0x101] 데이터를 SWAP
 
위와 같이 연산을 수행한 뒤 복호화 할 문자열의 위치를 count위치의 데이터와 index위치의 데이터를 더해 암호화된 문자열과 xor을 수행하면서 복호화가 진행된다.
 
분석한 내역을 토대로 변수명을 변경해 보았다.

별 차이 없음

대략적인 구조는 다음과 같다.

진짜 대략적인 구조

구현
아무리 글을 써보아도 설명이 그지같다고 느껴져 코드를 첨부했다.
 

Key Expand 함수

 

Decrypt 함수

 
결과보기

IDAPYTHON 활용

 
IDAPYTHON Script (코드 더러움 주의) : https://github.com/saweol/coinmanager_Decryptor
 
포스팅 글을 다 작성하고 마무리를 위해 남산도서관 밖을 나와 남산타워를 바라보며 마음의 안정을 찾았다.

남산도서관 밤은 이렇게나 아름답다.
 
결론
분석은 진작에 끝났지만 필력부족으로 + 귀찮음 때문에 이제서야 포스팅함 .
어떻게 마무리 지어야 할지 모를땐 역시...

 
 
P.S 1 : 샘플의 IOC와 분석내역을 공개해주신 EST Security분들에게 감사하단 말씀을 드린다.
P.S 2 : 며칠후 EST Security는 Operation Arabian Night 라는 보고서를 공개하는데……. !!!!!
 


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함