virtualallocex 예제

참고 : 모든 코드 예제는 여기에서 액세스 할 수있는 비주얼 스튜디오 프로젝트 에서 내 Github 프로필에서 찾을 수 있습니다 : https://github.com/proteansec . MEM_RESET_UNDO는 MEM_RESET이 이전에 성공적으로 적용된 주소 범위에서만 호출해야 합니다. lpAddress 및 dwSize에 의해 지정된 지정된 메모리 범위의 데이터가 호출자에게 관심이 있음을 나타내며 MEM_RESET의 효과를 되돌리려고 시도합니다. 함수가 성공하면 지정된 주소 범위의 모든 데이터가 손상되지 않음을 의미합니다. 함수가 실패하면 주소 범위의 데이터 중 적어도 일부가 0으로 대체되었습니다. MEM_RESET을 사용하고 메모리 범위가 파일에 매핑되는 경우 VirtualAlloc는 오류를 반환합니다. 공유 뷰는 페이징 파일에 매핑된 경우에만 허용됩니다. malloc 및 LocalAlloc와 같은 다른 메모리 할당 함수는 해제될 때까지 예약된 메모리를 사용할 수 없습니다. 이 문서의 이 섹션에서는 프로세스의 주소 공간에 DLL을 삽입할 때 사용할 모든 기능을 살펴보겠습니다. 먼저 아래에서 볼 수 있는 프로그램의 전체 소스 코드를 제시해 보겠습니다: 지정된 예약된 메모리 페이지에 대한 메모리 요금(전체 메모리 크기 및 디스크의 페이징 파일)을 할당합니다. 또한 이 함수는 호출자나중에 처음에 메모리에 액세스할 때 내용이 0이 되도록 보장합니다.

가상 주소가 실제로 액세스되지 않는 한 실제 실제 페이지는 할당되지 않습니다. 프로세스 비우는 일시 중단된 프로세스에 코드를 삽입하는 일반적인 기술입니다. 이 기술은 탐지를 방지하고 합법적 인 프로세스에 코드를 주입하기 위해 악성 코드에 의해 사용될 수있다. procID 변수를 프로세스의 PID인 2720으로 변경했습니다. 이것이 올바르지 않으면 프로그램이 존재하지 않을 수 있는 다른 프로세스에 DLL을 주입하려고 시도합니다. 이러한 경우, 프로그램은 가장 확실하게 실패합니다. 프로그램의 PID를 변경할 때 프로그램을 다시 컴파일하고 실행해야 합니다. 프로그램은 putty.exe 프로세스에 DLL을 삽입하고 모든 것이 성공적으로 완료되면 다음을 표시합니다: 함수가 실패하면 반환 값은 NULL입니다. 확장 오류 정보를 얻으려면 GetLastError를 호출합니다. 우리가 살펴봐야 할 다음 함수는 GetModuleHandle 및 GetProcAddress입니다.

그들은 너무 잘 알려져 내 자습서의 많은 설명 되었기 때문에 우리는 이러한 함수를 설명하지 않습니다. 우리가 사용할 정확한 줄을 제시하자: lpAddress 영토 내에서 주소를 지정 하는 경우, flProtect 다음 값 중 있을 수 없습니다:이 값은 다른 값으로 사용할 수 없습니다. MEM_RESET_UNDO가 이전에 MEM_RESET이 아닌 주소 범위에서 호출되는 경우 동작은 정의되지 않습니다.