APK를 변경하는 프로그램입니다. Android 시스템 애플리케이션(apk) 편집의 기본 사항입니다. APK 패키지 정리 및 수신

APK는 보관된 실행 가능한 애플리케이션 파일을 위해 Android 운영 체제에서 사용되는 형식입니다. 예를 들어 Windows의 아날로그는 .msi, Symbian의 경우 .sis, Linux의 경우 .rpm 또는 .deb입니다. 이 기사에서는 이 파일 형식과 관련된 모든 문제를 최대한 자세히 이해할 것입니다.

'올바르게' 분해하고, 편집하고, 조립하는 과정을 리버스 엔지니어링이라고 합니다. 이를 위해 무엇이 필요합니까? 다음 도구가 필요합니다.

Apktool. SmartApktool 셸을 사용하는 것이 더 편리하며 ApktoolBAT와 같은 미리 만들어진 배치 파일을 사용할 수도 있습니다.

메모장++ - 필수는 아니지만 적극 권장됩니다.

7zip, WinRar 또는 기타 아카이버 프로그램 중 하나를 사용하는 것이 좋습니다.

Deodexed 펌웨어.

Android 운영 체제에 애플리케이션을 설치하는 방법에는 여러 가지가 있습니다. 첫 번째이자 주요한 것은 Google Play(Android 마켓), 즉 Google 계정이 필요한 공식 소스를 통해 직접 제공됩니다. 많은 애플리케이션이 유료이므로 불법 복제 사이트에서 해킹된 버전을 찾고 싶지 않으면 구매 비용을 지불해야 합니다. 하지만 우리는 이것을 수행하는 방법에 대해 이야기할 것입니다. 두 번째는 Google Play 이외의 비공식 소스에서 가져온 것입니다. 이 경우 스마트폰이나 태블릿 설정에서 "비공식 소스의 애플리케이션 설치 허용" 옵션을 활성화한 후 APK 설치 파일을 메모리에 써야 합니다. 카드.

APK 애플리케이션을 대량으로 설치하는 것도 가능합니다. 이렇게 하려면 특수 파일 관리자인 Astro File Manager가 필요합니다. 설치한 후 애플리케이션을 이동합니다.

스마트폰/태블릿에서: in mntsdcardackups앱(즉, 메모리 카드, 백업 폴더, 앱 폴더)

개인용 컴퓨터에서(단순 USB 드라이브 모드에서 Android 장치 연결을 활성화하는 것을 잊지 마세요): SD카드백업

그런 다음 원하는 응용 프로그램을 열고 상황에 맞는 메뉴에서 "응용 프로그램 관리자"를 선택한 다음 "백업" 탭으로 이동하여 "설치할 응용 프로그램을 길게 클릭하거나 확인"을 선택합니다. "설치" 버튼을 클릭하세요. 모든 애플리케이션이 기기에 설치됩니다.

APK 파일의 구조를 확인하는 것은 매우 쉽습니다. WinRar와 같은 아카이버 프로그램을 사용하여 원하는 APK를 엽니다. 내부는 다음과 같습니다.

AndroidManifest.xml애플리케이션에 대한 시스템 요구 사항, 구조 및 버전을 포함하여 애플리케이션의 내용을 설명하는 일종의 "여권"입니다.

메타-INF– 파일이 포함된 폴더 매니페스트.MF(거의 모든 텍스트 편집기로 열 수 있으며 Notepad++를 사용하는 것이 좋습니다) SHA-1 체크섬 및 데이터 경로, Manifest-Version 표준 버전, RSA 또는 DSA 인증서 파일, SF를 볼 수 있습니다. 파일에는 다양한 리소스에 대한 경로와 해당 체크섬이 포함되어 있습니다. 일반적으로 META-INF는 메타데이터 파일, 즉 데이터에 대한 데이터이다.

입술– 하위 폴더로 분류된 모든 "소프트웨어 스터핑" 리소스를 포함하는 폴더입니다. 예를 들어 ~drawable~ 폴더에는 애플리케이션의 그래픽 요소(다양한 상태, 아이콘 등)가 포함되어 있고 레이아웃 디렉터리에는 GUI(그래픽 사용자 인터페이스) 요소의 배치를 나타내는 XML 파일이 포함되어 있습니다.

클래스.dex– Dalvik VM 가상 머신에 의해 실행되는 프로그램 코드. Android 운영체제는 Linux 커널과 Java 가상 머신이 혼합되어 있다는 점을 기억하세요.

리소스.arsc– 컴파일된 XML 파일. 여기에는 프로그램에서 사용하는 모든 리소스에 대한 데이터가 포함되어 있습니다.

자산– 다양한 리소스도 포함하는 폴더이며 APK에 전혀 없을 수도 있습니다.

lib– 프로그램이 NDK를 사용하여 작성된 경우 "libs" 또는 더 간단하게는 기본 라이브러리(예: C++의 경우 요소 포함)가 포함된 폴더입니다. 이 디렉터리는 APK에 없을 수 있습니다.

com– APK에 없을 수도 있습니다.

조직– APK에 없을 수도 있습니다.

으크– APK에 없을 수도 있습니다.

APK 애플리케이션의 내용을 다루었으니 이제 자세한 분해를 진행해 보겠습니다. 디컴파일을 위해서는 Apktool과 Java는 물론 APK 파일 자체도 필요합니다. Apktool은 디렉토리에 압축을 푸는 것이 좋습니다 씨:윈도우(필수는 아니지만 더 편리할 것입니다. 왜 – 조금 더 아래에서 읽으십시오).

Apktool을 실행하려면 컴퓨터의 "실행" 메뉴로 들어가야 합니다. Windows XP에서는 클릭하세요. 시작 -> 실행, Windows 7의 경우: 작업 관리자( Ctrl+Alt+), 드롭다운 메뉴 상단에 파일 -> 새 작업(실행...), 또는 간단히 키보드 단축키를 사용하여 호출하세요. 승리+R.

명령줄 호출 - 쓰기 cmd, 그 후 Apktool을 시작합니다 - 쓰기 apktool(이 목적을 위해서는 WINDOWS 폴더에 넣어야 했습니다). 또한 모든 제어는 매개변수를 사용하여 명령줄을 통해 이루어집니다.

