>  기사  >  운영 및 유지보수  >  Android에서 새 프로젝트를 만드는 방법

Android에서 새 프로젝트를 만드는 방법

王林
王林앞으로
2023-05-29 23:37:241499검색

콘텐츠

1. 유용한 도구(Insight)에 대한 간단한 튜토리얼

무엇을 배울 수 있나요?

매우 강력한 분석 보조 소프트웨어입니다.

2. 안드로이드 최적화 과정 분석

무엇을 배울 수 있나요?

1. 안드로이드 최적화 프로세스에 대한 심층적인 이해
2. 안드로이드 소스 코드를 가까이서 관찰하세요
2. 빅 보스의 압축 풀기

3에서 기능을 볼 수 있습니다. 분석

무엇을 배울 수 있나요?

1. 다운로드 가능한 기타 기능
2. dex 파일 파싱 과정
3. 쉘링 및 브레이킹에 대한 약간의 지식

4. Android DEX 클래스 로딩 과정 분석

무엇을 배울 수 있나요?

1. 클래스 로딩의 전체 과정
2. 압축 해제 및 강화된 클래스 선택

0x01 유용한 도구(Insight)에 대한 간단한 튜토리얼

이 소프트웨어에는 c/C++ 및 Java 소스 코드를 분석하기 위한 강력한 보조 기능이 있습니다. 나중에 사용할 것이므로 간략하게 소개하겠습니다.

도구는 첨부파일에서 확인하실 수 있습니다. 별도로 업로드하고 다운로드하면 됩니다.

SI3US-205035-36448

등록 코드는 여기에 제공됩니다.

설치, 다음, 다음이 전부입니다.

Android에서 새 프로젝트를 만드는 방법

새 프로젝트 만들기

새 프로젝트를 선택하세요.

Android에서 새 프로젝트를 만드는 방법

단일 머신 OK
Android에서 새 프로젝트를 만드는 방법

첫 번째 것을 선택하세요.


Android에서 새 프로젝트를 만드는 방법

트리 추가를 선택하세요. 이는 모두 추가한다는 의미입니다.
Android에서 새 프로젝트를 만드는 방법

로딩이 완료된 후

Android에서 새 프로젝트를 만드는 방법

이 소프트웨어를 분석에 사용합니다.

안드로이드 최적화 과정 분석

좀 말씀드리고 싶은데, 이제 영어의 중요성을 알겠습니다. 물론 제 영어가 좋지는 않지만 사전을 찾아보면 알 수 있습니다.


Android에서 새 프로젝트를 만드는 방법

1.extractAndProcessZip

먼저 내용에 대해 이야기하지 말고 이 함수의 이름을 살펴보겠습니다. extract: 추출 및 처리 Zip, 압축 파일 형식, 우리 모두는 apk가 실제로 zip 압축 패키지라는 것을 알고 있습니다.
그렇다면 이 기능의 의미는 zip을 추출하는 과정입니다.

그럼 단계별로 분석해 보겠습니다.


Android에서 새 프로젝트를 만드는 방법

여기 extractAndProcessZip의 중간 변수 정의가 있습니다. 그것은 우리 연구의 초점이 아닙니다.


Android에서 새 프로젝트를 만드는 방법

DexClassVerifyMode verifyMode = VERIFY_MODE_ALL;

이 문장은 검증 모듈인 verifyMode를 정의합니다. 여기서 초기화되는 데이터는 VERIFY_MODE_ALL이며, 이는 모든 것이 검증되었음을 의미합니다.

Thinking

여기서 내용을 변경하면 이 검증을 건너뛸 수 있나요?

다른 가치도 살펴보겠습니다.


Android에서 새 프로젝트를 만드는 방법

아이디어가 있으면 이 값을 직접 정의할 수 있습니다.

DexOptimizerMode dexOptMode = OPTIMIZE_MODE_VERIFIED;


Android에서 새 프로젝트를 만드는 방법

계속 읽어보겠습니다.
Android에서 새 프로젝트를 만드는 방법

이름에서 알 수 있듯이 dex 최적화를 위해 빈 헤더를 생성하는 dexOptCreateEmptyHeader라는 함수가 있습니다.


Android에서 새 프로젝트를 만드는 방법

