OllyMemScan
마소 2009년 2월호를 마지막으로 올리디버거 플러그인 연재가 끝이 났습니다.
마지막회는 자작 플러그인이 주제라 두가지 기능을 하는 플러그인을 만들었습니다.
1) 메모리상이랑 파일 상에서 바이너리 컴페어를 하여 후킹 탐지나 변조된 코드 검출
2) xor 에 대한 옵코드를 찾으면서 암호화 루틴을 발견
사용방법은 매우 간단합니다.
DLL: 에 dll 이나 exe의 이름을 넣으면 해당 모듈만 스캔하고,
Scan All Process 를 체크하면 현재 어태치된 프로세스의 전체 모듈을 스캔합니다.
Search Hook 은 변조된 코드 탐지, XOR 은 말그대로 xor 옵코드를 찾습니다.
(xor eax, eax 물론 이런건 찾지 않습니다)
아래는 Search Hook 에 대한 결과 화면입니다.
뭔가 검출된 번지가 겁나 많은데 하나만 적당히 설명을 붙혀보자면,
메모리 0x7C801E1A 번지가 원래 0x8B 인데, 0xC2 로 시작하는 옵코드로 바뀌었다는 얘기입니다.
디스어셈블링 라이브러리를 이용하였으므로 retn 8 이라는 코드로 변조되어 있음을 알 수
있습니다.
그럼 실제로 해당 번지가 정말 변조되어있는지 한번 뛰어가 볼까요.
0x7C801E1A 를 살펴보았습니다.
네. retn 8 이 예쁘게 박혀 있는 것을 볼 수 있고요.
TerminateProcess() 의 엔트리 포인트라는 것도 알 수 있네요.
해당 API 를 무력화 시키기 위해 걍 리턴시켜버리는 코드로 변조했음을 알 수 있습니다.
그외에 수많은 번지가 변조되어 있는데요, 대부분의 짓이 사실 OllyAdvance 가 하는 짓들이랍니다.
궁금하신 분들은 OllyAdvance 를 사용한 상태에서 OllyMemScan 으로 풀 스캔해 보시고,
해당 번지를 직접 뛰어가보세요. OllyAdvance 가 어떤 식으로 코드나 API를 바보 만드는지
쉽게 아실 수 있을겁니다 : )
그리고 아래는 XOR 에 대한 결과 화면입니다.
뭐 이건 별거 없네요 ㅎ
기존에 암복호화 찾는 올리디버거의 플러그인으로 FindCrypt 라는 넘이 있지만
그넘은 기존에 알려져 있는 암호화 라이브러리의 테이블 값을 찾는 원리로 구현되어 있어서
개발자가 걍 xor 로 쉭쉭~ 만든 암호화 루틴은 찾아내지 못하는 단점을 안고 있었습니다.
그래서 xor 에 대한 옵코드를 찾는 기능을 만들어봤습니다. 원리는 xor에 대한 옵코드를 찾아서
동일 레지스터를 xor 하는 쓸모없는 코드는 빼버리고 나머지 코드에 대해 디스어셈블링한겁니다.
간단하죠 :)
SearchHook 은 악성코드나 백도어, 루트킷 등을 분석할때 나름 도움이 되고
XOR은 암호화 코드를 찾을때 FindCrypt 와 함께 사용하면 시너지 효과가 쵸큼 있습니다 :)
본래 아래와 같이 별도의 툴로 만들어서 사용하고 있었던 건데,
플러그인 연재를 진행하며, 이런 플러그인이 공개된게 없어서 올리디버거 SDK를 이용하여
새로이 맹글어봤습니다 :)
(마감의 압뷁에 급하게 만드느라 버그가 있을지 모르겠습니다 ㅠ ㅠ)
window31 2009년 2월.
OllyMemScan.dll
