리버싱

Simcurity·2023년 5월 9일
0

리버싱

목록 보기
3/9

1. abex crackme - 2

1-1) 프로그램 실행

해당 프로그램을 실행하면 name과 serial번호를 적는 목록이 나오고 check, about, quit라는 버튼이 있습니다.

이름과 시리얼 번호를 적고 체크를 누르면 성공 시 성공 메세지와 실패 시 실패 메세지가 나타납니다.

실패 메세지

또한 이름이 4글자 이하 시 오류 메세지가 나타납니다.

1-2) 엔트리 포인트 찾기

마찬가지로 PEview로 Image Base와 Address of Entry Point를 확인해 보았습니다.

Image Base(VA) 값과 Address of Entry Point(RVA) 값의 합인 00401238이 엔트리 포인트겠네요.
올리 디버거로 파일을 열자 해당위치에서 브레이크 포인트가 걸립니다.

1-3) 문자열 찾기

이제 앞서 보았던 오류 메세지와 실패 메세지를 이용하여 프로그램안에 해당 메세지의 위치들을 찾아 보겠습니다.
코드에서 우클릭 후 search for에서 all referenced text string 클릭 후 문자열 창이 뜨면 우클릭 후 search for text를 클릭하면 문자열 입력 칸이 나오는데 그 곳에 보았던 4글자 이하 시 오류 메세지를 넣어보겠습니다

찾았습니다. 주변에 실패 메세지와 성공 메세지도 있네요.
더블클릭 후 해당 코드로 이동합니다.

내용은 0040237C 의 내용을 스택에 복사하라는 명령입니다. 그러므로 0040237C에는 Please ~~~의 문구가 저장되어 있다는 것을 알 수 있습니다.

1-4) 코드 수정


오류 메세지가 뜨기 직전에 브레이크 포인트를 걸고 이름 항목에 4글자 이하를 넣고 체크를 해보겠습니다.
브레이크 포인트에 걸려서 오류 메세지가 나타나기 전에 코드가 Paused 상태가 됩니다.
그 후, 스텝 오버로 Error 메세지를 스택에 복사하기전까지 실행을 해줍니다.
이 때, 힌트 영역을 보면 명령어와 관련된 레지스터, 스택, 메모리에 저장된 데이터를 보여줍니다.
그 밑에 메모리 창에 Address는 메모리 주소, Hex dump는 메모리에 저장된 데이터, Ascii는 저장된 데이터를 ASCII 코드 값으로 변경해서 나타내줍니다.
코드 라인 클릭 시 힌트 영역에 사용하는 스택의 주소가 나타납니다.

코드 영역에서 메모리 영역으로 이동하려면 명령어 우클릭후 Folllow in Dump에서 Immediate Constant를 클리하면 됩니다. Immediate Constant란 메모리에서 저장된 데이터를 직접 보여줍니다.

이제 해당 명령어의 메모리 영역으로 왔습니다.
여기서 변경하고 싶은 부분의 메모리를 선택한 후 우클릭 후 edit -> binary edit를 눌러 원하는 대로 데이터를 변경해주면 됩니다. 단 16진수의 값으로 넣어주어야 합니다.

Error!값은 밑에 right!값으로 변경해보겠습니다.


오류 창의 타이틀이 right!로 바뀌었습니다.

1-5) 문제 해결

이번에는 올바르게 입력 값을 넣어 보고 프로그램을 분석 해보겠습니다.

찾은 코드에서 조금 위로 가면 해당 부분에서 참과 거짓을 결정하고 성공과 실패 메세지를 출력하는 분기입니다.

TEST 명령어는 두 값은 AND연산하여 결과를 따로 저장하지 않고 제로 플래그의 값을 변경해줍니다.
만약 연산 값이 0이면 제로플래그 값은 1이되고 연산값이 0이 아니라면 제로플래그를 클리어 합니다.
주로 조건 분기문 (JE, JNE)에서 사용됩니다.
역시 바로 뒤에 JE 분기문이 있습니다.
JE 명령어는 제로플래그가 1인 경우 지정 주소로 점프합니다.
그렇다면 이 실패를 호출한 분기문 또한 위쪽에 있을 것입니다.

역시 조금 올라가보니 아래에 성공 메세지를 건너뛰고 실패 메세지로 가는 분기문을 찾았습니다.
그래서 이름과 일련번호에 각각 1234, 1234를 넣고 브레이크 포인트까지 실행 시


제가 입력한 이름(1234)과 일련번호가 들어가있는데 일련번호는 1234가 아닌 95969798로 바뀌어 있는것을 보실 수 있습니다. 다른 함수 어딘가에서 변경된 것입니다.
그러므로 이제 프로그램에서 일련번호에 95969798을 넣어보겠습니다.

성공 메세지가 나왔습니다.

0개의 댓글