2011-01-03 4 views
2

이진이 UPX로 압축되었는지 여부를 감지하는 방법을 찾으려고합니다. 간단한 CRC를 사용하여 내 응용 프로그램이 어떤 식 으로든 변경되었는지 여부를 확인하고 CRC가 크기 때문에 패커로 인해 실패한 경우 OK로 감지하려고합니다.프로그래밍 방식으로 UPX 감지

지금은 UPX로 시작하고 있습니다.

그래서 바이너리에 마커가 있습니까? 특정 JMP 또는 기타 검색해야 할 지침이 있습니까?
이것은 주로 Windows에서 테스트 될 예정이지만, 앞으로는 Linux에도 추가 할 것입니다.

도움과 의견을 보내 주시면 감사하겠습니다.

라이트 :

I은 ​​10 개 진에서 I는 UPX 또는 그 UPX가 설정되어 상쇄하는

AddressOfEntryPoint
Import Directory RVA
Resouce Directory RVA

어느 지점을 선택하였습니다. 이것에 대한 정보가 있습니까?

감사

+0

UPX unpacker 소스 코드를 살펴보십시오. UPX 탐지 알고리즘이 있어야합니다. – Machinarius

+0

이미 수행 했으므로 가볍게 처리해야합니다. –

답변

0

실행 파일의 섹션 이름을 확인해보십시오. UPX는 UPX0, UPX1, UPX2로 변경합니다.

+1

이 방법은 불행히도 신뢰할 수 없다. 일부 (압축/암호화 된) 이미지의 섹션은 "표준"/ "기존"섹션 이름으로 바뀝니다. 섹션의 이름은 로더에 의해 "해석"되지 않습니다. 섹션의 이름은 때로는 일부 도구에서 누락 (제거) 될 수도 있습니다. – mox

+0

@mox이 응답은 UPX 패커에만 해당됩니다. 추가 패커 또는 obfuscator를 실행하면 섹션 이름이 추가로 수정 될 수 있습니다. 그러나 기본적으로 UPX 패 커는 위에서 설명한 섹션 이름을 변경합니다. –

2

다운로드 UPX Homepage 오픈 src/p_w32pe.cpp 파일에서 upx 소스 코드; 찾고있는 기능은 다음과 같습니다.

int PackW32Pe::canUnpack() 

이 기능은 파일이 win32 upx로 압축되어 있는지 확인합니다.

+0

팁 주셔서 감사합니다하지만 다른 개체와 해당 생성자를 사용하여 해당 코드를 따르는 데 어려움을 겪고 있습니다. win32에서는'.h file에있는'PackW32Pe'를 호출하지만 차례로 다른 호출 등을 만듭니다 ... 저는 C 프로그래머이고 객체는 저와 강하지 않습니다. 해당 코드를 읽음으로써 추가 할 수있는 특정 사항이 있습니까? 다시 한 번 감사드립니다 –

+0

내 대답이 업데이트되었습니다. 덕분에 – ismail

+0

. 내가 어떻게 든 그것을 사용할 수 있는지 보자. –

관련 문제