이번장에서는 예전에 봤던 Lena강의에 대해서 나온다.
유명한(?) 리버싱 입문 강의이다.
이번장에서는 15, 17, 20강을 보는데 나중에 1~40까지 다 봐야할 것 같다.
15강 프로그램을 실행하면 이상한 창이 떠있다.
Nag창을 없애는것이 이번 목표인 것같다.
콜 스택 - 서브루틴간 호출 순서를 추적하기 위해 사용
- Return Address는 서브루틴 이후에 있음
- Stack Frame : 프레임포인터, 스택포인터 사이
- Stack Pointer : 서브루틴의 최상위 스택값
Alt + K : 콜 스택 창
책에 있는대로 실습을 하려했는데 콜스택창에 함수가 안뜬다; (원인은 나중에 더 강해져서 찾아보자)
그래서 그냥 읽고 넘어가기로 했다.
Code Cave : 작은공간에 큰 코드를 넣기 위한 기술
- 사용하지 않는 코드영역에 필요한 코드를 입력하고 수정할부분에 점프시킨다.
요약하자면 스택에 있는 return address와 저장된 정보를 가지고 Nag창을 호출하는 부분을 건너뛰는 것이다.
- JZ 3byte JMP 5byte 이기 때문에 넘치는 부분을 NOP처리
- 손실된 부분은 뒤에서 복구
Lena 17강은 id, pw를 맞추는 문제 인것 같다.
id에 따라서 pw(일련번호)가 직접 생성된다.
만일 일련번호가 프로그램 내에 있으면 쉽게 알수 있지만
일련번호가 동적으로 생성된다면 프로그램을 분석해야한다.
String Search로 어디서 분기가 되는지 찾아보았다.
ESI 와 403138에 저장된값을 비교해서 확인하는것같다.
책에서는 이 일련번호를 만드는 과정을 분석한다.
결과적으로는 ESI의 3EF552와 내가 입력한 수를 비교하는것이다.
3EF552를 아스키코드로 바꾸면된다고한다.
책에서는 앞단원에서 쓴 방식을 다시 쓴다고한다.
코드를 수정해서 일련번호를 눈으로 직접확인할 수 있게 했다.
'정보보안 > 리버싱 입문' 카테고리의 다른 글
지뢰찾기 게임해킹 (0) | 2022.03.06 |
---|---|
리버싱의 어려운 문제들 (0) | 2022.03.04 |
리버싱에 익숙해지기 (0) | 2022.02.25 |
리버싱시작하기(2) (0) | 2022.02.22 |
리버싱 시작하기(1) (0) | 2022.02.21 |