일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- SQL
- 시나공
- 프로그래머스
- 소프티어
- java
- 백준 알고리즘
- 파이썬
- programmers
- 공부일지
- C++
- 데이터베이스
- SW봉사
- 알고리즘
- kotlin
- 백준
- python
- 코딩교육봉사
- 정보처리산업기사
- CJ UNIT
- 자바
- BFS
- 코틀린
- 문제풀이
- 스프링
- softeer
- 코딩봉사
- 백준알고리즘
- MYSQL
- 회고
- 1과목
- Today
- Total
JIE0025
[악성코드분석] 문자열 패치 실습 본문
문자열 패치에는 두가지 방법이 있다.
1) 문자열 버퍼의 직접 수정
2) 빈 메모리 영역에 새로운 문자열 생성 후 파라미터로 전달
(내가 했던 실습은 C++를 사용하여 main함수 안에 메시지박스 함수를 호출한다. 파라미터로는 Hello world! 를 전달한다.)
- 문자열 버퍼의 직접 수정 실습
첫번째 문자열 버퍼의 직접 수정 실습을 하다가 잘 되지 않았다. 무엇이 문제인지 파악하고자 하였지만 초보자로서 알기 어려웠다.
<<첫 실습, 실패 >>
<<실패의 이유를 알아보자>>
자세히 들여다보면 답이 있다.
00C91007 에서 push offest 00c92128을 하는 것이 보인다.
즉 00c92128의 문자열 자체를 바꾸어야 우리가 원하는 목적을 이룰 수 있다는 것이다.
내가 실수한 부분은 offset의 문자열을 바꾼것이 아닌, 00c91007을 수정하였기 때문에
오른 쪽 사진에 push 65005220이 되었다는 것이다.
당연히 잘 될리가 없다.
<< 재 실습, 성공>>
00c92128을 수정하는 것으로 재 실습 해보았다.
메모리 위치가 변하게 되면서 문자열의 위치가 00942120로 변했다.
값을 reversing :)!로 바꾸어 보았다.
아래 사진에서 문자열 패치가 잘 된것을 확인 할 수 있다.
- 빈 메모리 영역에 새로운 문자열 생성 후 파라미터로 전달하기 실습
파라미터로 넘기는 문자열 주소를 다른 주소로 바꾸어 주어야 한다.
아래와 같은 공간을 Null Padding영역이라 한다.
- Null Padding 영역에 ctrl E를 클릭하여 새로운 패치 문자열을 작성한다.
- 새로운 패치 문자열의 주소를 알아둔다.
-파라미터로 넘기는 명령어가 존재하는 곳에 마우스를 위치하고 [space] 시 어셈블 창이 나타나는데
push ‘새로운 패치 문자열의 주소’ 하면 끝!
'기타 학습 > 보안' 카테고리의 다른 글
DLL(Dynamic Linked Library) 이란? (0) | 2020.06.07 |
---|---|
[악성코드분석] CodeEngn 코드엔진 Basic RCE L05 (0) | 2020.04.19 |
[악성코드분석] CodeEngn 코드엔진 Basic RCE L04 + 정상 띄우기 (0) | 2020.04.17 |
[악성코드분석] CodeEngn 코드엔진 Basic RCE L03 + 추가 분석 (0) | 2020.04.11 |
[악성코드분석] CodeEngn 코드엔진 Basic RCE L02 (0) | 2020.04.11 |