문제
문제를 보니까 HDD를 CD-Rom으로 인식 시키는 리턴값을 찾는 문제같습니다.
문제만 보고 포기하기는 너무 빠르니까 한번 까보기라도 합시다.
풀이
일단 실행시키면 저런식으로 실패 했다고 뜹니다. 한번 어셈블리 코드를 보겠습니다.
저기 문제에서 나왔던 GetDriveTypeA 가 보입니다. 그 밑에다 breakpoint를 걸어서 돌려봅시다.
여기서 이제 다시 코드를 쭉 훑어 보면
EAX 값이랑 ESI 값이랑 비교하는 부분이 있습니다.
위에 나온 초기 EAX 값은 3이였습니다. 그렇다면 cmp 부분에서 eax 값이 뭐가 되는지 확인을 해보겠습니다.
JE 부분에 breakpoint를 걸고 돌려 보겠습니다.
무슨일이 벌어진건지 모르겠지만 EAX == 1 이되고 ESI == 3이 되버렸습니다.
그 과정은 이렇습니다.
즉 EAX와 ESI가 같지 않기 때문에 오류문구를 내보내는 겁니다.
그렇다면 생각 할수 있는게 초기 EAX의 값 3에 + 2을 해서 돌리면 정상 문구가 뜨지 않을까 생각이 듭니다. 그렇다면 해봐야죠. ollydbg는 더블 클릭하면 레지스터의 값을 바꿀수 있습니다.
짜잔! 물론 이방법 말고도 cmp 위에 DEC EAX를 INC EAX로 바꿨어도 되긴합니다.
.....라고 풀었긴 한데 GetDriveTypeA 가 궁금해서 검색을 했었습니다.
그랬더니 제일 처음 뜨는 사이트에서 리턴 값을 알려주더군요... CD -ROM으로 바꾸랬으니 정답인 5를 넣으면 되겠네요....
이상 basic 1번 이였습니다.
내가 생각하는 문제가 의미하는것 : 리버싱 첫걸음?
'리버싱에 관하여 > ctf' 카테고리의 다른 글
pico CTF sidechannel writeup[side channel attack에 관하여] (0) | 2023.06.04 |
---|---|
CodeEngn<Basic RCE L05> (0) | 2020.09.08 |
Codeengn<Basic RCE L04> (0) | 2020.09.07 |
CodeEngn <Basic RCE L03> (0) | 2020.09.07 |
CodeEngn <Basic RCE L02> (0) | 2020.09.06 |