woonadz :)

[CodeEngn Basic] RCE L03 문제 풀이_nabi 본문

IT/codeengn 문제 풀이

[CodeEngn Basic] RCE L03 문제 풀이_nabi

C_scorch 2021. 10. 3. 22:44
반응형

기록용

3줄 TMI

요새 리버싱 공부에 대한 김칫국을 좀 마셨는데 거기에 대한 TMI를 적어볼까한다. 어느덧 리버싱 입문 책이 반정도 남았다. 다음 책은 무엇으로 공부할지, 포너블을 공부할지, 네트워크를 공부할지 등등 고민을 엄청 했는데 리버싱을 조금 더 깊게 공부해보려고 한다.


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

 

03.exe 파일을 열면 아마 대부분 에러가 뜰 것이다. System Error에 관한 내용인데 아마 MSVBVM50.DLL 파일이 없어서 뜨는 것일 거다. 이제 MSVBVM50.DLL 이 파일을 다운 받아주기만 하면 끝인데 난 엄청나게 오래걸렸다...기존에는 마이크로소프트 회사에서 오픈소스로 제공하던 파일인 것 같은데 주소를 옮긴건지, 더 이상 제공을 안하는 건지 내가 들어간 주소에는 아무것도 써있지 않았다.그래서 나는 이 사이트에서 다운 받았다. (혹시나 트로잔 같은 바이러스가 따라올까봐 엄청 걱정하며 깔았지만 바이러스 검사를 해도 괜찮았다.)https://ko.dll-files.com/msvbvm50.dll.html

 

msvbvm50.dll 무료 다운로드 | DLL‑files.com

msvbvm50.dll, 파일 설명: Visual Basic Virtual Machine msvbvm50.dll와(과) 관련된 오류는 몇 가지 다른 이유로 발생할 수 있습니다. 예를 들어, 응용 프로그램에 결함이 있거나, msvbvm50.dll이(가) PC에 존재하는

ko.dll-files.com

또 주의해야 할 점은 이 파일을 다운 받고 같은 위치에 03.exe 파일을 넣어주어야한다. (이 점을 스터디 시간에야 알아서 오늘 나도 처음 풀어본다.)

 

 

이제 프로그램을 실행시켜보겠다.

03.exe 파일 실행 화면

현재 이 화면은 03.exe 파일을 실행시킨 화면이다. 뭐라고 하는지는 뭐르겠지만 확인을 눌러보겠다.

 

확인을 누른 후에 화면

확인을 누르자 Regcode 를 입력하는 화면이 나온다. regcode 가 뭔진 모르겠지만... 패스워드 개념같다. 아무래도 이 단어들은 영어 문법은 아닌 듯 하다. 인터넷에 쳐봐도 딱히 뜻이 나오지 않는다.

임의의 값을 입력 시켜보겠다.

 

현재 임의의 값, 123을 입력시킴

123을 입력하고 Registrieren 버튼을 입력하자 대충 패스워드가 다르다는 에러창이 뜨는 것 같다. 

이제 올리디버거에 03.exe 파일을 올려 분석해보겠다.

 

올리디버거에 03.exe 파일을 올렸을 때 화면

00401168 주소가 EntryPoint 라는 것을 확인할 수 있다. 이제 평소처럼 한줄씩 실행시켜보겠다.

 

0040116D 주소를 실행시킴

 

두번째 줄을 실행시키자마자 바로 프로그램을 실행시켰을 때의 화면이 뜬다.

 

이런 주소까지 들어온 적은 사실 많긴 한데 정확한 의미?를 모르겠다. 아래쪽 상태 바에 terminated 가 뜬 것을 보면 현재 프로그램이 종료된 상태라는 것을 알  수 있다. 너무 깊숙히 들어온것 같아서 첫 화면에서 에러 문자열을 찾아주도록 하겠다.

 

에러 문자열 찾기

오른쪽 마우스 클릭 -> search for -> All referenced text strings 를 이용해 찾아주겠다. 아래로 쭉 내리다 보면 아까 처음에 본 에러 문자열을 발견 할 수 있다. 이제 그 문자열의 주소로 들어가보도록 하겠다.

 

에러 문자열로 이동

이제 에러 문자열 주소 주변에 명령어들과 주석들의 흐름을 살펴줄 것이다. 대충 코드 흐름을 살펴보니 00402A01 부터 내가 입력한 문자열을 가지고 와 비교하는 것 같다. 00402A01 이 주소에 BP를 걸고 실행시켜보겠다.

 