dexOffset, 나중에 다시 여기로 돌아올 수 있도록 파일 위치를 기록하세요. 이는 실제로 dex 파일을 읽는 시작 위치입니다.

다음 기능을 살펴보겠습니다.
Android에서 새 프로젝트를 만드는 방법

zip 아카이브를 열고 DEX 항목을 찾으세요.
분명히 이 부분이 하는 일은 apk에서 dex 파일을 찾는 것입니다.

그럼 분석해보세요.


Android에서 새 프로젝트를 만드는 방법

dex의 일부 오프셋을 추출하는 기능입니다.

Android에서 새 프로젝트를 만드는 방법

DEX 데이터를 현재 오프셋의 캐시 파일로 추출합니다. dex 파일의 일부 오프셋을 기록합니다.

다음으로 이야기할 내용은 dex odexing 과정입니다.


Android에서 새 프로젝트를 만드는 방법

여기서 최적화 확인이 이루어집니다.

여기에서 최적화 프로세스를 수정하고 최적화 확인을 제거할 수도 있습니다.

여기 데이터의 출처와 비교할 위치를
생각해 보세요. ·
이 데이터는 build.prop에서 비교됩니다.

2. 계속해서 최적화하세요

dvmContinueOptimization 함수에 대해 살펴보겠습니다.

PS:
우리는 포장 풀기와 매우 관련이 있는 매우 중요한 장소와 곧 접촉하게 됩니다

dvmContinueOptimization 기능을 엽니다

Android에서 새 프로젝트를 만드는 방법

첫 번째는 판단입니다.


Android에서 새 프로젝트를 만드는 방법

그런 다음 dex 파일에 쓰기가 있습니다.

그럼 계속 읽어보세요(중요한 사항이 나옵니다)


Android에서 새 프로젝트를 만드는 방법

dvmDexFileOpenPartial. 이전에 다른 사람들의 언패킹 튜토리얼을 본 적이 있다면 이것이 자주 사용되는 엔드포인트라는 것을 아셔야 합니다. 하지만 이제 이 함수가 소스 코드에 존재한다는 것을 알았습니다.

dvmDexFileOpenPartial 함수의 호출을 살펴보겠습니다.

Android에서 새 프로젝트를 만드는 방법

여기에서는 두 번 호출되며 다른 시간은 자체 정의입니다.

먼저 dvmDexFileOpenPartial의 프로토타입을 살펴보겠습니다

int dvmDexFileOpenPartial(const void* addr, int len, DvmDex** ppDvmDex)
매개변수 1: 메모리에 로드된 DEX 파일의 기본 주소(즉, DEX. .035)
매개변수 2: 로드된 DEX 파일의 파일 길이,
매개변수 3: 출력 매개변수, DEX 파일은 Dex 파일의 클래스, 필드, 메소드 및 문자열 정보를 포함하는 DvmDex 구조로 변환됩니다. Dalivk이 운영하는 Dex 파일의 객체는 구조 구조입니다


Android에서 새 프로젝트를 만드는 방법

마지막으로 헤더 정보가 여기에 기록됩니다.


Android에서 새 프로젝트를 만드는 방법

0x03 Android DEX 파일 구문 분석 및 분석

dvmRawDexFileOpen() 이 함수는 우리가 이해해야 할 핵심 함수이며 RawDexFile.cpp 함수에 있습니다.


Android에서 새 프로젝트를 만드는 방법

먼저 기본 변수를 정의합니다.


Android에서 새 프로젝트를 만드는 방법

우리 모두는 파일 형식에서 매우 중요한 것이 매직 넘버라는 것을 알고 있습니다. 따라서 매직 넘버를 결정하는 첫 번째 단계인 verifyMagicAndGetAdler32를 소개합니다. 여기서의 마법은 매직 넘버입니다.


Android에서 새 프로젝트를 만드는 방법

여기서 시간과 파일 크기를 확인합니다.


Android에서 새 프로젝트를 만드는 방법

이 기능은 핵심 기능이자 우리가 집중적으로 분석해야 할 기능이기도 합니다. 주요 기능은 소위 odexization이라는 dex에 해당하는 odex 파일을 생성하는 것입니다. 함수를 따라가서 살펴보겠습니다.

Android에서 새 프로젝트를 만드는 방법

다음은 dexOptGenerateCacheFileName() 함수의 일부입니다. 우리의 가장 중요한 것은 그것이 출력되는 위치를 확인하는 것입니다.

