일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스
- 자바
- kotlin
- BFS
- SQL
- 스프링
- CJ UNIT
- python
- 코딩봉사
- 정보처리산업기사
- 1과목
- 회고
- 공부일지
- 시나공
- 소프티어
- 코딩교육봉사
- 데이터베이스
- 파이썬
- 문제풀이
- MYSQL
- C++
- 백준 알고리즘
- 알고리즘
- 백준알고리즘
- java
- programmers
- SW봉사
- 코틀린
- 백준
- softeer
- 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 |