안티 디버깅 기법이 적용된것 같다.
그냥 EIP를 옮겨서 if문을 우회할수 있을 것 같다.
이 분기에서 그냥 EIP를 0x08048436로 옮겨주면 우회가 된다.
내 입력값을 dl에 한바이트,
여기서 +4만큼 한 문자열에서 한바이트를 비교한다.
그러니까 내가 asdf를 넣으면 a와 e를 비교하는 것이다.
키의 첫글자는 e인것을 알 수 있다.
틀렸기때문에 분기가 갈리지만 그냥 EIP를 바꿔서 아래 분기로 가본다.
비슷한 로직이다.
내 입력값 두번째 인덱스와 ksuiealohgy+5한 인덱스와 비교한다.
키의 두번째 글자는 a이다.
ksuiealohgy에다가 inc연산을 하는데 이는 +1을 해주는 연산이다.
그러므로 세번째 글자는 s이다.
여기는 0x0a를 더하는데 디버깅해서 값을 보면 al이 'y'인 것을 알 수 있다.
모든 글자를 합쳐보면 easy가 키인것을 알 수 있다.
FLAG = easy
처음풀때는 al, dl이 1바이트 짜리인지 몰라서 엄청 해맸었다.
어셈을 처음부터 다시 공부해야될 필요성을 느끼게 된것같다.
그리고 이제 슬슬 전국기능대회 문제 공개 기간이라서 당분간은 글이 동결되거나 기능대회 과제 관련글을 올릴것 같다.