코드엔진 Basic RCE L

코드엔진 Basic RCE L01 풀이

Lamed_Dhhd 2023. 1. 26. 23:49
반응형

2023-01-27에 쓸 예정 

CodeEngn Challenge 링크 https://ch.codeengn.com/

 

CodeEngn.com [코드엔진]

코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 세미나, 워크숍을 현업 실무자들과 함께 운영하고 있는 비영리 커뮤니티입니다.

ch.codeengn.com

 

Basic RCE L01
HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가


Author: abex
File Password: codeengn

영상: https://www.youtube.com/watch?v=ff_1iUZWWqc 

"HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가" 사실 이 문제를 리버싱을 하지 않고 문제설명만으로도 풀 수 있습니다.

GetDriveTypeA 함수 설명

GetDriveTypeA로 CD-ROM으로 인식하면 리턴하는 값은 5입니다. 그러므로 답은 5입니다.

정석적인 풀이

abex crackme1 어셈블리어

어셈블리어를 본다. 분석해야지

MessageBoxA 함수 설명

이게 MessageBoxA라는 함수구나.

아 C언어 소스코드가 저렇게 어셈블리어가 되는구나!

저값을 바꾸면 아이콘이 출력되는구나(라메드 유튜브: 리버싱 이론 강의 화이팅(보세요))

https://www.youtube.com/watch?v=Bcyy0M0SDWA&list=PLPv3psMPkcocVxzVTvt8ZHe5ZOhQPNVCg 

GetDriveTypeA 함수 설명

어셈을 해석하니 esi의 초깃값은 401000이고 GetDriveTypeA 이후 eax는 3이다.

esi = 401000, eax = 3일때 inc는 값을 1 증가시키고, dec는 값을 1 감소시킬때 cmp eax,esi에 도달했을때 두 레지스터의 값은 어떻게 변했을까?

 

 

 

 

정답 esi = 401003, eax = 1

풀이

inc esi 곱하기 3은 401000+3 = 401003

dec eax 곱하기 2는 3-2 = 1

두값이 같게 될려면 리턴값은 5(드라이버가 CD-ROM일 경우 리턴값)가 되어야한다.

 

 

 

질문은 카카오톡 오픈프로필로 해주세요

https://open.kakao.com/me/Dhhd

 

Dhhd님의 오픈프로필

#잉여

open.kakao.com

https://open.kakao.com/me/Lamed

 

Lamed님의 오픈프로필

 

open.kakao.com

 

반응형