00402A01 주소에 BP 걸고 실행시키기

이제 또 한줄씩 실행시켜보겠다. 저 의심스러운 유니코드 값 위 주소와 유니코드 주소에 push 명령어가 있다. 아무래도 스택에 값을 넣어 비교하려는 것 같다.

 

00402A27 주소를 실행시킨 상태

00402A27 주소를 실행시키자 오른쪽 아래 스택에 내가 입력한 값 '123'이 담겼다. 이제 또 한줄씩 실해잇켜 보도록 하겠다. 

 

00402A2A 주소를 실행 시킨 상태

00402A2A 주소를 실행시키자 스택에 유니코드 값이 담겼다. 다시 한줄씩 실행시켜보겠다.

 

00402A34 주소 실행 후

00402A34 주소를 실행하자 제로플래그 값이 바뀌었고 스택도 추가되었고... 저 vbaStrCmp 함수가 수상하다. 00402A34 주소 안으로 들어가보려고한다.

 

vbaStrCmp 에 관한 자세한 함수가 보이지 않으니 한번 더 안으로 들어가보겠다.

 

이제 다시 한줄씩 실행시켜보겠다.

 

740DF900 주소 실행 시킨 후

740DF900 주소를 실행시키자 제로 플래그 값이 바뀌었다. vbaStrComp 함수 안도 살펴보는 것이 좋을 것 같다.

 

740DF900 주소 안으로 들어왔다. 이제 한줄씩 다시 실행시켜 보겠다.

 

740C3574 주소 실행 시킨 후

740C3574 주소를 실행시키자 EAX 레지스터 값에 내가 입력한 번호 '123'이 담겼다. 또 한줄씩 실행시켜보겠다.

 

740C3585 주소 실행 후

740C3585 주소 실행 후 ECX 레지스터 값에 유니코드 값이 담겼다. 

 

.....

다른 블로그에 증명이 없어서 내가 해보려고 했지만 너무 깊숙히 들어간 것 같다... 3시간 30분 정도 여러방법으로 건드려봤으니 후회는 없다... 조금 더 공부하고 정말 제대로 된 증명을 해봐야 겠다.

 

끝인사 및 느낀점

이번 3번 문제는 정말 기억속에서 지울 수가 없는 문제가 될 것 같다. 왜 인터넷 블로그에는 명쾌한 해답이 없을까... 이게 비밀번호 같아서 답은 이거다 식의 풀이는 누가봐도 의미없는거 같은데 하나같이 다 그런 풀이 뿐이다. 왜 답인지 증명을 못하는 블로그가 넘쳐나서 한숨밖에 안나왔다. 솔직히 지금 좀 화가 난다. 리버싱을 공부하며 가장 큰 힘든 점이 어디 질문할 곳이 없다는거... 이 문제가 아무리 쉬운 문제여도 하나 하나 다 뜯어보며 풀고 넘어가고 싶은데 질문할 곳이 없으니 원하는 데로 결과가 나오지 않을 때마다 숨이 턱 턱 막힌다. 이 문제 푸는데 진짜 오래걸렸다. 진짜로... 같이 끝까지 공부하며 질의응답을 해줄 사람 또는 그러한 카페가 있었으면 좋겠다. 네이버 카페들도 찾아봤는데 내가 못찾는건지 지금 원활한 활동을 하는 카페는 없었다. 어떻게 공부를 이어나갈지 정말 막막하다...

리버싱을 공부하고 문제를 푸는 것을 정말 재미있다. 학교 공부도 제쳐두고 할만큼. 근데 문제를 풀다 보면 내가 이 프로그램의 구조를 이해해서 푸는 게 아니라 전에 문제도 이런 느낌으로 풀었으니까 이렇게 하면 되겠지 라는 마음으로 풀고 있는 게 느껴진다. 어제 포스팅에서도 말했듯이 티오리라는 스타트업의 유튜브 영상을 자주 보고 있다고 했다. 거기에 나오는 해커분께서 보안 기술이 발전하다 보면 툴만을 이용해 해킹을 하는 해커들의 직업은 사라질 수도 있겠다는 말을 하셨다. 나도 내부적인 구조를 완벽히 이해해서 툴을 사용하는 그런 전문가가 되고 싶다. 무엇부터 공부를 해야할지 감이 잘 안오지만 타학교 교과과정도 많이 참고해서 공부를 하려 한다. 

반응형