반응형
이중 하나가 안티디버깅(Anti Debugging) 이다.
개발자가 디버깅을 통해 내부 코드를 공개하기 싫다거나, 디버깅 자체를 막기 위해서 사용하고 있다.
하지만 지금 얘기하는 Float 버그는 올리디버그 프로그램의 버그이다.
현재 많이 알려져 있는 버그로써, Floating-Point Bug 라고 불려지며 올리디버거가 FlD 명령어를 모두 처리하지 못하여 발생하는 버그이다.
분석을 하면서 악성파일이 버그가 적합된건 처음이기 때문에 포스팅을 해둔다(물론 내가 처음본거다 ㅡ.ㅡ; 오해하지 말길 ㅋㅋ)
또한 이것도 어떻게 생각하느냐에 따라서 안티디버깅이 될 수도 있다^^;
우선 코드를 살펴 보자~
코드를 보게 되면 , 이런 부분을 볼 수 있다.
db 0FFh 이 부분을 올리에서 처리 할 수 없어서 올리디버거가 강제 종료 된다.
seg000:0000005E DB 2D 64+ fld tbyte ptr ds:10064h
seg000:0000005E 00 01 00 ; ---------------------------------------------
seg000:00000064 FF db 0FFh
seg000:00000065 FF db 0FFh
seg000:00000066 FF db 0FFh
seg000:00000067 FF db 0FFh
seg000:00000068 FF db 0FFh
seg000:00000069 FF db 0FFh
seg000:0000006A FF db 0FFh
seg000:0000006B FF db 0FFh
실제로 악성파일을 동작시켜보면 다음과 같다.
그림1은 올리디버거에서 복호화 하기 전의 덤프창 내용이다.
아직은 변한게 없기때문에 오류가 나오지 않는다.
(그림 1. FLD를 처리 하기 전)
그림1에서 계속 디버깅을 실행하면 다음과 같이 올리디버거가 종료되게 된다.
(그림 2. FLD 버그로 인한 올리디버거 종료)
그럼 Floating-Point Bug를 피하는 방법을 알아보자
Assem Code 창에서 복호화를 통해 코드가 덧 씌워지는 부분이 있다.
0x0001004A 부분부터 코드가 씌워지기 때문에 그부분을 화면에 출력시키지 않으면 된다.
올리디버거의 Dump창을 코드가 씌워지는 부분까지 드래그(노란색화면)하여 안보면 다음과 같이 오류가 나오지 않고, 분석을 계속 할 수 있다.
한가지 더 Dump창의 FF FF FF FF FF FF FF FF 부분을 모두 사용하지않는 00으로 변경 시키면 된다.
(그림 3. Floating-Point Bug를 피한 디버깅)
이 문제는 Obllydbg 1.x 에서 나오는 버그이며, 현재 Ollydbg 2.0 베타버전에서는 이 문제가 해결된 것으로 확인된다.
또한 Immunity Debugger에서도 나오지않는 버그 이므로, 분석할 시 자신에 취향에 맞게^^ 사용하면 된다.
'분석해보까?' 카테고리의 다른 글
[강좌] 쉘코드(ShellCode)를 OllyDbg로 쉽게 디버깅 해보자 (18) | 2010.11.06 |
---|---|
[PDF 취약점]Adobe Acrobat Reader 0-day 취약점(CVE-2009-4324) (3) | 2009.12.17 |
[정보보호21C]3부 웹 서버 해킹을 통한 악성코드 대량 배포 유행 (2) | 2009.09.10 |
[강좌] UCS2를 Hex로 변환해보자!! (6) | 2009.08.03 |
[정보보호21C]1부 사람의 심리를 이용하여 설치하게 하는 악성코드 Waledac (0) | 2009.07.21 |
댓글