티스토리 뷰

reversing/코드엔진

basic 1번

slyfizz 2018. 7. 17. 23:45

 

 

'

 

 

코드엔진 basic 1.

HDDCD-ROM으로 인식시키는 GetDriveTypeA의 리턴값이 무엇인지 아는게 문제1목적입니다.

 

 

 

 

먼저 디버거 없이 그냥 열어보니 이런 메세지박스들이 나오는군요.

HDDCD-ROM으로 인식하지 않고 있습니다.

 

 

Immunity debugger로 열어보니 이 파일은 이런 형태를 가지고 있습니다.

 

 

이 부분은 아까 보았던

 

 

 

이 메시지박스를 출력하는 부분이니 넘어갑니다.

 

 

원래 이랬던 레지스터 값이

 

 

이 부분을 지나고나서

 

 

이렇게 바뀌었습니다.

 

EAX00000003 -> 000000012가 감소됐고 ESI00401000 -> 00401003

으로 3이 증가했습니다

 

 

cmp2 레지스터의 값을 비교해서 값이 같으면 ZF(Zero Flag)1로 만듭니다.

JEZF1이면 점프문을 실행합니다.

 

여기선 cmp EAX,ESIEAXESI의 값을 비교하는데 둘의 값이 0000000100401003으로 다릅니다.

즉 둘의 값을 같게 만들어주려면 패치를 진행해야합니다.

이 부분에서 패치를 하는 방법에는

1.EAX 값을 패치한다.

2.ESI 값을 패치한다.

3.어셈블리어(JE)를 패치한다.

3가지 방법이 있습니다.

 

 

저는 ESI값을 패치하는 방법을 선택했습니다.

 

 

이제 EAXESI값이 모두 00000001로 같으므로

 

 

00401028이 아닌 0040103D로 이동해서

 

 

HDD를 CD-ROM으로 인식하는 매세지박스를 출력합니다.

 

사실 이문제는 이 파일과는 연관이 없이 GetDriveTypeA의 리턴값을 아는게 목적이기 때문에

 

 

msdn에서 GetDriveTypeA 함수의 드라이브가 CDROM일때의 리턴값을 찾아보면 됩니다.

 

 

즉 답은 5입니다.

 

 

 

 

2번문제로 이동하는 것을 보니 정답이군요.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함