맨위로

이 글은 코드엔진(http://codeengn.com/) 에서 제공하는 리버스 엔지니어링 관련 다양한 문제들을 풀어보면서 리버스 엔지니어링을 공부하는 목적으로 작성되었습니다. 이글을 작성하는 필자도 리버스 엔지니어링에 흥미를 가지고 공부하는 입장이므로 잘못된 내용이 있을수도 있습니다. 잘못된 내용이 있다면 댓글이나 방명록에 알려주세요 :)

Challenges : Basic 03


Author : Blaster99 [DCD]

Korean : 

비주얼베이직에서 스트링 비교함수 이름은? 

English : 

What is the name of the Visual Basic function that compares two strings? 

문제를 확인했으니 파일을 다운로드 받아서 실행해보도록 하겠습니다.

위와 같은 메시지가 나타나게 되는데 대충 패스워드를 찾으라는 내용같다. 확인 버튼을 누르면 전형적인 패스워드프로그램이 나온다.

먼저, Regcode 칸에 아무문자나 입력해본후 Registrieren 버튼을 클릭해보니 에러메시지를 출력한다. 

이 프로그램과 문제에서 비교함수를 찾으라는 점에서 이프로그램이 패스워드와 사용자 입력값을 비교함수를 통해서 참과 거짓을 판단할것이라는 생각이들었다.

만약에 비교함수를 통한 방법이 맞다면 올리디버거의 검색기능으로 에러 메시지 내용을 검색한뒤, 역으로 흐름을 추적하면 비교함수를 찾을수 있을것이다. 그럼 먼저 올리디버거를 통해서 파일을 연뒤 위의 에러 메시지창의 메시지 내용을 검색해보도록 하겠습니다.

마우스 오른쪽 -> Search for -> All Referenced text strings 

잘살펴보니 에러메시지도 보이고 성공했을때의 메시지도 보이는것같다. 또한 그둘 메시지사이의 수상한 문자열도 보이고 있다. 일단 넘어가고, 에러메시지를 더블클릭해서 이동해보겠습니다.

에러메시지의 위치를 찾았으니 그주위의 코드를 둘러보겠습니다. 그 주위에서 조건분기점을 찾으면 아마 그위치에 비교함수가 있을것이다. 코드를 약간 위로올려보니 아래의 코드가 눈에 들어온다. 

다른 조건분기점들과 다르게 2가지 코드를 푸쉬하고 분기를 하며 그중 위에서 수상하게 여겨졌던 문자열과 (2G83G35Hs2) 다른 코드를 푸쉬하고 vbaStrCmp 함수를 호출하는것을 보니 비교함수일것이라는 것을 알수있습니다. 확인을 위해서 Regcode 칸에 "2G83G35Hs2" 입력해보도록 하겠습니다.

확인결과 암호가 맞다는 메시지를 출력하게됩니다. 더 정확한 확인을 위해서는 004028C2 에 BP를 설정하고 실행시키면 우리가 입력한 Regcode 는 004028BA 에 저장되는것을 볼수있습니다.



Posted by STIH

댓글을 달아 주세요