셸코드 제작 과정
dll , kernel32.dll:
mov eax,fs:[30h]
test eax,eax
js os_9x
os_nt:
mov eax,[eax+0ch]
mov esi,[eax+1ch]
lodsd
mov eax,[eax+8]
jmp k_finished
os_9x:
mov eax,[eax+34h]
mov eax,[eax+7ch]
mov eax,[eax+3ch]
k_finished:
sub esp,200
mov edi,esp
mov [edi+8],eax ; kernel32
:
kernel32 ,
kernel32 +0x3c e_lfanewc , PEPE :
windows PE :
DOS MZ header
DOS stub
PE header
Section table
Section 1
Section 2
Section ...
Section n
PE 헤드는 다음과 같은 구조입니다.IMAGE_NT_HEADERS STRUCT
Signature dd ‘PE/0/0’
FileHeader IMAGE_FILE_HEADER <>
OptionalHeader IMAGE_OPTIONAL_HEADER32 <>
IMAGE_NT_HEADERS ENDS,opt
IMAGE_DATA_DIRECTORY, 。
IMAGE_OPTIONAL_HEADER32 STRUCT
....
LoaderFlags dd ?
NumberOfRvaAndSizes dd ?
DataDirectory IMAGE_DATA_DIRECTORY 16 dup(<>)
IMAGE_OPTIONAL_HEADER32 ENDSimage_data_directory 13 , 。
Member Info inside 0 Export symbols 1 Import symbols 2 Resources 3 Exception 4 Security 5 Base relocation 6 Debug 7 Copyright string 8 Unknown 9 Thread local storage (TLS) 10 Load configuration 11 Bound Import 12 Import Address Table 13 Delay Import 14 COM descriptor
데이터 directory 구조는 다음과 같습니다.
IMAGE_DATA_DIRECTORY STRUCT VirtualAddress dd ? isize dd ? IMAGE_DATA_DIRECTORY ENDS
여기에는 주소와 크기만 포함됩니다.
Export 테이블로 이동
모두 11명의 구성원이 있는데, 자주 사용하는 것은 아래 표에 열거되어 있다.
Field Name
Meaning
nName
모듈의 실제 이름입니다.파일 이름이 바뀔 수 있기 때문에 이 필드는 필수입니다.이 경우 PE 로더에 내부 이름이 사용됩니다.
nBase
기수, 서수를 더하면 함수 주소 수조의 인덱스 값이다.
NumberOfFunctions
모듈에서 인용한 함수/기호의 총수.
NumberOfNames
이름으로 인용된 함수/기호 수입니다.이 값은 모듈에서 인용한 함수/기호의 총수가 아니며, 위의 NumberOffunctions에서 제시합니다.이 필드는 0으로 모듈이 서수만 인용될 수 있음을 나타냅니다.만약 모듈이 함수/기호를 전혀 끌어내지 않는다면 데이터 디렉터리에서 끌어낸 표의 RVA는 0이다.
AddressOfFunctions
모듈에는 모든 함수/기호를 가리키는 RVAs 배열이 있는데, 이 영역은 이 RVAs 배열을 가리키는 RVA입니다.요컨대, 모듈의 모든 함수의 RVAs는 하나의 그룹에 저장되어 있으며, 이 필드는 이 그룹의 첫 번째 주소를 가리킨다.
AddressOfNames
이전 도메인과 유사하게 모든 함수 이름을 가리키는 RVAs 배열이 모듈에 있습니다. 이 배열은 이 RVAs 배열을 가리키는 RVA입니다.
AddressOfNameOrdinals
RVA - 위의 AddressOfNames 배열에 포함된 관련 함수의 시퀀스 수를 나타내는 16비트 배열입니다.
FindApi: ;API 함수 주소 하위 프로세스 push ebp push edi mov ebp, edi mov ebx, esp add ebx, 8 xor edx, edx mov eax, [ebp+8] add eax, 3ch 가져오기;PE 헤드에 대한 오프셋 값 elfanew mov eax,[eax] ;e 획득lfanew 값add eax, [ebp+8];PE header cmp dword ptr[eax], 4550h 가리키기;'PE'jne NotFound인지 판단하기;kernel32 기본 주소 오류 mov [ebp+0ch], eax;PE 파일 헤더 mov eax, [eax+78h]add eax, [ebp+8] mov [ebp+0ch], eax 저장하기;IMAGE 가리키기EXPORT_DIRECTORY mov eax,[eax+20h] add eax,[ebp+8] mov [ebp+4],eax ;함수 이름 포인터 배열의 포인터 값을 mov ecx, [ebp+0ch] mov ecx, [ecx+14h] FindLoop: push ecx mov eax, [eax] add eax, [ebp+8] mov ecx, [exex add esi, [ecx add esi, 8mov edi, eax mov ecx, [ebx+4] cld repex cmxb jne Find ext add eax, [ebp+8p+8p+8] mov esi, 8mov edi, 8mov ecx, eax mov ecx, [ebx+4x+4], [ebxx4x4x4x], [ebx4x4x], [ebeax, edx mov eax, [eax] add eax, [ebp+8] jmp Found Find Next: inc edx add dword ptr [ebp+4], 4 mov eax,[ebp+4] pop ecx loop FindLoop NotFound: xor eax,eax Found: pop edi pop ebp ret
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Exception Class에서 에러 코드 해석 ~초기초편~직장에서 C# 프로젝트가 내뿜는 오류 코드를 구문 분석하고 오류의 위치를 확인하기 위해 Exception class를 활용할 수 있었습니다. 지금까지 Exception Class 에 대해서 별로 파악할 수 없었기 때...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.