2012-02-09 2 views
2

나는 Pwn16이라는 프로그램을 만들고있다. 인텔 8086/펜티엄 프로세서와 DOS/Win3.x/Win98 시스템을 에뮬레이트하여 64 비트 시스템에서 16 비트 응용 프로그램을 실행할 수 있습니다. Pwn16은 Windows가 "16 비트 호환이 아닌"메시지 (CMD에서 제공하는 메시지 포함)를 제공 할 때이를 감지하고 소환 된 메시지를 알아 채면이를 닫고 자동으로 Pwn16을 시작하는 소형 로더 프로그램을 사용합니다. 이 메시지를 "캡처"하고 오류 대신 다른 작업을 수행 할 수있는 라이브러리가 있습니까? 나는 이것을 VB6에서 대부분 만들고 있는데, 이렇게 할 수있는 코드도 도움이 될 것이다. 에뮬레이션과 GUI가 다운되었으므로이 로더를 완료해야합니다. 메시지 캡처가 필요합니다 :Windows 메시지를 어떻게 트랩합니까?

"이 파일의 버전은 실행중인 Windows 버전과 호환되지 않습니다 컴퓨터의 시스템 정보를 확인하여 x86 (32 비트) 또는 x64 64 비트) 버전의 프로그램을 다운로드 한 다음 소프트웨어 게시자에게 문의하십시오. "

"지원되지 않는 16 비트 응용 프로그램 : 64 비트 버전의 Windows와 호환되지 않기 때문에 프로그램 또는 기능 '(파일)'을 시작하거나 실행할 수 없습니다. 소프트웨어 공급 업체에 문의하여 64 비트 Windows 호환 버전 사용할 수 있습니다."

"유효한 Win32 응용 프로그램이 아닙니다."

"(파일) 응용 프로그램을 Win32 모드로 실행할 수 없습니다."

감사합니다.

답변

2

내가 아는 한 Explorer 나 cmd.exe는 실행 파일의 유효성을 미리 확인하지 않습니다. 대신, 그들은 CreateProcess을 호출하고, 실패하면 리턴 된 오류 코드를보십시오.

따라서 hook이 CreateProcess (또는 아마도 the underlying native API)를 호출하면 Explorer/cmd.exe/whatever에 반환되는 오류 코드를 캡처하고 대신 할 수 있어야합니다.

메시지를 사용자에게 표시하는 것이 도움이 될 것이라고 생각하지 않습니다. 모든 대화 상자 및 모든 콘솔에 작성된 모든 텍스트를 조사 할 때 발생하는 비효율과는 별도로 찾고있는 메시지가 있는지 여부를 확인하기 위해 사용자가 실행하려고 시도한 파일을 어떻게 식별 할 수 있습니까?