2012-04-01 4 views
2

저는 오래 전에 인터넷에 공개 된 프로젝트를 이용했습니다. 세부 사항은 여기에 있으며 모든 관련없는 것들은 간결하고 명확하게하기 위해 제거됩니다.외부 파일에서로드 된 코드의 일부 실행이 DEP에 의해 중지되지 않는 이유는 무엇입니까?


내용이

HEX 덤프 이하 통해 VII되는 이진 파일 :

55 89 E5 83 EC 08 C7 45 FC 00 00 00 00 8B 45 FC 
3B 45 10 72 02 EB 19 8B 45 FC 8B 55 0C 01 C2 8B 
45 FC 03 45 08 8A 00 88 02 8D 45 FC FF 00 EB DD 
C6 45 FA 00 83 7D 10 01 76 6C 80 7D FA 00 74 02 
EB 64 C6 45 FA 01 C7 45 FC 00 00 00 00 8B 45 10 
48 39 45 FC 72 02 EB E2 8B 45 FC 8B 4D 0C 01 C1 
8B 45 FC 03 45 0C 8D 50 01 8A 01 3A 02 73 30 8B 
45 FC 03 45 0C 8A 00 88 45 FB 8B 45 FC 8B 55 0C 
01 C2 8B 45 FC 03 45 0C 40 8A 00 88 02 8B 45 FC 
03 45 0C 8D 50 01 8A 45 FB 88 02 C6 45 FA 00 8D 
45 FC FF 00 EB A7 C9 C2 0C 00 90 90 90 90 90 90 

var 
    MySrcArray, 
    MyDestArray: array [1 .. 15] of Byte; 

    // ... 

    MyBuffer: Pointer; 

    TheProc: procedure; 
    SortIt: procedure(ASrc, ADest: Pointer; ASize: LongWord); stdcall; 
begin 
    // Initialization of MySrcArray with random Bytes and display here ... 

    // Instructions of loading of the binary file into MyBuffer using merely **GetMem** here ... 

    @SortIt := MyBuffer; 

    try 
     SortIt(@MySrcArray, @MyDestArray, 15); 

     // Display of MyDestArray (The outcome of the processing !) 
    except 
    // Invalid code error handling 
    end; 

    // Cleaning code here ... 
end; 
니펫 다음 방법을 사용하여 메모리에로드되고 실행될

내 상자에 매력처럼 작동합니다.


내 질문 :

방법은 VirtualAlloc 및/또는 VirtualProtect를 사용하지 않고 작동 온다?

답변

4

나는 왜 이것이 Data Execute Prevention에 의해 중단되지 않고 작동하는지 묻고 있다고 가정하고 있습니까? 32 비트 프로그램의 경우 DEP는 기본적으로 옵트 인이며 응용 프로그램이 명시 적으로 활성화해야 함을 의미합니다.

DEP 설정을 "선택한 프로그램을 제외한 모든 프로그램과 서비스에서 사용하도록 설정"으로 변경하면 응용 프로그램에서 DEP 경고 및 충돌이 발생합니다.

+0

예, 실제로 DEP와 관련이 있습니다. – menjaraz