728x90
문자열 패치 방법
- 문자열 버퍼를 직접 수정
- 다른 메모리 영역에 새로운 문자열을 생성하여 전달
1. 문자열 버퍼를 직접 수정
2주차의 'Hello World!'파일 사용해서 실습
ⓐ F8과 F7을 이용하여 main()함수에 들어가면 Text = "Hello World!" 부분을 찾을 수 있음
< breakpoint를 걸어뒀다면 [ Debug ] -> [ Run ]을 통해 바로 이동 >
ⓑ 해당 부분의 어셈블리어 코드를 더블클릭해서 확인하면 Text가 어디에 저장돼있는지 확인할 수 있음
ⓒ Hex dump에서 Text부분을 드래그 해서 [ Ctrl + E ]해서 수정
< .exe파일로 저장하려면 [ popup ] -> [ Copy to Excutable File ] >
소스 코드 없이 문자열 수정 가능하다.
더보기
※ 어셈블리어
PUSH : 메모리 상의 어떠한 버퍼에 있는 데이터를 넣어라, 삽입해라
※ 특정 주소로 이동
[ Ctrl + G ]
※ Edit data ( 수정 )
[ Ctrl + E ]
※ Hex dump에서 아스키 코드의 특징
아스키코드는 기본으로 1byte 사용하지만 유니코드는 2byte를 사용한다.
이 둘의 호환성을 위해 글자 사이에 '.'을 사용한다.
2. 다른 메모리 영역에 새로운 문자열을 생성 전달
2주차의 'Hello World!'파일 사용해서 실습
ⓐ F8과 F7을 이용하여 main()함수에 들어감
< breakpoint를 걸어뒀다면 [ Debug ] -> [ Run ]을 통해 바로 이동 >
ⓑ NULL Padding( 비어있는 덤프 영역 ) 찾기 ( 00 00 00 00 ··· 부분)
ⓒ [ Ctrl + E ]를 통해 문자열 수정을 하는데, 아스키 코드 부분이 아닌 UNICODE 부분을 통해 수정해야함
< 문자열을 삽입한 부분의 주소를 기억해야함 >
ⓓ Text = "Hello World!" 부분에서 더블클릭하여 'PUSH [주소]' 형태에서 주소를 NULL Padding 주소로 변경
( = 어셈블리 코드를 코드창에서 수정함 )
< NULL Padding 주소 = 수정한 문자열에 해당하는 주소 ( 문자열이 시작하는 주소 ) >
문자열 패치 방법 실습1
[ 문자열 버퍼를 직접 수정 실습 ]
-> Title 문구를 "SWU.COM"으로 변경하기
문자열 패치 방법 실습2
[ 다른 메모리 영역에 새로운 문자열을 생성하여 전달 실습 ]
-> Title 문구를 "SWU.COM"으로 변경하기
더보기※ UNICODE가 아닌 아스키 코드를 수정한 이유
원래 2Byte 기준으로 하기 때문에 HEX부분이 '53 00 57 00 55 00 2E 00 43 00 4F 00 4D 00' 로 구성이 되어야하는데, 컴파일러에 따라 다르다.
기존 HEX 코드를 확인했을 때 문자열 부분이 1Byte기준으로 이뤄져 있다면 컴파일러 기본이 UNICODE로 돼있는 것이 아니라 아스키 코드로 돼있는 것이다.
UNICODE를 사용하여 변경을 하게 되면 '53 00 57 00 55 00 2E 00 43 00 4F 00 4D 00' 처럼 값이 들어가게 되는데, 아스키 코드는 NULL이 나오면 문자열이 끝난다는 것으로 인식하기 때문에 한 글자만 출력된다.
그렇기 때문에 UNICODE를 사용하지 않고 아스키 코드를 사용하여 수정한다.
2Byte 기준으로 하는 이유 : 언어 호환성 때문
'악성코드 분석 > 실습' 카테고리의 다른 글
windowproject.exe - 동적분석 (1) | 2023.12.20 |
---|---|
windowproject.exe - 정적분석 (0) | 2023.12.20 |
IDA - idapractice.exe 정적분석 (0) | 2023.12.20 |
[윈도우즈보안과 악성코드기초] PE 파일 (0) | 2021.03.28 |
[윈도우즈보안과 악성코드분석기초] crackme 리버싱 (0) | 2021.03.27 |