2011-12-17 3 views
1

일부 균열을 분석 중이며 그 중 하나가 재배치 표의 주소와 크기를 0으로 변경했습니다. 크래커가 이걸 가지고 무엇을하려 했습니까?PE 헤더에서 재배치 테이블 주소를 삭제하면 어떻게됩니까?

자세한 정보를 제공하기 위해 크랙의 목적은 다른 DLL을로드하여 이전 Windows DLL 이름을로드 테이블에서 사용자 지정 이름으로 변경하는 것입니다.

답변

3

재배치 테이블을 삭제하면 DLL을 재배치 할 수 없습니다.
그래서 새 코드 (코드 크랙)는 DLL의 주소를 계산할 필요가 없으며 상수 주소 값을 사용할 수 있습니다.

종종 재배치 테이블은 실제로 필요하지 않으므로 제거하여 모듈 크기를 줄이거 나 일부 데이터로 대체 할 수 있습니다.

+0

"... 일부 데이터로 바꾸십시오"! Interessting! 일부 실행 파일 (재배치되지 않은)이 재배치 디렉토리를 갖는 이유가 될 수 있습니까? 질문 (http://stackoverflow.com/questions/8534858/why-do-some-windows-applications-contain-a-relocation-directory) – mox

+0

완벽한보세요! 감사. – Stew

1

로드 할 DLL의 이름을 변경하려면 일반적으로 가져 오기 테이블 만 변경하면됩니다. 나머지는 문제의 바이너리의 특성을 모른 채, 단지 추측 된 작업 일뿐입니다.

모든 크래커들이 정확히 무엇을하고 있는지를 아는 것이 중요하다고 생각합니다. 분석해서는 안되는 것을 분석하고있는 것일 수도 있습니다. 말했다

, 당신은 몇 가지 이유에 대한 재배치를 제거 할 수 있습니다 : 그들은 ASLR 인식하지 않는 한

  • 실행에 이전 데이터가 쓸모없는 (그리고 안전하게 제거 할 수 있습니다).
  • 재배치 엔트리가 필요한 크랙 추가 코드. 이 파일을 추가하는 대신 크래커는 단순히 reloc 테이블을 모두 제거합니다 (헤더의 ASLR을 비활성화 할 수도 있음).
  • 파일이 압축 된 경우 일반적으로 압축 해제 된 파일에 PE 재 작성 프로그램을 실행하여 디스크의 쓸모없는 섹션 데이터를 제거하고 치료합니다 PE 헤더를 올리십시오. 기본적으로 대부분의 도구는 PE에서 재배치 된 데이터를 제거합니다.
+0

"로드 할 DLL 이름을 변경하려면 일반적으로 가져 오기 테이블을 변경하면됩니다"- 아니요, 내보내기는 이전 DLL로 전달 될 수 있습니다. – Abyx

+0

@Abyx, 나는 '보통'이 아니라 '항상'이라고 말했습니다. 포워딩은 옵션이지만 가져 오기 테이블에서 dll 이름을 수정하는 것보다 구현하기가 어렵습니다. – pezcode

+0

@Abyx, 오, 나는 당신이 무엇을보고 있는지 알고있다. 내가로드 된 dll의 이름을 변경하는 것을 암시하지는 않았지만 (파일 이름을 변경하여)로드 될 dll을 변경했습니다. – pezcode

0

Portable Executable Specification에 따르면 라이브러리가 기본로드 주소가 아닌 다른 주소로로드되어야하는 경우에만 재배치 테이블이 필요합니다. 따라서 디렉터리에서 재배치 테이블을 삭제해도 이미지가 ASLR을 지원하지 않을 때 실제로 발생하는 것과 같이 선호 주소로 라이브러리가로드되는 한 영향을 미치지 않습니다.

관련 문제