visual studio2010에서 c언어로 코딩을하고 release 모드로 컴파일하여 ollydbg로 디버깅시에 내가짠 코드가 보이지 않습니다.
코드가 보이긴 하는데 예로 아래와 같은 간단한 코드인데 불구하고 2+3한과정없이 그냥 5만 olly에서 보여주더라구요.
결론은..몇 차례 멘붕끝에 알아 냈습니다. 알아냈지만 여전히 궁금한 부분은 존재하네요.. 일단 포스팅을 시작하겠습니다.
<그림.1>
그림 1과같이 코드는 간단합니다. 함수를 이용해서 덧셈 연산하는 코드입니다.
저 코드를 olly로 열어 보았습니다.
<그림.2>
그림2에서와 같이 sum(2,3) 과 2 + 3 연산과정이 없이 그냥 push 5를 해버리지요 참난감합니다.
저함수를 빠저나와 위에서부터 코드 한땀한땀 분석해도 답이없길래 xp에서 visual studio 6.0, 2010을 설치해보고 했는데 6.0에서는 그냥 릴리즈 모드에서만으로도 코드가 정확히 보였는
데 visual2010에서만 코드가 저런식으로 나오더군요. windows7 에서 visual studio 6.0, 2010 결과 동일했습니다.
여기서 visual 2010에 문제로 파악되 검색을 했고 테스트결과 원인을 해결했습니다.
<그림.3>
프로젝트 속성 > 구성 속성 > c / c++ > 최적화 > 사용안함
그림 3과같이 설정할경우 고민했던 코딩 연산과정을 자세히 확인할 수 있습니다.
<그림.4>
그림 2와 비교해보시면 확실히 코드가 이해하기 쉽게 보여줍니다.
그러나 여기서 궁금증이 생기더라구요.
목적은 악성코드 분석인데 만약 악의적인 공격자가 코드를 저렇게 만들어 배포한다면 저걸 어떻게 디버깅을 할까라는 생각이듭니다.
분명 이건 안티디버깅도 아니며, unpack 된 상황도 아닌데 말이저, 혹시 그림2와같은 상태로 코드가 보일때 분석하기 쉽게 코드를 볼수있는방법이나.
해결법을 아시는분은 공유좀 부탁드리겠습니다.^^
'[REVERSING]' 카테고리의 다른 글
MBR 확인 (0) | 2013.10.21 |
---|---|
UPX Manual unpacking (0) | 2013.06.19 |