2013-12-10 3 views
2

Android APK 내부를 수정해야합니다. 작업은 동적 기호의 이름을 so (함수 이름)로 바꿉니다. 예를 들어arm elf .so 파일에서 동적 기호의 이름을 바꾸는 방법은 무엇입니까?

, Java_com_yahoo_zzz에 _.... Java_com_example_abc에서 변화 _....

내가 WinHex 직접 텍스트 단어의 APK 시작 오류를 검색하고 대체 사용하려고합니다. .hash 섹션도 업데이트해야하지만, .hash 섹션을 업데이트하는 방법을 모르겠습니다.

제 질문은 동적 기호의 이름을 바꾸는 정확하고 바람직한 방법은 무엇입니까?

내가 3 일 동안 붙어있어, 도와 줘서 고마워!

게시물이 관련성이 있다고 판별되었지만 대체 솔루션을 제공하지 않았습니다. 내가 3 일 동안 갇혀 당겨 https://sourceware.org/ml/binutils/2006-03/msg00266.html

+0

유일한 방법은 .so lib의 소스를 업데이트하고 다시 컴파일하는 것입니다. – pskink

+0

@pskink hmmm, 지금 분실되었습니다. 수정하려는 파일은 이미 원본에서 수정 된 다른 파일입니다. 그래서 나는 그것이 할 수 있다고 확신하지만, 어떻게 해야할지 모르겠습니다. Btw, 그냥 함수 이름 (기호)를 업데이 트해야합니다. – user3086444

+0

.so가 이미 다른 사람에 의해 수정되었음을 어떻게 알 수 있습니까? – pskink

답변

0

,

를 좀 도와주세요 당신이 달성하려고하는 것은 효과적으로 불가능하다.

ELF 파일은 내부 구조가 복잡하므로 원하는 부분을 해체하고 부품을 다시 조립해야합니다. 비유하자면 인텔 CPU를 트랜지스터로 분해하고 AMD CPU를 다시 어셈블하는 것입니다.

그것은 관련 게시물의 힘을 발견 한 것은 관련입니다. 인용구 : 기본적으로

다음과 같은 않습니다 및

  • 새로운 LMA/VMA를 계산 처음
  • 에서 .hash 테이블을 다시 작성 .dynsym 이상

    1. 루프를 .dynstr 다시 작성 , 새로운 메모리 레이아웃 (.dynstr 크기가 변경되었습니다.)
    2. 새로운 레이아웃에 따라 .dynamic의 내용을 수정했습니다.
    3. 수정 .rel.dyn
    4. copyied되는 것을 다시 부분을 제외 :
    5. 수정 .rel.plt
    6. 수정 .dynsym 다시
    7. 새로운 섹션의 내용 copy_section에서

    을 작성합니다.

    현재 문법적으로 유효한 ELF 파일을 만드는 것으로 보이지만, .plt와 .got 사이의 거리가 변경되면 .plt의 상대 주소가 손상됩니다. 또한 .got을 다시 수정해야합니다.

  • 그래서 저자는 AMD CPU처럼 보이지만 작동하지 않는 것을 함께 붙였습니다.

    물론, 저자가 한 일을 이해하기 위해 또 2 주를 보낼 수 있으며, 나머지 세분화 된 부분을 수정하기 위해 또 다른 3 주를 보낼 수 있습니다. 그리고 그 후에는 가끔 그런 종류의 것을 얻을 수 있습니다.

    귀하의 시간은 일 가능성이 높습니다. 다른 곳에서 더 잘 보냈습니다.

    +0

    관련 게시물은 기호의 이름을 다른 길이로 변경하려고하는 패치입니다. 길이를 변경할 필요가 없다면, 대부분의 작업은 불필요합니다. – OrangeDog

    관련 문제