Lena의 강의: 플래시 동영상으로 제작돼 쉽게 이해할 수 있고 단계별 예제도 제공하고 있는 강의
-한국에서도 유형해 한국어로 번역해놓은 블로그로 공부할 수 있다.
-Lena's reversing 자료 다운은 현재 막혔다. 다른 루트로 직접 다운로드할 수 있다.
-리버싱 입문 책에 수록된 사진을 토대로 풀이법을 설명하겠다.
[목차]
1. Lena 15강(Nag)
2. Lena 17강(일련번호)
1. Lena 15강_Nag 창 없애기
15강 파일을 다운로드 받아 압축을 풀면 'files' 디렉토리가 나온다. 그 디렉토리에 들어가 'ReverseMe. Nags.exe'을 실행하면 아래 문구가 뜬다. ReverseMe라는 창을 제외한 두 창이 Nag창으로 이것을 없애야 한다.
디버거로 열어보면 실행순서는 다음과 같다.
(1) F9를 눌러 실행하면 Nag창이 뜬다.
(2) F12로 잠시 정지 시켜 Nag창 프로그램을 어디서 호출하는지 알아야 한다.
Alt+K로 콜 스택 창을 열 수 있다. 콜 스택: 프로그램에서 사용하는 서브루틴에 대한 정보를 저장하는 자료구조
사진에서 Called from이 호출하는 코드를 의미하므로 우선 이 탭에서 'ReverseMe. NAGs.exe'를 찾는다.
찾았다면 마우스 오른쪽 버튼의 Follow caller를 선택하면 서브루틴을 호출하는 장소로 이동할 수 있다.
*이동이 불가하면 스택 영역의 복귀주소가 ReverseMe__NAGs.0042039F를 찾으면 된다.
스택 영역에서 Enter 키를 누르면 코드 영역으로 넘어간다. CALL <JMP.&MFC42.#2514>로 서브루틴 호출 확인이 가능하다.
아까, 문제에 들어가기 전에 두번째 창을 제외한 두 창이 NAG창이라고 했다.
Nag 창을 여는 서브루틴 호출 코드 상단을 살펴보면 주소 00420377에서 레지스터 값에 따라 제로 플래그를 설정하는 코드다 있다. 여기서 제로 플래그가 0이면 Nag창이 실행되므로 이를 통해 그 둘이 Nag창임을 확인 가능하다.
따라서 두번째 창만 열리게 수정을 한다. 이때 코드 케이브를 사용한다.
코드 캐이브: 사용하지 않는 토드 영역에 필요한 코드 입력, 수정해야 할 부분에는 새로운 코드가 입력된 곳으로 점프하는 코드, 새로 입력된 코드 마지막 부분에 다음에 실행되어야 할 코드를 넣는 것.
주의!
코드를 입력하고 싶다면 Access 영역이 R E 속성 가져야 함.
데이터를 입력하고 싶다면 Access 영역이 RW 속성을 가져야 함.
캐이브 코드는 .text 역역에 들어가야 함.
주의사항에 유의하며 빈 영역에 케이브 코드를 완성한다.
'0'만 반복되는 곳이 빈 영역이다. ① 부분에 코드를 넣고 ②에 임시로 사용할 숫자를 넣는다.
① 주소에 브레이크포인트를 설정하고 ②에서 스페이스 바를 눌러 어셈블 창을 띄운다. 원래 명령어 대신 JMP 00437D6A를 입력한다.
다른 코드들도 똑같은 방식으로 바꿔준다.
주의!
지금까지 수정한 것을 다시 실행(Ctrl+F2)하면 모두 사라진다. 디버거에서 이뤄졌으므로 따로 저장해야 한다.
2. 17강_일련번호
실행시 해당 화면이 뜬다. 에러 메시지로 디버거를 삭제하라고 하니 우선 사용자 입력하는 부분부터 분석한다.
마우스 오른쪽 버튼으로 Search for -> All referenced strings로 오류 메시지를 찾는다.
상단에 올라가면 성공 메시지를 발견할 수 있다.
조금 더 상단에 올라가면 ① 함수를 확인 가능하다. 해당 함수는 문자열 길이를 EAX에 담아주는 함수다. 이 함수 윗부분을 BP로 설정하고 F8로 하나씩 실행한다.
일련번호 생성 로직을 F8을 사용해 빠져나오면 ③부분에서 생성된 일련번호를 확인할 수 있다. ESI 레지스터에 저장되어 있으므로 확인해보면 003EF552 이다. 메모리 주소에 입력된 00403138은 아스키코드로 사용자가 입력한 1234를 의미한다. 우리는 003EF552을 아스키코드로 변환해야 하면 일련번호를 획득할 수 있다.
변환 확인: Rõ> (←드래스 하시오.)
'2. Reversing (리버싱) > 1) Write UP' 카테고리의 다른 글
[2022.11.26]R4 활동보고 (0) | 2022.11.26 |
---|---|
[2022.11.19] R4 활동일지 - 4강 LENA 17보충 (1) | 2022.11.24 |
[2022.10.08] R4 - crackme#3, crackme#4, crackme#5 문제 풀이 (0) | 2022.10.08 |
[2022.10.01] R4 - crackme#1, crackme#2 문제 풀이 (1) | 2022.10.03 |
[2022 . 9. 17] R4 활동일지 (1) | 2022.09.22 |