Android에서 새 프로젝트를 만드는 방법

여기서는 데이터 디렉터리 ALOGV("'%s' '%s'에 대한 캐시 파일은 '%s'입니다', fileName, subFileName, nameBuf);
다음에 생성된 것을 볼 수 있습니다. 이 형식처럼요.

즉, odex 파일이 여기에 생성되었습니다.

다음으로 할 일은 이 함수 dvmDexFileOpenFromFd()이며, 추가로 최적화하고 매핑을 완료한 후 읽을 수 있는 파일로 설정합니다. 이 기능을 엽니다. 위치는 DvmDex.cpp에 있습니다.

Android에서 새 프로젝트를 만드는 방법

먼저 이 함수가 호출되는 위치를 살펴보겠습니다.

Android에서 새 프로젝트를 만드는 방법

이 함수가 호출되는 곳은 핵심 함수인 dvmRawDexFileOpen입니다. 이 함수는 먼저 dexOptGenerateCacheFileName을 호출하여 odex를 생성한 다음 다른 최적화를 위해 dvmDexFileOpenFromFd를 호출합니다.

최적화의 마지막 단계는 DEX를 구문 분석하는 dexFileParse()입니다. 이 위치는 DexFile

Android에서 새 프로젝트를 만드는 방법

에 간략하게 요약되어 있습니다.

dvmRawDexFileOpen() 기본 제어 함수 - dexOptGenerateCacheFileName()은 해당 odex를 생성합니다. - dvmDexFileOpenFromFd()는 추가로 최적화합니다. - dexFileParse()는 dex를 구문 분석합니다.

PS: 팁

dexfileopenpartial이 다음 섹션에 있으면 이를 깨뜨릴 방법이 없다는 것을 알 수 있습니다. 그런 다음 dexOptGenerateCacheFileNamePKcS0, dvmdexfileopenfromfd 및 기타 기능을 선택하여 다음 섹션으로 진행할 수 있습니다.

일반적으로 말해서, dexfileopenpartial은 쉘을 사용하여 작업을 처리하는 데 더 좋습니다.

0x04 Android Dex 클래스 로딩 프로세스

다른 소스 코드는 주요 제어 기능에 의해 안내되어 다른 주요 기능이 작동하도록 안내합니다.

주요 제어 기능은 Dalvik_dalvik_system_DexFile_defineClassNative()


Android에서 새 프로젝트를 만드는 방법

주의가 필요한 기능인 Dalvik_dalvik_system_DexFile_openDexFileNative

여기서 주목해야 할 점은 덤프할 수 있는 곳이 두 군데 있다는 점입니다.


Android에서 새 프로젝트를 만드는 방법

주요 제어 기능을 살펴보겠습니다.

메인 컨트롤 기능에 이런 호출이 있습니다.
Android에서 새 프로젝트를 만드는 방법

이 호출은 쿠키를 확인하기 위한 것이지만 이 쿠키는 해독된 dex 쿠키일 가능성이 높으므로 이 쿠키를 여기에 덤프할 수도 있습니다.

그럼 아래를 내려다보세요.


Android에서 새 프로젝트를 만드는 방법

dvmDefineClass 함수, 이 함수는 클래스 로딩을 확인하는 함수입니다.

Android에서 새 프로젝트를 만드는 방법

함수는 스스로 판단을 내리지만, 반환되는 것은 실로 큰 머리입니다. 이 기능을 자세히 살펴보겠습니다.

Android에서 새 프로젝트를 만드는 방법

Android에서 새 프로젝트를 만드는 방법

여기서 가장 중요한 것은 동적으로 로드되는 클래스인 clazz입니다.

그 값은 loadClassFromDex 함수에 의해 반환되므로 좀 더 자세히 살펴보겠습니다.

Android에서 새 프로젝트를 만드는 방법

여기에서 그러한 구조를 확인하세요.

Android에서 새 프로젝트를 만드는 방법

이 구조의 세부 사항을 살펴 보겠습니다.

Android에서 새 프로젝트를 만드는 방법

이 구조는 dex 구조와 정확히 동일합니까? 이는 여기에 우리에게 필요한 것이 있음을 보여줍니다.

위 내용은 Android에서 새 프로젝트를 만드는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제