악성코드 분석
Posted 2007. 7. 31. 11:15, Filed under: Study/Computer Science어제 본 샘플-
난 실행압축을 끝까지 못풀고, 드랍하는 파일을 수집을 못해서 완전히 분석을 못했는데.
정진성 주임님이 달아주신 코멘트
철우군 보세요. ~
- msgr.dll 은 C:\WINDOWS\Downloaded Program Files 에 설치가 됩니다.
(여기는 액티브 엑스가 설치 되는 곳이죠.)
- 해당 폴더내 파일(%windir%\Downloaderd Program Files) 은 탐색기에서는
보여지지 않습니다. 다른 파일 관리자를 써보세요. TC 같은 거..
- msgr.dll 은 Win-Trojan/Downloader.9728.CO 로 기진단 되네요. ; )
- 실행압축 해제는.... 올리에서 아래 0040B098 에 BP 걸고
shift+F9 (Pass exceoption to standard handler and run)로 달리세요.
(여기는 액티브 엑스가 설치 되는 곳이죠.)
- 해당 폴더내 파일(%windir%\Downloaderd Program Files) 은 탐색기에서는
보여지지 않습니다. 다른 파일 관리자를 써보세요. TC 같은 거..
- msgr.dll 은 Win-Trojan/Downloader.9728.CO 로 기진단 되네요. ; )
- 실행압축 해제는.... 올리에서 아래 0040B098 에 BP 걸고
shift+F9 (Pass exceoption to standard handler and run)로 달리세요.
0040B050: 60 PUSHAD
0040B051: FC CLD
0040B052: 0FB60534BC4000 MOVZX EAX, BYTE PTR [40BC34]
0040B059: 85C0 TEST EAX, EAX
0040B05B: 7531 JNZ 40B08E
0040B05D: B850B04000 MOV EAX, 0040B050
0040B062: 2B0504BC4000 SUB EAX, [0040BC04]
0040B068: A330BC4000 MOV [40BC30], EAX
0040B06D: A100BC4000 MOV EAX, [40BC00]
0040B072: 030530BC4000 ADD EAX, [0040BC30]
0040B078: A338BC4000 MOV [40BC38], EAX
0040B07D: E89A000000 CALL 0040B11C
0040B082: A350BC4000 MOV [40BC50], EAX
0040B087: C60534BC400001 MOV BYTE PTR [0040BC34], 01
0040B08E: 833D50BC400000 CMP [0040BC50], 00000000
0040B095: 7507 JNZ 40B09E
0040B097: 61 POPAD
0040B098: FF2538BC4000 JMP [0040BC38]
0040B051: FC CLD
0040B052: 0FB60534BC4000 MOVZX EAX, BYTE PTR [40BC34]
0040B059: 85C0 TEST EAX, EAX
0040B05B: 7531 JNZ 40B08E
0040B05D: B850B04000 MOV EAX, 0040B050
0040B062: 2B0504BC4000 SUB EAX, [0040BC04]
0040B068: A330BC4000 MOV [40BC30], EAX
0040B06D: A100BC4000 MOV EAX, [40BC00]
0040B072: 030530BC4000 ADD EAX, [0040BC30]
0040B078: A338BC4000 MOV [40BC38], EAX
0040B07D: E89A000000 CALL 0040B11C
0040B082: A350BC4000 MOV [40BC50], EAX
0040B087: C60534BC400001 MOV BYTE PTR [0040BC34], 01
0040B08E: 833D50BC400000 CMP [0040BC50], 00000000
0040B095: 7507 JNZ 40B09E
0040B097: 61 POPAD
0040B098: FF2538BC4000 JMP [0040BC38]
고맙습니다.
pushad 해서 레지스트리 값 백업한 다음에 popad 해서 복구한후에 실제 프로그램 시작점으로 jmp
알고 있는 패턴인데도 잘 안보인다
디버거로 따라갈 때는 항상 어느 선까지 쫒아들어갈껀가 고민하는게 너무 힘들다.
너무 세부적인거까지 따라가봤자 결국은 나한테는 별 의미없는 연산, 혹은 시스템내에서 사용하는 콜
그렇다고 안따라가기에는 그 안에 뭐가 숨어있을 지 알 수 없어서 계속 보게되고
보다보면 어느새 미궁- 여기는 어디인가 ㅠ_-
여튼 또 하나 배웠습니다.
친절한 피드백에 감사 ^^
--------------
방금 가르쳐주신대로 풀어봤는데 잘 된다.
그리고 내가 어제 팩을 못푼건 아니었다. 풀고보니 내가 어제 따라갔던데랑 똑같네.
이 방법이 훨씬 쉽긴 하지만..shift+f9 라는 방법이 있다니 ㅋ
(난 pushad에 레지스트리값이 저장되는 곳에 하드웨어 bp를 걸고 반복해서 따라가는 방법으로 풀었다)
풀고난 후의 코드를 이해못했던건데.
Naked Packer V1.0 으로 실행압축되있는 이 코드- 상당히 독특하다.
압축을 풀고보면 push와 jmp의 나열.
대체 어디서 함수를 호출하고 어떤 루틴을 타는건가 모르겠다-_-;
그 jmp를 따라가면 또 무지하게 긴 jmp로 둘러싸인 루프가 나와서 뭔가 했었는데
스택에 어떤 값을 push 한 담에 jmp 로 어딘가로 뛴다.
거기서 무지하게 긴 루프를 도는 과정에서 자기가 호출하고자 하는 api의 메모리상의 주소를 얻어서
해당 api의 파라미터와 함께 스택에 push 해둔다.
마지막에 호출하고 싶은 api 시작주소로 return하면 그때 스택에 남아있던 값이 그 api의 파라미터가 되어
해당 api가 호출된다.
루프를 마지막으로 탈출하는 지점에 bp를 걸고보니 위와 같은 방식으로 api를
호출하는 거였다.
대체 어디서 함수를 호출하고 어떤 루틴을 타는건가 모르겠다-_-;
그 jmp를 따라가면 또 무지하게 긴 jmp로 둘러싸인 루프가 나와서 뭔가 했었는데
스택에 어떤 값을 push 한 담에 jmp 로 어딘가로 뛴다.
거기서 무지하게 긴 루프를 도는 과정에서 자기가 호출하고자 하는 api의 메모리상의 주소를 얻어서
해당 api의 파라미터와 함께 스택에 push 해둔다.
마지막에 호출하고 싶은 api 시작주소로 return하면 그때 스택에 남아있던 값이 그 api의 파라미터가 되어
해당 api가 호출된다.
루프를 마지막으로 탈출하는 지점에 bp를 걸고보니 위와 같은 방식으로 api를
호출하는 거였다.