이번 내용도 간단한..
다들 파일을 디버깅 해보면서 올리디버거를 많이 쓰셔보셨을 탠데 자기가 컴파일러로 프로그램 만들어서
디버깅을 하다보면 아래와 같은 현상을 볼 수 있을 것이다. ( 없을 수도 있구요. )
빨간색 네모쳐진 부분을 보시면 원본 소스가 보이고 있다는 것을 아실 수 있습니다.
저도 처음에 리버싱을 공부하면서 저런 현상을 많이 봤었지만 그냥 신기해 하지 않고 넘어갔었지만
이번에는 알아보았습니다.
소스가 뜨는 것으로 보아 이것은 분명히 소스파일을 읽어온다고 생각해 볼 수 있습니다.
그래서 올리디버거를 올리디버거로 디버깅 해보았습니다. 그리고 CreateFile함수에 브포를 걸어두고 살펴보았습니다.
(잘 안보이시면 클릭)
프로그램을 올디에 붙혀서 EP에서 멈출때까지 읽어온 파일들 입니다. 보니까 단순히 해당 파일, dll하고 그에 대응하는 udd파일만을 가져오고 있는 것을 알 수 있었습니다. 아직까지 소스파일은 없는거 같습니다.
이제 프로그램에서 제가 짠 소스 부분이 시작되는 부분은 0x004113C0 부분 입니다. 해당 부분으로 가보겠습니다.
가려고 봤더니 해당 올디를 디버깅하고 있는 올디에서 또 멈췄습니다. 이번에는 어떠한 파일을 가져오는지 봐보니
cpp파일을 읽어오고 있는 것을 알수 있었습니다. 그러면 답은 나왔습니다. 실제로 저 cpp파일을 해당 루트에서 지워보니 소스파일을 읽어오질 못하더군요. 하지만 여기까지는 알겠는데 제 예상과 약간 빗나간 결과라 당황했습니다.
전 먼저 프로그램을 만들면서 생긴 pdb파일 즉, 심볼파일이 먼저 읽힐 줄 알았습니다. 하지만 심볼파일은 CreateFile함수가 읽어오고 있진 않았습니다. 그러면 심볼 파일을 안 읽느냐??
그건 아니었습니다. 심볼 파일을 지우고 소스파일은 그대로 놔두고 다시 디버깅 해본 결과 아까 보였던 소스파일 자체가 보이지 않았습니다. 반대로 심볼 파일만 놔두고 소스파일을 지우면 소스는 안보여지고 현재 디버깅 하는 곳이 원본 소스에서 몇번째 줄인지만 나왔습니다.
위와 같은 식으로 나왔습니다. 즉 결론을 내보면 심볼 파일로부터 먼저 정보를 얻고 심볼 파일 얻기를 성공하면
소스파일을 얻어오는 형식입니다. 그래서 전부 성공하게 되면 위와 같이 소스파일이 나오는 것입니다.
이제 왜 소스코드가 아래 나오는지 아시겠죠??
'My Study > Reversing' 카테고리의 다른 글
Assembly 점프 문 (4) | 2010.02.26 |
---|---|
네이트온 안티디버깅 우회 (0) | 2010.02.20 |
IDA 원격디버깅 ( 리눅스 파일 IDA에서 라이브 디버깅 해보자 ) (0) | 2010.02.09 |
8086어셈블리 명령어 (0) | 2010.01.08 |
msiexec1 연습 (0) | 2009.12.30 |