지속적으로 텍스트 명령을 입력하는 데 신경쓰지 않으려면 언급된 SmartApkTool과 같은 그래픽 인터페이스를 사용할 수 있습니다. SmartApkTool.exe를 시작한 다음 Unpack/Pack 탭에서 원하는 APK 애플리케이션을 선택합니다(파일 이름에 공백, 키릴 문자, 특수 문자 및 문장 부호가 포함되지 않는 것이 중요합니다).

압축을 풀면 프로그램은 APK 파일과 동일한 이름의 폴더를 생성합니다. 그 안에는 신청서의 모든 내용이 들어있습니다.

APK를 현지화할 수도 있습니다. 이 작업을 시작하기 전에 사전 설치된 Notepad++를 실행하고 다음과 같이 구성합니다. 열리는 설정 -> 구성 -> 새 문서.

이 단계를 마친 후 압축을 푼(디컴파일된) 응용 프로그램 폴더를 엽니다. 해상도/가치.

모든 현지화는 파일에 있는 경우가 많습니다. 문자열.xml하지만 때로는 그 중 일부가 배열.xml. 이 파일을 복사하여 폴더에 만듭니다. 입술폴더 가치-그리고 그 안에 삽입하세요.

이제 열 수 있습니다 문자열.xml Notepad++를 사용하여 번역하고 변경된 파일을 저장합니다.

파일에 있음 AndroidManifest.xml APK 애플리케이션을 설치할 위치를 지정할 수 있습니다. 주의하세요. 이는 Android 버전 2.2 이상에만 해당됩니다. 따라서 Notepad++를 사용하여 지정된 파일을 엽니다. 거의 맨 처음에 다음 매개변수를 볼 수 있습니다.

여기에서 다음 옵션을 지정할 수 있습니다("=" 기호 뒤):

내부 전용– 애플리케이션은 기기의 내부 메모리에만 설치됩니다.

자동– 사용자에게 내부 메모리 또는 메모리 카드에 애플리케이션을 설치할 수 있는 선택권을 제공합니다.

선호외부– 프로그램이 메모리 카드에 설치됩니다. 외장 드라이브에 설치된 경우 모든 애플리케이션이 제대로 작동하지 않거나 전혀 작동하지 않는다는 점을 고려해야 합니다. 여기에는 다음이 포함됩니다.

서비스- 즉, 서비스

알람 서비스– 알람시계 등 시간을 활용하는 서비스

입력 방식 엔진– 다양한 키보드를 포함한 입력 애플리케이션

라이브 배경화면– “라이브” 애니메이션 배경화면

살다폴더– 각각 애니메이션 디렉토리

위젯– 다양한 "위젯"

계정관리자– ICQ 클라이언트, 소셜 네트워크 클라이언트 등을 포함한 다양한 계정의 관리자

동기화 어댑터– 지속적인 동기화가 필요한 프로그램

장치관리자– 관리에 사용되는 애플리케이션

복사 방지– 복사가 방지된 애플리케이션.

애플리케이션에서는 사용자 인터페이스의 다양한 아이콘과 그래픽 요소를 편집하고 자신만의 것으로 바꿀 수 있습니다. 이렇게 하려면 폴더를 엽니다. 입술디컴파일된 APK 애플리케이션이 있는 폴더에서 다음 폴더를 볼 수 있습니다.

드로어블-hdpi

drawable-ldpi

이 폴더에는 프로그램의 모든 아이콘과 기타 그래픽 요소가 포함되어 있습니다. "dpi" 앞의 문자는 각각 그래픽 요소의 크기를 의미합니다.

HDPI -고밀도 인치당 도트 수, 크기 72x72 픽셀

mdpi -인치당 평균 도트 밀도, 크기 48x48 픽셀

dpi -낮은 인치당 도트 밀도, 크기 36x36 픽셀

예를 들어 애플리케이션 아이콘을 변경하려면 파일을 엽니다. AndroidManifest.xml Notepad++ 프로그램을 사용하여 아이콘이 표시된 줄을 찾고 정확한 이름을 확인합니다(파일 확장자는 기록되지 않고 파일 이름만 기록됩니다).

해당 폴더 열기 드로어블-*dpi,편집된 아이콘이나 새 아이콘을 삽입하고, 원래 이름을 다시 확인하는 것을 잊지 마세요. AndroidManifest.xml. 이미지는 .png 형식이어야 하며 소스 파일과 정확히 동일한 픽셀 밀도를 가져야 합니다. HDPI 72x72 픽셀입니다.

아이콘 이름을 자신의 이름으로 바꾸려면 원하는 파일 이름으로 그림을 저장하십시오. 드로어블-*dpi, 그 후에는 정확히 동일한 이름을 나타냅니다. AndroidManifest.xml(예를 들어 안드로이드:아이콘=”@drawable/시험"). 같은 방법으로 다른 그래픽 요소를 변경할 수 있지만 요구 사항은 동일합니다. 확장자는 .png여야 하고 인치당 도트 수 밀도는 소스 파일과 동일해야 합니다.

압축을 푼 애플리케이션에서 어떤 권한이 있는지 다시 확인할 수 있습니다. 이는 APK가 알 수 없는 소스에서 설치된 경우 유용하며, 손전등이나 아름다운 달력이 갑자기 알 수 없는 번호로 유료 SMS 메시지를 보내기 시작하는 상황을 방지하는 데 유용합니다. 열리는 AndroidManifest.xml Notepad++ 프로그램을 실행하고 해당 줄을 찾으세요. 예를 들어 문자 메시지를 보내는 경우 매개변수가 책임을 집니다. 문자를 보내다. 애플리케이션에 제공될 수 있는 모든 권리에 대한 자세한 내용은 에서 확인할 수 있습니다.

설치된 APK 애플리케이션을 시스템에서 추출할 수 있습니다. 이는 여러 가지 방법으로 수행할 수 있습니다. 먼저 Astro File Manager를 설치하세요. 응용 프로그램을 열고 상황에 맞는 메뉴에서 "응용 프로그램 관리자"를 선택합니다. 필요한 응용 프로그램을 찾아 확인 표시로 표시하고 백업 복사본을 만듭니다. 처리 후 선택한 애플리케이션은 다음 경로를 따라 위치하게 됩니다.

mntsdcardackups앱

sdcardackups앱

다음으로 Root Uninstaller 프로그램을 사용할 수 있습니다. 일단 실행되면 애플리케이션은 설치된 모든 APK를 자동으로 감지하고 자동으로 모두 백업합니다. 따라서 원하는 경우 추가 디컴파일을 위해 이러한 백업 복사본을 복사할 수 있으며 경로를 따라 위치합니다.

mntsdcardRootUninstaller자동 백업(Android 기기에서 직접 볼 때)

sdcardRootUninstaller자동 백업(Android 장치가 USB 드라이브로 연결된 동안 컴퓨터를 통해 볼 때)

또 다른 방법은 Root Browser Lite를 사용하는 것입니다. 물론 이를 위해서는 루트 권한이 필요합니다. 이 응용 프로그램을 열고 다음 경로를 따르십시오.

체계(시스템 애플리케이션에 관심이 있는 경우)

필요한 응용 프로그램을 메모리 카드에 복사한 후 해당 응용 프로그램을 사용하여 모든 조작을 수행할 수 있습니다.

Google Play(Android 마켓)에서 관심 있는 APK 애플리케이션을 개인 컴퓨터로 직접 다운로드할 수도 있습니다. 이렇게 하려면 Google Chrome 브라우저(버전 17 이상)와 이를 위한 플러그인인 APK 다운로더가 필요합니다. 지정된 플러그인을 다운로드하고 설치한 후 공백 뒤에 다음 줄을 쓰는 Google Chrome 브라우저 바로가기의 복사본을 만듭니다.

-인증서 오류 무시

표준 브라우저 설치 경로를 사용하면 행은 다음과 같아야 합니다.

"C:프로그램 파일GoogleChromeApplicationchrome.exe" -인증서 오류 무시

그런 다음 스마트폰 다이얼러에 다음을 입력하세요.

*#*#8255#*#*

16자로 구성된 장치 ID를 다시 작성합니다. 지정된 매개변수로 생성된 바로가기를 사용하여 Google Chrome을 엽니다. -인증서 오류 무시, 가자 도구 -> 확장(주소 표시줄에 "chrome://settings/extensions"를 입력할 수도 있음), APK 다운로더 플러그인의 설정을 엽니다. 옵션에 Google 계정의 이메일 주소와 비밀번호, 수신된 기기 ID를 입력하세요. 이제 Google Play(Android 마켓)로 이동하여 원하는 애플리케이션이 있는 페이지를 열고 완전히 다운로드될 때까지 기다립니다. APK 다운로더 아이콘이 나타납니다. 이를 클릭하면 애플리케이션이 컴퓨터에 다운로드됩니다.

당사 웹사이트에서 Android용으로 다운로드할 수 있는 Apk Editor Pro를 사용하면 모바일 장치용 애플리케이션의 파일 내용을 해킹/변경하고 귀하의 재량에 따라 사용자 정의할 수 있습니다.

특징

이 프로그램은 고급 사용자의 손에서 Android용 애플리케이션을 편집하기 위한 강력한 도구가 될 수 있는 전문 유틸리티입니다. 기능은 개인용 컴퓨터의 유사한 소프트웨어와 거의 다르지 않습니다.

이 유틸리티는 무엇을 할 수 있나요?

  1. 다른 애플리케이션의 이름을 변경(번역)합니다.
  2. 아키텍처 레이아웃, 색상, 그래픽 설정 템플릿(예: 아이콘 크기)을 변경합니다.
  3. 사운드 디자인, 미디어 파일을 변경합니다.
  4. 광고를 제거하세요.
  5. 유료 콘텐츠 차단을 우회합니다.
  6. 기기 내부 메모리의 애플리케이션을 SD 카드로 전송합니다.
  7. 해상도 등을 변경하세요.

유틸리티 사용 방법을 이해하려면 APK Editor Pro를 다운로드하고 메뉴로 이동해야 합니다. 그런 다음 Android에 이미 설치된 애플리케이션이나 해당 apk 파일을 선택합니다. 그 후에는 사용자가 변경할 수 있는 기본 데이터가 열립니다.

  • 리소스 편집;
  • 파일 교체;
  • 일반 편집;
  • 데이터 편집.

프로그램은 수정된 버전을 설치하도록 제안합니다. 모든 경우에 작동하는 것은 아니므로 이전 버전을 수동으로 제거하고 새 버전을 설치해야 합니다. 삭제 후에는 안드로이드에 설치된 프로그램 중 apk editor 폴더(편의상 ES Explorer 이용 가능)를 선택하고, 수정된 애플리케이션 파일을 찾아 디바이스에 설치해야 합니다.

이 프로그램은 사용자 친화적인 인터페이스를 가지고 있습니다. 내비게이션은 매우 간단하지만 이를 이해하려면 사용자가 영어에 대한 기본 지식이 필요합니다.

장점과 단점

  1. 이 프로그램은 사용자에게 응용 프로그램을 사용자 정의하기 위한 다양한 옵션을 제공합니다.
  2. 메뉴에는 편집기 프로그램의 다양한 기능을 간단하고 자세하게 설명하는 도움말 섹션이 포함되어 있습니다. 따라서 프로그래밍에 거리가 먼 사용자는 타사 리소스에서 예제와 편집 지침을 찾을 필요가 없습니다.
  3. 당사 웹사이트에서 프로그램을 무료로 다운로드할 수 있습니다.

이 유틸리티를 사용하려면 몇 가지 기술과 지식이 필요합니다. 경험이 없는 사용자의 편집으로 인해 파일 시스템의 무결성이 침해되어 궁극적으로 응용 프로그램 오류가 발생할 수 있습니다. 도움말 항목의 메뉴에는 Android에서 apk editor pro를 올바르게 사용하는 방법에 대한 그림과 팁이 포함된 변환 예시가 있습니다. 따라서 이 프로그램을 이해하고 싶다면 지침을 따르십시오.

편집기는 불편한 애플리케이션 인터페이스(러시아어 부족, 지속적인 광고, 배너 등)에 직면한 사람들에게 매우 유용한 도구입니다. 이미 이 프로그램을 사용해 본 적이 있다면 아래 댓글로 감상을 공유해 주세요.

이 기사에서는 Android 애플리케이션이 무엇으로 구성되어 있는지, APK 파일을 여는 방법 및 어떤 프로그램을 사용하는지 알아봅니다.

APK 파일이란 무엇입니까?

APK는 보관된 실행 애플리케이션 파일에 사용되는 Android 운영 체제의 형식이며 파일 이름 자체는 무엇이든 가능하지만 확장자는 this.apk여야 합니다. 다른 운영 체제의 APK 아날로그는 Windows의 .msi, Symbian의 .sis, Linux의 .rpm 또는 .deb입니다.

안에 무엇이 있는지 보자
실제로 .apk는 ZIP 아카이브이므로 WinRAR 또는 X-plore 모바일 애플리케이션과 같은 파일 관리자나 아카이버를 사용하여 내부 장치를 볼 수 있습니다.





내부 리소스에 대한 시각적 액세스만 가능하며 편집 기능은 극히 제한되어 있다는 점을 기억할 가치가 있습니다.
구조를 살펴보자
.apk 안에는 여러 개의 파일과 폴더가 있습니다. 해당 파일과 폴더의 용도를 알아보세요.
  • AndroidManifest.xml은 모든 주요 사항, 요구 사항, 버전, 권한 등을 확인할 수 있는 일종의 애플리케이션 "여권"입니다.
  • META-INF 이 파일에는 메타데이터, 즉 데이터에 대한 데이터, 체크섬, 데이터 경로, 리소스 경로 및 체크섬, 인증서가 포함되어 있습니다. 이 파일은 어떤 텍스트 편집기로도 열 수 있지만 Notepad++를 사용하는 것이 좋습니다.
  • res 폴더에는 모든 프로그램 리소스, 아이콘, 그림, 텍스트 및 그래픽 인터페이스 요소와 같은 그래픽이 포함되어 있습니다. 폴더에 쉽게 접근할 수도 있습니다.
  • classes.dex는 Dalvik VM 가상 머신에 의해 실행되는 직접 응용 프로그램 코드입니다. .apk를 디컴파일해야만 이 파일 내부에 무엇이 있는지 볼 수 있습니다. 이에 대해서는 다른 기사에서 다루겠습니다. resources.arsc - 컴파일된 XML 파일로, 이 파일에는 프로그램과 관련된 모든 리소스에 대한 데이터가 포함되어 있습니다.
  • lib - 특수 프로그램을 사용할 때만 리소스에 액세스할 수 있는 네이티브 라이브러리가 있는 폴더입니다. APK에는 com, org, udk와 같은 파일 및 폴더가 포함될 수도 있지만 항상 그런 것은 아닙니다.

이제 내부 구조를 좀 더 자세히 살펴보겠습니다. 이를 위해서는 디컴파일 프로그램, Java 및 APK 파일이 필요합니다. .apk를 분해하는 주요 도구는 Apktool이지만 이 프로그램은 해당 라인에서만 작동하므로 그다지 편리하지 않습니다. 보다 빠르고 편리한 분석을 위해 APKing을 사용할 수 있습니다. 이는 여전히 동일한 Apktool이지만 컨텍스트 메뉴에서 작업할 수 있는 기능이 있습니다.
따라서 Windows용 응용 프로그램처럼 APKing을 설치하고 .apk를 선택한 후 마우스 오른쪽 버튼과 Shift를 동시에 사용하여 클릭하면 다음이 표시됩니다.


예를 들어 완전히 디컴파일하는 등 필요한 작업을 선택하면 프로그램이 작업을 완료하고 동일한 이름의 폴더를 생성합니다.


폴더를 열면 APK 파일의 모든 리소스에 액세스할 수 있습니다.


이제 모든 텍스트 파일을 편집할 수 있습니다. 기본 규칙을 준수하면서 인기 있는 Notepad++ 프로그램을 사용할 수 있습니다. 예를 들어 AndroidManifest.xml을 고려해 보세요.

다시 저입니다. 그리고 그림이 있는 찻주전자와 커피 포트에 대한 지침입니다.

이번에는 상태 표시 줄 수정 설치 예를 사용하여 Android OS의 시스템 구성 요소 교체에 대해 자세히 설명하겠습니다.

안드로이드는 작은 리눅스이다. 전화가 벽돌로 변하지 않도록 파일을 교체할 때 여러 가지 규칙을 따라야 합니다. 벽돌은 장치 내부 메모리의 모든 데이터가 손실되어 완전히 깜박이는 경우에만 부활할 수 있습니다. 내부 파티션은 플래시 드라이브의 FAT32와 다른 파일 시스템으로 포맷됩니다. 무엇보다도 파일 속성은 다양한 사용자 그룹(파일 소유자, 파일 소유자 그룹, 기타 사용자)에 대한 권한을 저장합니다. 시스템 파일로 작업할 때는 로드할 때 시스템이 해당 파일에 액세스하지 못하고 정상적으로 부팅되지 않을 수 있으므로 해당 파일을 저장해야 합니다.
도구부터 시작해 보겠습니다.

우리는 다음이 필요합니다:

  • 루트 권한 및 파일 권한으로 작업할 수 있는 파일 관리자입니다. Root Explorer가 최고입니다. (구입하셨죠?)
  • 시스템 파일 대신에 배치하려는 수정된 파일 자체(기사 끝의 링크).

이제 Root Explorer의 편리한 기능 중 하나를 사용합니다. 원하는 파일을 길게 탭하여 컨텍스트 메뉴를 불러옵니다.

그리고 항목을 클릭하세요 " 이 파일을 압축하세요."파일을 SD 카드의 zip 아카이브에 저장합니다. 아카이브 후에는 다음 메시지를 받게 됩니다.

버튼을 누르세요 " 머무르다" 폴더에 머물면서 한 가지 작업을 더 수행합니다.

이제 파일을 교체할 준비가 모두 완료되었습니다.
각 파일의 접근 권한에 대해서는 이미 이야기했습니다. 새 파일에서 다시 생성하려면 먼저 이전 파일에서 살펴봐야 합니다. 이는 일련의 기호 "rwxrwxrwx"로 표시됩니다. 첫 번째 트라이어드 - 소유자 권한, 두 번째 - 소유자 그룹, 세 번째 - 기타 모든 사용자. 우리 파일에는 "rw-r--r--" 권한이 있습니다.

이제 SD 카드로 이동하여 수정된 파일을 찾아 해당 컨텍스트 메뉴에서 " 항목을 선택합니다. 복사", 그러나 시스템이 즉시 손상될 수 있으므로 "/system/app" 폴더를 즉시 선택하려고 서두르지 마십시오. 대신 파일을 임시 파일 "/data/local/tmp"용 특수 폴더에 복사하여 시스템을 사용하는 형식으로 파일을 작성하세요.
먼저 파일의 컨텍스트 메뉴를 호출하고 " 이름 바꾸기"를 입력하고 파일 이름 "SystemUI.apk"를 입력합니다. 맞습니다. Linux에서는 이름의 대소문자가 중요하기 때문입니다. 즉, "systemui.apk"와 "SystemUI.apk"는 다른 파일입니다.
다음으로 파일 권한을 변경해야 합니다. 이제 권한이 잘못 설정되었을 가능성이 거의 높기 때문입니다. 이렇게 하려면 길게 탭하여 파일의 컨텍스트 메뉴를 다시 호출하고 " 항목을 선택하세요. 권한". "rw-r--r--" 값의 경우 확인란은 다음과 같이 배치되어야 합니다.

"를 클릭하세요. 좋아요"를 클릭하고 컨텍스트 메뉴를 다시 호출합니다. 이제 이 애플리케이션의 소유자와 그룹을 변경해야 합니다. 이렇게 하려면 " 항목을 선택합니다. 소유자 변경". 파일의 현재 소유자에 대한 정보가 포함된 창이 나타납니다.
여기서 우리는 약간의 여담을 만들어야 합니다.
"/system/app" 폴더에서 모든 파일은 사용자 "root"(uid=0)와 그룹 "root"(gid=0)가 소유하고 "/system/framework" 폴더에서는 사용자 " system"(gid=1000)이 소유되고 그룹 "system"(gid=1000)이 소유됩니다.
위 내용을 바탕으로 필요한 값을 설정하고 "를 클릭하세요. 좋아요".
세 번째로 파일의 컨텍스트 메뉴를 호출하고 " 항목을 선택하십시오. 복사" 그리고 복사 대화 상자에서 "/system/app" 폴더로 이동합니다. 이제 자유롭게 "를 클릭하세요. 반죽"하고 더 자세히 읽어보세요.
거의 즉시 시스템은 상태 표시줄 프로세스가 갑자기 종료되었음을 알리고 시작을 제안합니다. 모든 시도는 실패합니다. 창이 나타나는 사이에 여러 가지 작업을 수행할 시간이 필요합니다. 버튼을 누르기 전에 기기를 끄기 위한 메뉴를 불러와야 하며, 경고 메시지가 나타납니다. 이제 버튼의 왼쪽에 손가락을 놓아야 합니다. 이제 경고를 닫고 종료 옵션을 선택한 다음 의도를 확인하려면 손가락을 매우 빠르게 세 번 클릭해야 합니다.
이제 전화기가 꺼질 때까지 기다렸다가 다시 시작하여 결과를 즐기거나, 마음에 들지 않고 오류를 찾습니다.

때때로 Android의 일부 애플리케이션은 어떤 면에서 사용자에게 적합하지 않습니다. 대표적인 것이 침입형 광고다. 또한 프로그램은 모든 사람에게 좋지만 번역이 비뚤어지거나 전혀 없는 경우도 있습니다. 또는 예를 들어 프로그램이 평가판이지만 정식 버전을 얻을 수 있는 방법이 없습니다. 상황을 바꾸는 방법은 무엇입니까?

소개

이 기사에서는 애플리케이션으로 APK 패키지를 분해하고, 내부 구조를 살펴보고, 바이트코드를 분해 및 디컴파일하는 방법, 그리고 우리에게 한 가지 이점을 가져올 수 있는 애플리케이션에 몇 가지 변경 사항을 적용하는 방법에 대해 설명합니다.

이 모든 작업을 직접 수행하려면 Android 애플리케이션을 작성하는 데 사용되는 Java 언어와 Android의 모든 곳에서 사용되는 XML 언어(애플리케이션 자체 및 액세스 권한 설명부터 문자열 저장에 이르기까지)에 대한 최소한의 기본 지식이 필요합니다. 화면에 표시됩니다. 또한 특수 콘솔 소프트웨어를 사용할 수 있는 능력도 필요합니다.

그렇다면 모든 Android 소프트웨어가 배포되는 APK 패키지는 무엇입니까?

애플리케이션 디컴파일

이 글에서는 디스어셈블된 애플리케이션 코드로만 작업했지만, 대규모 애플리케이션에 더 심각한 변경이 가해지면 smali 코드를 이해하는 것이 훨씬 더 어려워질 것입니다. 다행스럽게도 dex 코드를 Java 코드로 디컴파일할 수 있습니다. 이는 원본이 아니고 다시 컴파일되지 않더라도 애플리케이션의 논리를 읽고 이해하기가 훨씬 쉽습니다. 이를 위해서는 두 가지 도구가 필요합니다.

  • dex2jar는 Dalvik 바이트코드를 JVM 바이트코드로 변환하는 도구로, 이를 기반으로 Java 언어로 코드를 얻을 수 있습니다.
  • jd-gui는 JVM 바이트코드에서 읽을 수 있는 Java 코드를 얻을 수 있게 해주는 디컴파일러입니다. 대안으로 Jad(www.varaneckas.com/jad)를 사용할 수 있습니다. 꽤 오래되었지만 어떤 경우에는 Jd-gui보다 더 읽기 쉬운 코드를 생성합니다.

이것이 어떻게 사용되어야 하는가입니다. 먼저 apk 패키지 경로를 인수로 지정하여 dex2jar을 시작합니다.

% dex2jar.sh mail.apk

결과적으로 Java 패키지 mail.jar이 현재 디렉토리에 나타나며, 이는 Java 코드를 보기 위해 이미 jd-gui에서 열 수 있습니다.

APK 패키지 정리 및 수신

Android 앱 패키지는 본질적으로 콘텐츠를 보거나 추출하는 데 특별한 도구가 필요하지 않은 일반 ZIP 파일입니다. 아카이버(Windows의 경우 7zip, Linux의 경우 콘솔 압축 해제)만 있으면 충분합니다. 그러나 그것은 래퍼에 관한 것입니다. 안에 무엇이 들어있나요? 일반적으로 내부에는 다음과 같은 구조가 있습니다.

  • 메타-INF/- 애플리케이션의 디지털 인증서, 작성자 식별, 패키지 파일의 체크섬이 포함되어 있습니다.
  • res/ - 이미지, 인터페이스의 선언적 설명 및 기타 데이터와 같이 애플리케이션이 작업에 사용하는 다양한 리소스입니다.
  • AndroidManifest.xml- 응용 프로그램에 대한 설명입니다. 예를 들어, 여기에는 필수 권한 목록, 필수 Android 버전 및 필수 화면 해상도가 포함됩니다.
  • 클래스.dex- Dalvik 가상 머신용으로 컴파일된 애플리케이션 바이트코드
  • 리소스.arsc- 리소스도 있지만 종류가 다릅니다. 특히 문자열입니다(예, 이 파일은 Russification에 사용될 수 있습니다!).

나열된 파일과 디렉터리는 전부는 아니지만 아마도 대부분의 APK에 있을 것입니다. 그러나 언급할 가치가 있는 그다지 일반적이지 않은 파일/디렉터리가 몇 가지 더 있습니다.

  • 자산-자원의 아날로그. 주요 차이점은 리소스에 액세스하려면 해당 식별자를 알아야 하지만 애플리케이션 코드에서 AssetManager.list() 메서드를 사용하여 자산 목록을 동적으로 얻을 수 있다는 것입니다.
  • lib- NDK(네이티브 개발 키트)를 사용하여 작성된 네이티브 Linux 라이브러리.

이 디렉토리는 C/C++로 작성된 게임 엔진을 여기에 배치하는 게임 제작자와 고성능 애플리케이션(예: Google Chrome) 제작자가 사용합니다. 우리는 장치를 알아 냈습니다. 그런데 관심 있는 애플리케이션의 패키지 파일을 어떻게 얻나요? 루트가 없으면 장치에서 APK 파일을 가져올 수 없으며(파일은 /data/app 디렉터리에 있음) 루팅이 항상 권장되는 것은 아니므로 응용 프로그램 파일을 컴퓨터로 가져오는 방법에는 최소한 세 가지가 있습니다.

  • Chrome용 APK 다운로더 확장 프로그램;
  • 실제 APK Leecher 앱;
  • 다양한 파일 호스팅 및 Varezniks.

어느 것을 사용할지는 취향의 문제입니다. 우리는 별도의 애플리케이션을 사용하는 것을 선호하므로 Real APK Leecher의 사용에 대해 설명하겠습니다. 특히 Java로 작성되어 Windows나 Nix에서 작동하기 때문입니다.

프로그램을 시작한 후 이메일, 비밀번호, 장치 ID의 세 가지 필드를 입력하고 언어를 선택해야 합니다. 처음 두 개는 기기에서 사용하는 Google 계정의 이메일과 비밀번호입니다. 세 번째는 장치 식별자이며 다이얼러에 코드를 입력하여 얻을 수 있습니다. # #8255## 그런 다음 장치 ID 줄을 찾습니다. 작성시 android- 접두사 없이 아이디만 입력하시면 됩니다.

작성하고 저장하면 '서버 연결 중 오류가 발생했습니다'라는 메시지가 자주 뜹니다. Google Play와는 아무런 관련이 없으므로 무시하고 관심 있는 패키지를 찾아보세요.

보기 및 수정

관심 있는 패키지를 찾아서 다운로드하고 압축을 푼 다음 XML 파일을 보려고 했을 때 해당 파일이 텍스트가 아니라는 사실을 알고 놀랐다고 가정해 보겠습니다. 디컴파일하는 방법과 일반적으로 패키지를 사용하여 작업하는 방법은 무엇입니까? SDK를 꼭 설치해야 하나요? 아니요, SDK를 전혀 설치할 필요가 없습니다. 실제로 APK 패키지를 추출, 수정 및 패키징하는 모든 단계에는 다음 도구가 필요합니다.

  • ZIP 아카이버포장 풀기 및 포장용;
  • 스말리- Dalvik 가상 머신 바이트코드 어셈블러/디스어셈블러(code.google.com/p/smali)
  • 적절한- 리소스 패키징을 위한 도구입니다(기본적으로 리소스는 애플리케이션 성능을 최적화하기 위해 바이너리 형식으로 저장됩니다). Android SDK에 포함되어 있지만 별도로 구입할 수도 있습니다.
  • 서명자- 수정된 패키지에 디지털 서명을 하기 위한 도구입니다(bit.ly/Rmrv4M).

이 모든 도구를 개별적으로 사용할 수 있지만 불편하므로 이를 기반으로 구축된 상위 수준의 소프트웨어를 사용하는 것이 좋습니다. Linux 또는 Mac OS X에서 작업하는 경우 apktool이라는 도구가 있습니다. 이를 사용하면 리소스를 원래 형식(바이너리 XML 및 arsc 파일 포함)으로 압축을 풀고 변경된 리소스로 패키지를 다시 빌드할 수 있지만 패키지에 서명하는 방법을 모르므로 서명자 유틸리티를 수동으로 실행해야 합니다. 유틸리티가 Java로 작성되었음에도 불구하고 설치는 매우 비표준입니다. 먼저 jar 파일 자체를 가져와야 합니다.

$ cd /tmp $ wget http://bit.ly/WC3OCz $ tar -xjf apktool1.5.1.tar.bz2

$ wget http://bit.ly/WRjEc7 $ tar -xjf apktool-install-linux-r05-ibot.tar.bz2

$ mv apktool.jar ~/bin $ mv apktool-install-linux-r05-ibot/* ~/bin $ 내보내기 PATH=~/bin:$PATH

Windows에서 작업하는 경우 Virtuous Ten Studio라는 훌륭한 도구가 있습니다. 이 도구에는 이러한 모든 도구(apktool 자체 포함)도 포함되어 있지만 CLI 인터페이스 대신 다음과 같은 작업을 수행할 수 있는 직관적인 그래픽 인터페이스를 사용자에게 제공합니다. 몇 번의 클릭만으로 압축 풀기, 분해 및 디컴파일 작업을 수행할 수 있습니다. 이 도구는 Donation-ware입니다. 즉, 때때로 라이센스를 얻으라는 요청 창이 나타나지만 결국에는 허용될 수 있습니다. 몇 분 안에 인터페이스를 이해할 수 있기 때문에 설명할 필요가 없습니다. 그러나 apktool은 콘솔 특성으로 인해 더 자세히 논의되어야 합니다.


apktool 옵션을 살펴보겠습니다. 간단히 말해서 d(디코드), b(빌드), if(프레임워크 설치)의 세 가지 기본 명령이 있습니다. 처음 두 명령으로 모든 것이 명확하다면 세 번째 조건문은 무엇을 합니까? 시스템 패키지를 분석하는 경우 필요한 지정된 UI 프레임워크의 압축을 풉니다.

첫 번째 명령의 가장 흥미로운 옵션을 살펴보겠습니다.

  • -에스- dex 파일을 분해하지 마세요.
  • -아르 자형- 자원의 압축을 풀지 마십시오.
  • -비- dex 파일 분해 결과에 디버깅 정보를 삽입하지 마십시오.
  • --프레임 경로- apktool에 내장된 UI 프레임워크 대신 지정된 UI 프레임워크를 사용하세요. 이제 b 명령에 대한 몇 가지 옵션을 살펴보겠습니다.
  • -에프- 변경 사항을 확인하지 않고 강제로 조립합니다.
  • -ㅏ- 어떤 이유로든 다른 소스에서 사용하려는 경우 aapt(APK 아카이브를 구축하기 위한 도구) 경로를 표시합니다.

apktool을 사용하는 것은 매우 간단합니다. 이를 수행하려면 다음과 같이 명령 중 하나와 APK 경로를 지정하기만 하면 됩니다.

$ apktool d mail.apk

그런 다음 패키지의 추출 및 분해된 모든 파일이 메일 디렉토리에 나타납니다.

준비. 광고 비활성화

물론 이론은 좋지만 포장을 푼 패키지로 무엇을 해야할지 모른다면 왜 필요합니까? 우리의 이익을 위해 이론을 적용해 보겠습니다. 즉, 광고가 표시되지 않도록 일부 소프트웨어를 수정해 보겠습니다. 예를 들어 가상 토치(Virtual Torch)라고 가정해 보겠습니다. 이 소프트웨어는 성가신 광고로 가득 차 있고 코드 정글에서 길을 잃지 않을 만큼 간단하기 때문에 우리에게 이상적입니다.


따라서 위의 방법 중 하나를 사용하여 마켓에서 애플리케이션을 다운로드하세요. Virtuous Ten Studio를 사용하기로 결정한 경우, 애플리케이션에서 APK 파일을 열고 압축을 풀고 프로젝트를 생성(파일 -> 새 프로젝트)한 다음 프로젝트 컨텍스트 메뉴에서 파일 가져오기를 선택하면 됩니다. 선택 사항이 apktool에 해당하는 경우 다음 명령 하나만 실행하세요.

$ apktool d com.kauf.particle.virtualtorch.apk

그 후 이전 섹션에서 설명한 것과 유사한 파일 트리가 com.kauf.particle.virtualtorch 디렉터리에 나타나지만 dex 파일과 apktool.yml 파일 대신 추가 smali 디렉터리가 있습니다. 첫 번째에는 애플리케이션 실행 dex 파일의 디스어셈블된 코드가 포함되어 있고, 두 번째에는 apktool이 패키지를 다시 어셈블하는 데 필요한 서비스 정보가 포함되어 있습니다.

우리가 먼저 살펴봐야 할 곳은 물론 AndroidManifest.xml입니다. 그리고 여기서 우리는 즉시 다음 줄을 만나게 됩니다:

애플리케이션에 인터넷 연결을 사용할 수 있는 권한을 부여하는 역할을 담당한다고 추측하는 것은 어렵지 않습니다. 실제로 광고를 없애고 싶다면 인터넷에서 애플리케이션을 차단하면 될 것입니다. 이것을 해보자. 지정된 줄을 삭제하고 apktool을 사용하여 소프트웨어 빌드를 시도합니다.

$ apktool b com.kauf.particle.virtualtorch

결과 APK 파일은 com.kauf.particle.virtualtorch/build/ 디렉터리에 나타납니다. 그러나 디지털 서명과 파일 체크섬이 없기 때문에 설치할 수 없습니다(단순히 META-INF/ 디렉토리가 없습니다). apk-signer 유틸리티를 사용하여 패키지에 서명해야 합니다. 출시되었습니다. 인터페이스는 두 개의 탭으로 구성됩니다. 첫 번째 탭(키 생성기)에서는 키를 생성하고 두 번째 탭(APK 서명자)에서는 서명합니다. 개인 키를 생성하려면 다음 필드를 채우십시오.

  • 대상 파일- 키 저장소 출력 파일 일반적으로 한 쌍의 키를 저장합니다.
  • 비밀번호그리고 확인하다- 저장소 비밀번호
  • 별명- 저장소에 있는 키의 이름
  • 별칭 비밀번호그리고 확인하다- 비밀 키 비밀번호;
  • 타당성- 유효 기간(년). 기본값은 최적입니다.

나머지 필드는 일반적으로 선택 사항이지만 최소한 하나는 채워야 합니다.


경고

apk-signer를 사용하여 애플리케이션에 서명하려면 Android SDK를 설치하고 애플리케이션 설정에서 전체 경로를 지정해야 합니다.

모든 정보는 정보 제공의 목적으로만 제공됩니다. 편집자나 저자 모두 이 기사의 자료로 인해 발생할 수 있는 피해에 대해 책임을 지지 않습니다.

이제 이 키로 APK에 서명할 수 있습니다. APK 서명자 탭에서 새로 생성된 파일을 선택하고 비밀번호, 키 별칭 및 비밀번호를 입력한 다음 APK 파일을 찾아 "서명" 버튼을 대담하게 클릭하세요. 모든 것이 순조롭게 진행되면 패키지에 서명이 이루어집니다.

정보

우리가 자체 키로 패키지에 서명했기 때문에 원래 응용 프로그램과 충돌하게 됩니다. 즉, 시장을 통해 소프트웨어를 업데이트하려고 하면 오류가 발생하게 됩니다.

디지털 서명은 타사 소프트웨어에만 필요하므로 설치된 시스템 응용 프로그램을 /system/app/ 디렉터리에 복사하여 수정하는 경우에는 서명할 필요가 없습니다.

그런 다음 패키지를 스마트폰에 다운로드하여 설치하고 실행하세요. 짜잔, 광고가 사라졌어요! 그러나 대신 인터넷이 없거나 적절한 권한이 없다는 메시지가 나타났습니다. 이론적으로는 이것으로 충분할 수도 있지만 메시지가 짜증스러워 보이며 솔직히 말해서 우리는 어리석은 응용 프로그램으로 운이 좋았습니다. 일반적으로 작성된 소프트웨어는 자격 증명을 명확히 하거나 인터넷 연결을 확인하고 그렇지 않으면 실행을 거부할 가능성이 높습니다. 이 경우 어떻게됩니까? 물론 코드를 편집하십시오.

일반적으로 애플리케이션 작성자는 애플리케이션 또는 해당 "활동"(간단히 말하면 애플리케이션 화면) 중 하나가 시작될 때 이러한 클래스의 광고 및 호출 메서드를 표시하기 위한 특수 클래스를 만듭니다. 이러한 클래스를 찾아보도록 하겠습니다. smali 디렉터리로 이동한 다음 com(org에는 공개 그래픽 라이브러리 cocos2d만 포함되어 있음), kauf(개발자의 이름이고 그의 모든 코드가 있기 때문에 여기에 있음)로 이동합니다. 마케팅 디렉토리. 내부에는 smali 확장자를 가진 여러 파일이 있습니다. 이것들은 클래스인데, 그 중 가장 눈에 띄는 것은 Ad.smali 클래스인데, 이름에서 광고를 표시하는 클래스임을 쉽게 짐작할 수 있습니다.

해당 작업의 논리를 변경할 수 있지만 애플리케이션 자체에서 해당 메서드에 대한 호출을 간단히 제거하는 것이 훨씬 쉬울 것입니다. 따라서 마케팅 디렉토리를 떠나 인접한 입자 디렉토리로 이동한 다음 virtualtorch로 이동합니다. MainActivity.smali 파일은 여기서 특별한 주의를 기울일 가치가 있습니다. 이는 Android SDK에 의해 생성되고 애플리케이션의 진입점으로 설치되는 표준 Android 클래스입니다(C의 기본 기능과 유사). 편집할 파일을 엽니다.

그 안에는 smali 코드(로컬 어셈블러)가 있습니다. 낮은 수준의 특성으로 인해 매우 혼란스럽고 읽기 어렵기 때문에 연구하지는 않고 코드에서 Ad 클래스에 대한 모든 참조를 찾아서 주석 처리하기만 하면 됩니다. 검색어에 "Ad" 줄을 입력하고 25번 줄로 이동합니다.

필드 비공개 광고:Lcom/kauf/marketing/Ad;

여기에서는 광고 클래스 개체를 저장하기 위해 광고 필드가 생성됩니다. 줄 앞에 ### 기호를 배치하여 설명합니다. 우리는 검색을 계속합니다. 423행:

새로운 인스턴스 v3, Lcom/kauf/marketing/Ad;

여기서 객체 생성이 발생합니다. 의견을 말해보자. 검색을 계속하여 433, 435, 466, 468, 738, 740, 800 및 802행에서 Ad 클래스의 메소드 호출을 찾습니다. 의견을 말해보자. 그게 다인 것 같습니다. 구하다. 이제 패키지를 다시 조립하고 기능과 광고 존재 여부를 확인해야 합니다. 실험의 순수성을 위해 AndroidManifest.xml에서 제거된 줄을 반환하고 패키지를 조립한 후 서명하고 설치합니다.

우리 기니피그. 광고 표시

이런! 광고는 응용 프로그램이 실행되는 동안에만 사라졌지만 소프트웨어를 시작할 때 표시되는 기본 메뉴에는 남아 있었습니다. 그럼 잠깐만요, 그런데 진입점이 MainActivity 클래스인데, 애플리케이션 실행 중에 광고가 사라졌는데 메인 메뉴에 남아 있으니 진입점이 다른 걸까요? 실제 진입점을 식별하려면 AndroidManifest.xml 파일을 다시 엽니다. 그리고 그렇습니다. 다음 줄이 포함되어 있습니다.

그들은 android.intent.category.LAUNCHER 카테고리에서 android.intent.action.MAIN 인텐트(이벤트) 생성에 대한 응답으로 Start라는 활동이 시작되어야 한다고 우리(그리고 더 중요한 것은 안드로이드)에게 알려줍니다. 이 이벤트는 실행기에서 애플리케이션 아이콘을 탭할 때 생성되므로 진입점, 즉 Start 클래스를 결정합니다. 아마도 프로그래머는 먼저 표준 MainActivity 클래스인 진입점인 기본 메뉴 없이 애플리케이션을 작성한 다음 메뉴가 포함되고 Start 클래스에 설명된 새 창(활동)을 추가하고 이를 수동으로 항목으로 만들었을 것입니다. 가리키다.

Start.smali 파일을 열고 "Ad" 줄을 다시 찾으면 153번과 155번 줄에서 FirstAd 클래스에 대한 언급을 찾을 수 있습니다. 소스코드에도 포함되어 있으며, 이름으로 판단하면 메인 화면에 광고를 표시하는 역할을 담당합니다. 좀 더 자세히 살펴보겠습니다. FirstAd 클래스의 인스턴스가 생성되고 컨텍스트에 따라 이 인스턴스와 관련된 인텐트가 생성된 다음 cond_10 라벨이 있습니다. 조건부 전환은 인스턴스를 생성하기 바로 전에 수행됩니다. 수업 중:

If-ne p1, v0, :cond_10 .line 74 new-instance v0, Landroid/content/Intent; ... :cond_10

아마도 프로그램은 광고가 메인 화면에 표시되어야 하는지 여부를 무작위로 계산하고, 그렇지 않은 경우 cond_10으로 직접 이동합니다. 이제 그녀의 작업을 단순화하고 조건부 전환을 무조건 전환으로 바꾸겠습니다.

#if-ne p1, v0, :cond_10 goto:cond_10

코드에 FirstAd에 대한 언급이 더 이상 없으므로 파일을 닫고 apktool을 사용하여 가상 토치를 다시 조립합니다. 스마트폰에 복사해서 설치하고 실행해보세요. 짜잔, 모든 광고가 사라졌습니다. 우리 모두 축하드립니다.

결과

이 글은 안드로이드 애플리케이션을 해킹하고 수정하는 방법을 간략하게 소개한 것입니다. 보호 제거, 난독화된 코드 구문 분석, 애플리케이션 리소스 변환 및 교체, Android NDK를 사용하여 작성된 애플리케이션 수정 등 많은 문제가 이면에 남아 있었습니다. 그러나 기본 지식이 있으면 모든 것을 파악하는 것은 시간 문제일 뿐입니다.




맨 위