APK değiştirme programı. Android sistem uygulamalarını (apk) düzenlemenin temelleri. APK paketlerinin düzenlenmesi ve alınması

APK, arşivlenmiş yürütülebilir uygulama dosyaları için Android işletim sisteminde kullanılan bir formattır. Analog, örneğin Windows'ta .msi, Symbian'da - .sis, Linux'ta - .rpm veya .deb'dir. Bu yazıda bu dosya formatıyla ilgili tüm konuları mümkün olduğunca ayrıntılı olarak anlayacağız.

Parçalarına ayırma, düzenleme ve “doğru şekilde” birleştirme sürecine tersine mühendislik denir. Bunun için ne gerekiyor? Aşağıdaki araçlar gereklidir:

Apktool. SmartApktool kabuğuyla kullanmak daha uygundur; ayrıca ApktoolBAT gibi hazır toplu dosyaları da kullanabilirsiniz.

Notepad++ - gerekli değildir ancak şiddetle tavsiye edilir.

7zip veya WinRar veya başka herhangi bir arşivleme programı, ancak bunlardan biri önerilir.

Deodexlenmiş ürün yazılımı.

Android işletim sistemine uygulama yüklemenin birkaç yolu vardır. İlki ve aynı zamanda asıl olan, doğrudan Google Oyun(Android Market), yani Google hesabı gerektiren resmi bir kaynaktan. Birçok uygulama ücretlidir, korsan sitelerde saldırıya uğramış bir sürüm aramak istemiyorsanız, satın alma için ödeme yapmanız gerekecektir. Ancak bunun nasıl yapılacağı hakkında konuşacağız. İkincisi, Google Play dışındaki resmi olmayan kaynaklardan geliyor, bunun için akıllı telefonunuzun veya tabletinizin ayarlarında "Resmi olmayan kaynaklardan uygulama yüklenmesine izin ver" seçeneğini etkinleştirmeniz gerekecek, ardından APK kurulum dosyasının belleğe yazılması gerekiyor. kart.

APK uygulamalarını toplu olarak yüklemek de mümkündür. Bunu yapmak için özel bir dosya yöneticisi olan Astro Dosya Yöneticisine ihtiyacınız olacak. Yükledikten sonra uygulamaları taşıyın:

Akıllı telefondan/tabletten: mntsdcardacckupsapp(başka bir deyişle, hafıza kartı, ardından yedeklemeler klasörü, uygulama klasörü)

Kişisel bir bilgisayardan (Android cihazının bağlantısını basit USB sürücü modunda etkinleştirmeyi unutmayın): hafıza kartıyedeklemeleruygulama

Daha sonra istediğiniz uygulamayı açın. içerik menüsü“Uygulama Yöneticisi”ni seçin ve “Yedeklemeler” sekmesine gidin; burada “Yüklenecek uygulamayı uzun tıklayın veya kontrol edin” seçeneğini seçiyoruz. “Yükle” düğmesine tıklayın - tüm uygulamalar cihazınıza yüklenecektir.

APK dosyasının yapısının ne olduğunu görmek oldukça kolaydır. İstediğiniz APK'yı bir arşivleme programı (örneğin WinRar) kullanarak açın. İçeride şunu görüyoruz:

AndroidManifest.xml başvuruda ne olduğunu açıklayan bir tür “pasaporttur”; örneğin: sistem gereksinimleri uygulamaya, yapısına ve sürümüne.

META-INF– dosyayı içeren klasör MANİFEST.MF(hemen hemen her kişi tarafından açılabilir) Metin düzeltici SHA-1 sağlama toplamlarını ve veri yollarını, Manifest Sürümü standardının sürümünü, RSA veya DSA sertifika dosyalarını görebileceğiniz Notepad++ kullanmanız önerilir; SF dosyası, çeşitli kaynaklara ve bunların sağlama toplamlarına giden yolları içerir. Genel olarak META-INF meta veri dosyaları yani verilere ilişkin verilerdir.

res– alt klasörlere ayrılmış tüm “yazılım doldurma” kaynaklarını içeren bir klasör. Örneğin, ~drawable~ klasöründe uygulamaların grafik öğeleri (çeşitli durumlar, simgeler vb.) bulunur, düzen dizininde grafik öğelerinin yerleşimini gösteren XML dosyaları vardır Kullanıcı arayüzü(GUI).

sınıflar.dex– Dalvik VM sanal makinesi tarafından yürütülen program kodu. Android işletim sisteminin Linux çekirdeği ile Java sanal makinesinin karışımı olduğunu hatırlayalım.

kaynaklar.arsc– derlenmiş XML dosyası. Program tarafından kullanılan tüm kaynaklarla ilgili verileri içerir.

varlıklar– çeşitli kaynakları da içeren bir klasör; APK'da hiç olmayabilir.

kitap– program NDK kullanılarak yazılmışsa, örneğin C++ öğeleriyle birlikte “libs” veya daha basit bir ifadeyle yerel kitaplıkları içeren bir klasör. Bu dizin APK'da olmayabilir.

iletişim– APK'da olmayabilir.

kuruluş– APK'da olmayabilir.

udk– APK'da olmayabilir.

APK uygulamasının içeriğini ele aldık, şimdi detaylı sökümüne geçelim. Derlemeyi açmak için Apktool ve Java'nın yanı sıra APK dosyasının kendisine de ihtiyacınız olacak. Apktool'un bir dizine açılması önerilir C:PENCERELER(bu gerekli değildir, ancak daha uygun olacaktır. Neden – biraz aşağıyı okuyun).

Apktool'u başlatmak için bilgisayarınızın “Çalıştır” menüsüne girmeniz gerekir. Windows XP'de tıklayın Başlat -> Çalıştır, Windows 7'de: Görev Yöneticisi ( Ctrl+Alt+Del), açılır menünün en üstünde Dosya -> Yeni Görev (Çalıştır...), veya basitçe klavye kısayoluyla arayın Kazan+R.

Arama Komut satırı- Biz yazarız cmd, ardından Apktool'u başlatıyoruz - write apktool(bu amaçla onu yerleştirmek gerekliydi) WINDOWS klasörü). Ayrıca tüm kontrol, parametreler kullanılarak komut satırı üzerinden gerçekleştirilir.

Sürekli metin komutları girmekle uğraşmak istemiyorsanız, GUI– örneğin, bahsedilen SmartApkTool. SmartApkTool.exe'yi başlatın, ardından Paketi Aç/Paketle sekmesinde istediğiniz APK uygulamasını seçin (dosya adının boşluk, Kiril, özel karakterler ve noktalama işaretleri içermemesi önemlidir).

Paketi açtıktan sonra program, APK dosyasıyla aynı adı taşıyan bir klasör oluşturacaktır. İçinde uygulamanın tüm içeriği olacaktır.

APK ayrıca yerelleştirilebilir. Bunu yapmaya başlamadan önce önceden yüklenmiş olan Notepad++ uygulamasını başlatıp aşağıdaki gibi yapılandırıyoruz. Açılış Ayarlar -> Yapılandırma -> Yeni Belge.

Bu adımlardan sonra paketten çıkarılan (derlenmiş) uygulamayı, klasörü açın. res/değerler.

Tüm yerelleştirmeler genellikle dosyada bulunur Teller.xml ancak bazen bunlardan bazıları içinde bulunabilir. diziler.xml. Bu dosyaları kopyalayın ve bir klasörde oluşturun res dosya değerler-ru ve bunları içine yerleştirin.

Artık açabilirsiniz Teller.xml Notepad++ kullanarak çeviriyi yapın ve değiştirilen dosyayı kaydedin.

Dosyada AndroidManifest.dllxml APK uygulamalarının nereye kurulacağını belirtebilirsiniz. Dikkat, bu yalnızca Android 2.2 ve daha yeni sürümler için geçerlidir. Bu nedenle belirtilen dosyayı Notepad++ kullanarak açın. Neredeyse başlangıçta parametreyi görebilirsiniz:

Burada aşağıdaki seçenekleri belirleyebilirsiniz (“=” sembolünden sonra):

Yalnızca dahili– uygulama yalnızca şuraya yüklenecek: Dahili bellek cihazlar

Oto– kullanıcıya uygulamayı dahili belleğe veya bellek kartına yükleme seçeneği sunar

tercihHarici– program hafıza kartına yüklenecektir. Harici bir sürücüye kurulduğunda tüm uygulamaların düzgün çalışmayacağı veya hiç çalışmayacağı dikkate alınmalıdır. Bunlar şunları içerir:

Hizmetler- yani hizmetler

Alarm Hizmetleri– çalar saatler gibi zamanı kullanan hizmetler

Giriş Yöntemi Motorları– farklı klavyeler dahil giriş uygulamaları

Canlı Duvarkağıtları– “canlı” animasyonlu duvar kağıdı

CanlıKlasörler– sırasıyla animasyonlu dizinler

UygulamaWidget'lar– çeşitli “widget'lar”

HesapYöneticiler– ICQ müşterileri dahil olmak üzere çeşitli hesapların yöneticileri, sosyal ağlar ve benzeri

Senkronizasyon Adaptörleri– sürekli senkronizasyon gerektiren programlar

CihazYöneticiler– yönetim için kullanılan uygulamalar

Kopya Koruması– kopyalanmaya karşı korunan uygulamalar.

Uygulamada, kullanıcı arayüzünün çeşitli simgelerini ve grafik öğelerini düzenleyebilir ve kendinizinkiyle değiştirebilirsiniz. Bunu yapmak için klasörü açın res derlenmiş APK uygulamasının bulunduğu klasörde, burada klasörleri görebilirsiniz:

çekilebilir-hdpi

çekilebilir-ldpi

Bu klasörler programın tüm simgelerini ve diğer grafik öğelerini içerir. “Dpi”den önceki harf sırasıyla grafik öğelerinin boyutunu ifade eder:

hdpi- inç başına yüksek yoğunluklu nokta, boyut 72x72 piksel

mdpi- inç başına ortalama nokta yoğunluğu, boyut 48x48 piksel

bendpi - inç başına düşük nokta yoğunluğu, boyut 36x36 piksel

Örneğin uygulama simgesini değiştirmek için dosyayı açın. AndroidManifest.dllxml Notepad++ programını kullanarak simgenin belirtildiği satırı arayın, tam adına bakın (dosya uzantısının değil, yalnızca dosya adının yazıldığını unutmayın).

İlgili klasörü açın çekilebilir-*dpi, düzenlenmiş olanı yapıştırın veya yeni simge, orijinal başlığı tekrar kontrol etmeyi unutmayın. AndroidManifest.dllxml. Görüntü .png formatında olmalı ve kaynak dosyayla tam olarak aynı piksel yoğunluğuna sahip olmalıdır; örneğin hdpi 72x72 pikseldir.

Simgenin adını kendi adınızla değiştirmek istiyorsanız, resmi istediğiniz dosya adıyla kaydedin. çekilebilir-*dpi, bundan sonra tam olarak aynı adı belirtiyoruz AndroidManifest.dllxml(Örneğin android:icon=”@çizilebilir/Ölçek"). Aynı şekilde, diğer grafik öğelerini de değiştirebilirsiniz, ancak gereksinimler aynıdır; uzantı .png olmalıdır ve inç başına nokta yoğunluğu kaynak dosyayla aynı olmalıdır.

Paketi açılmış uygulamada hangi haklara sahip olduğunu tekrar kontrol edebilirsiniz. Bu, APK bilinmeyen bir kaynaktan yüklendiyse ve bir el fenerinin veya güzel bir takvimin aniden ücretli SMS mesajları göndermeye başladığı bir durumdan kaçınmak için kullanışlıdır. bilinmeyen numara. Açılış AndroidManifest.dllxml Notepad++ programını açın ve ilgili satırları arayın. Göndermek için Metin mesajlarıörneğin, parametre yanıt verir SEND_SMS. Bir uygulamanın kullanabileceği tüm haklar hakkında daha fazla bilgi edinebilirsiniz.

Yüklü APK uygulamaları sistemden çıkarılabilir. Bu birkaç yolla yapılabilir. Öncelikle Astro Dosya Yöneticisini yükleyebilirsiniz. Uygulamayı açın ve içerik menüsünden “Uygulama Yöneticisi”ni seçin. Arıyorum gerekli başvuru, bir onay işaretiyle işaretleyin ve yedek bir kopya oluşturun. İşlemden sonra seçilen uygulama yol boyunca bulunacaktır:

mntsdcardacckupsapp

sdcardackupsapp

Daha sonra şunları kullanabilirsiniz: Kök programı Kaldırıcı. Uygulamayı başlattıktan sonra her şeyi otomatik olarak belirleyecektir. yüklü APK'lar ve hepsini otomatik olarak yedekleyecektir. Buna göre, istenirse, bu yedek kopyaları daha fazla derleme için kopyalayabilirsiniz; bunlar yol boyunca bulunur:

mntsdcardRootUnistallerotomatik yedeklemeler(doğrudan bir Android cihazdan görüntülendiğinde)

sdcardRootUnistallerotomatik yedeklemeler(Android cihazı bir USB sürücü olarak bağlıyken bilgisayar aracılığıyla görüntülendiğinde).

Diğer bir yol da Root Tarayıcı Lite kullanmaktır, bunun için tabi ki Root haklarına ihtiyacınız olacak. Açılış bu başvuru, şu yolu izliyoruz:

sistemuygulama(sistem uygulamalarıyla ilgileniyorsanız).

Gerekli uygulamaları hafıza kartına kopyalıyoruz, ardından onlarla herhangi bir işlem yapabilirsiniz.

İlgilendiğiniz APK uygulamalarını doğrudan Google Play'den (Android Market) de indirebilirsiniz. Kişisel bilgisayar. Bunun için bir tarayıcıya ihtiyacınız olacak Google Chrome(sürüm 17'den düşük değil) ve bunun için eklenti APK İndirici. Belirtilen eklentiyi indirip yükledikten sonra kısayolun bir kopyasını oluşturun Google tarayıcısı Chrome'da bir boşluktan sonra şu satırı yazıyoruz:

-sertifika hatalarını yoksay

Standart tarayıcı kurulum yolu ile satır şu şekilde görünmelidir:

"C:Program FilesGoogleChromeApplicationchrome.exe" -ignore-certificate-errors

Bundan sonra akıllı telefon çeviriciye girin:

*#*#8255#*#*

16 karakterden oluşan Cihaz Kimliğini yeniden yazıyoruz. Belirtilen parametreyle oluşturulan kısayolu kullanarak Google Chrome'u açın -sertifika hatalarını yoksay, Hadi gidelim Araçlar -> Uzantılar(adres çubuğuna “chrome://settings/extensions” da girebilirsiniz), APK Downloader eklentisinin ayarlarını açın. Seçeneklere e-posta adresinizi ve şifrenizi girin hesap Google'ın yanı sıra alınan Cihaz Kimliği. Şimdi Google Play'e (Android Market) gidin, sayfayı açın. istenilen uygulama, tamamen yüklenmesini bekliyoruz. APK İndirici simgesi görünecektir - tıkladıktan sonra uygulama bilgisayarınıza indirilecektir.

Android için web sitemizden indirebileceğiniz Apk editor pro, herhangi bir uygulamanın dosyalarının içeriğini hacklemenize/değiştirmenize olanak tanır. mobil cihazlar ve beğeninize göre özelleştirin.

Özellikler

Program, ileri düzey kullanıcıların elinde Android uygulamalarını düzenlemek için güçlü bir araç haline gelebilecek profesyonel bir yardımcı programdır. İşlevsellik pratik olarak benzerinden farklı değildir yazılım kişisel bilgisayarlar için.

Bu yardımcı program ne yapabilir?

  1. Diğer uygulamaların adlarını değiştirin (çevirin).
  2. Mimari düzenleri, renkleri, grafik ayarları şablonlarını (örneğin simge boyutunu) değiştirin.
  3. Ses tasarımını, medya dosyalarını değiştirin.
  4. Reklamları kaldırın.
  5. Ücretli içerik engellemeyi atlayın.
  6. Bir uygulamayı cihazın dahili belleğinden bir SD karta aktarın.
  7. Çözünürlüğü değiştirin ve çok daha fazlasını yapın.

Yardımcı programın nasıl kullanılacağını anlamak için apk editor pro'yu indirmeniz ve menüye gitmeniz gerekir. O halde ikisinden birini seçin yüklü uygulama Android'de veya apk dosyasında. Bundan sonra kullanıcının değiştirebileceği varsayılan veriler açılacaktır:

  • kaynakları düzenlemek;
  • dosyaların değiştirilmesi;
  • genel düzenleme;
  • veri düzenleme.

Program değiştirilmiş sürümü yüklemeyi önerecektir. Bu her durumda işe yaramaz, dolayısıyla eski versiyon manuel olarak kaldırılmalı ve yenisi takılmalıdır. Sildikten sonra Android'deki programlar arasından apk editör klasörünü seçmeli (kolaylık sağlamak için ES Explorer'ı kullanabilirsiniz) ve değiştirilen uygulama dosyasını bulmalı ve cihaza kurmalısınız.

Program kullanıcı dostu bir arayüze sahiptir. Gezinme oldukça basittir ancak kullanıcının bunu anlaması için temel İngilizce bilgisine sahip olması gerekir.

Avantajlar ve dezavantajlar

  1. Program, kullanıcıya uygulamaları özelleştirmek için geniş bir seçenek yelpazesi sunar.
  2. Menü, editör programının çok sayıda özelliğini basit ve ayrıntılı bir şekilde açıklayan bir Yardım bölümü içerir. Bu nedenle programlamadan uzak olan kullanıcıların üçüncü taraf kaynaklardaki örnekleri ve düzenleme talimatlarını aramasına gerek kalmayacak.
  3. Programı web sitemizden ücretsiz olarak indirebilirsiniz.

Bu yardımcı programı kullanmak bazı beceri ve bilgi gerektirir. Deneyimsiz bir kullanıcının elinde düzenleme, dosya sisteminin bütünlüğünün ihlal edilmesine yol açabilir ve bu da sonuçta uygulama hatalarına yol açabilir. Yardım öğesindeki menüde, Android'de apk editor pro'nun doğru şekilde nasıl kullanılacağına dair resimler ve ipuçları içeren dönüşüm örnekleri vardır. Bu nedenle bu programı anlamak istiyorsanız talimatları izlemeniz yeterli.

Editör - yeterli kullanışlı araç uygunsuz bir uygulama arayüzüyle karşı karşıya kalanlar için (Rusça dilinin olmaması, sürekli reklam, afişler vb.). Bu programı daha önce kullandıysanız, izlenimlerinizi aşağıdaki yorumlarda paylaşın.

Bu makaleden Android uygulamasının nelerden oluştuğunu, APK dosyasının nasıl ve hangi programlarla açılacağını öğreneceksiniz.

APK dosyası nedir?

APK - işletim biçimi Android sistemleri, arşivlenmiş yürütülebilir uygulama dosyaları için kullanılır ve dosyanın adı herhangi bir şey olabilir, ancak uzantı yalnızca this.apk gibi görünmelidir. Diğer işletim sistemlerindeki APK analogları Windows'ta .msi, Symbian'da .sis, Linux'ta .rpm veya .deb'dir.

Bakalım içinde ne var
Aslında .apk bir ZIP arşividir, dolayısıyla herhangi bir dosyayı kullanarak iç yapıya bakabilirsiniz. dosya yöneticisi veya WinRAR veya X-plore mobil uygulaması gibi bir arşivleyici.





Yalnızca dahili kaynaklara görsel erişim elde edebileceğinizi hatırlamakta fayda var; düzenleme yetenekleri son derece sınırlıdır.
Yapıya bakalım
.apk'nin içinde bir takım dosya ve klasörler görüyoruz, bunların ne işe yaradığını öğrenelim:
  • AndroidManifest.xml, uygulamanın tüm ana noktalarını, gereksinimleri, sürümünü, izinlerini vb. öğrenebileceğiniz bir tür "pasaportudur".
  • META-INF bu dosya meta verileri, yani verilerle ilgili verileri, sağlama toplamlarını, verilere giden yolları, kaynakların yollarını ve sağlama toplamlarını, sertifikaları içerir. Bu dosyayı herhangi bir metin düzenleyiciyle açabilirsiniz ancak Notepad++ kullanmanız önerilir.
  • Res klasörü tüm program kaynaklarını, simgeler, resimler, metinler gibi grafikleri ve grafiksel arayüz öğelerini içerir. Ayrıca klasöre kolayca erişebilirsiniz.
  • class.dex, Dalvik VM sanal makinesi tarafından yürütülen doğrudan uygulama programı kodudur; bu dosyanın içinde ne olduğunu ancak .apk dosyasını derleyerek görebilirsiniz; buna başka yazılarda değineceğiz. Resources.arsc - derlenmiş XML dosyası, bu dosya programda yer alan tüm kaynaklarla ilgili verileri içerir.
  • lib - kaynaklarına yalnızca özel programlar kullanıldığında erişilebilen yerel kitaplıklara sahip bir klasör. APK ayrıca com, org, udk gibi dosya ve klasörleri de içerebilir, ancak bu her zaman geçerli değildir.

Şimdi iç yapıya daha detaylı bakalım; bunun için bir decompilation programına, Java'ya ve bir APK dosyasına ihtiyacımız var. .apk dosyasını parçalara ayırmanın ana aracı Apktool'dur, ancak bu program Yalnızca bir hattan çalışır ve bu pek uygun değildir. Daha hızlı ve daha rahat analiz için APKing'i kullanabilirsiniz, bu hala aynı Apktool'dur, ancak içerik menüsünden çalışma özelliğine sahiptir.
Ve böylece APKing'i herhangi bir Windows uygulaması gibi yüklüyoruz ve .apk'yi seçtikten sonra sağ fare tuşu ve Shift ile aynı anda üzerine tıklıyoruz, ardından aşağıdakileri göreceğiz:


Ve Seç gerekli eylemörneğin, tamamen kaynak koda dönüştürün, ardından program işlemi tamamlayacak ve aynı adda bir klasör oluşturacaktır.


Klasörü açarak APK dosyasının tüm kaynaklarına erişebileceğiz.


Bu kadar metin dosyaları düzenlenebilir, temel kurallara uyarken popüler Notepad++ programını kullanabilirsiniz, örneğin AndroidManifest.xml'i düşünün

Yine ben ve resimli çaydanlıklar ve cezveler için talimatlarım.

Bu sefer, durum çubuğu değişikliği yükleme örneğini kullanarak Android işletim sisteminin sistem bileşenlerinin değiştirilmesi hakkında ayrıntılı olarak konuşacağım.

Android küçük bir Linux'tur. Telefonun bir tuğlaya dönüşmemesi için dosyaları değiştirirken bir takım kurallara uymak gerekir; bu, ancak cihazın dahili belleğindeki tüm verilerin kaybıyla tamamen yanıp sönerek yeniden canlandırılabilir. Dahili bölümler şu şekilde biçimlendirilmiştir: dosya sistemi flash sürücülerdeki FAT32'den farklıdır. Diğer şeylerin yanı sıra, dosya özellikleri farklı kullanıcı grupları (dosya sahibi, dosya sahibi grubu, diğer kullanıcılar) için izinleri saklar. İle çalışırken sistem dosyaları kaydedilmeleri gerekir, çünkü yükleme sırasında sistem bunlara erişemeyebilir ve normal şekilde önyükleme yapmayabilir.
Araçlarla başlayalım.

İhtiyacımız olacak:

  • Kök hakları ve dosya izinleriyle çalışabilen bir dosya yöneticisi. Root Explorer en iyisidir (Satın aldınız, değil mi?)
  • Sistemin yerine koymak istediğimiz değiştirilmiş dosyanın kendisi (makalenin sonundaki bağlantı).

Şimdi Root Explorer'ın kullanışlı işlevlerinden birini kullanıyoruz. İçerik menüsünü açmak için istenen dosyaya uzun süre dokunalım

Ve "öğesine tıklayın" Bu dosyayı ziple"Dosyayı SD karttaki zip arşivine kaydetmek için. Arşivlemeden sonra aşağıdaki mesajı alacağız:

Düğmesine basın " Kalmak" klasörde kalıp bir şey daha yapmak için.

Artık her şey dosyayı değiştirmeye hazır.
Her dosyanın erişim haklarından zaten bahsetmiştim. Bunları yeni bir dosyada yeniden oluşturmak için önce onlara eskisinden bakmalısınız. Bir dizi "rwxrwxrwx" sembolüyle temsil edilirler. 1. üçlü - sahip hakları, 2. - sahip grupları, 3. - diğer tüm kullanıcılar. Dosyamızın "rw-r--r--" izinleri var.

Şimdi SD karta gidin, değiştirilen dosyayı orada bulun ve içerik menüsünden " öğesini seçin Kopyala", ancak hemen "/system/app" klasörünü seçmek için acele etmeyin, çünkü sisteme anında zarar veririz. Bunun yerine, dosyayı "/data/local/tmp" geçici dosyalar için özel bir klasöre kopyalayıp Dosyayı sisteme alacak bir forma dönüştürün.
Öncelikle dosyanın içerik menüsünü çağırın ve " Yeniden isimlendirmek" ve "SystemUI.apk" dosya adını girin. Doğru, çünkü Linux'ta addaki harflerin durumu önemlidir, yani "systemui.apk" ve "SystemUI.apk" farklı dosyalardır.
Daha sonra dosya izinlerini değiştirmeniz gerekiyor çünkü artık neredeyse kesinlikle yanlış ayarlanmışlar. Bunu yapmak için, uzun bir dokunuşla dosyanın içerik menüsünü tekrar çağırın ve "öğesini seçin" İzinler". "rw-r--r--" değerimiz için onay kutuları şu şekilde yerleştirilmelidir:

Tıklamak " TAMAM" ve içerik menüsünü tekrar çağırın. Şimdi bu uygulamanın sahibini ve grubunu değiştirmeniz gerekiyor. Bunu yapmak için " öğesini seçin Sahibi değiştir". Dosyanın mevcut sahibi hakkında bilgi içeren bir pencere açılacaktır.
Burada küçük bir inceleme yapmamız gerekiyor.
"/system/app" klasöründeki tüm dosyalar "root" kullanıcısına (uid=0) ve "root" grubuna (gid=0) aittir ve "/system/framework" klasöründeki tüm dosyalar " kullanıcısına aittir. system" (gid=1000) sahibidir. ve grup "system" (gid=1000).
Yukarıdakilere dayanarak gerekli değerleri ayarlayın ve " TAMAM".
Ve üçüncü kez dosyanın içerik menüsünü çağırın ve "öğesini seçin" Kopyala" ve kopyalama iletişim kutusunda "/system/app" klasörüne gidin. Şimdi tıklamaktan çekinmeyin " Yapıştırmak" ve daha fazlasını dikkatlice okuyun.
Neredeyse anında sistem size durum çubuğu işleminin aniden sona erdiğini bildirecek ve başlatmayı teklif edecektir. Tüm girişimler başarısız olacaktır. Pencerelerin görünümü arasında bir dizi eylem gerçekleştirmek için zamanınız olması gerekir. Düğmeye basmadan önce cihazı kapatmak için menüyü çağırmanız gerekir; bir uyarı altında görünecektir. Şimdi parmağınızı yaklaşık olarak düğmenin sol tarafına yerleştirmeniz gerekiyor. Artık uyarıyı kapatmak, kapatma seçeneğini seçmek ve niyetinizi onaylamak için zamanınızın olması için parmağınıza üç kez çok hızlı tıklamanız gerekiyor.
Şimdi telefonun kapanmasını, yeniden başlatılmasını ve sonucun tadını çıkarmasını bekliyoruz ya da keyif almayıp hata arıyoruz.

Bazen Android'deki bazı uygulamalar kullanıcıya bir şekilde yakışmıyor. Bir örnek müdahaleci reklamdır. Ayrıca program herkes için iyidir, ancak içindeki çeviri ya çarpıktır ya da tamamen yoktur. Veya örneğin program bir deneme sürümüdür ancak tam sürümü edinmenin bir yolu yoktur. Durum nasıl değiştirilir?

giriiş

Bu yazıda bir APK paketini bir uygulamayla nasıl parçalara ayıracağımızı, iç yapısına nasıl bakacağımızı, bayt kodunu nasıl parçalara ayıracağımızı ve koda dönüştüreceğimizi ve ayrıca uygulamalarda bize şu ya da bu faydayı sağlayabilecek çeşitli değişiklikler yapmaya çalışacağımızı konuşacağız.

Tüm bunları kendiniz yapmak için, Android uygulamalarının yazıldığı Java dili ve Android'in her yerinde kullanılan XML dili hakkında en azından temel bilgiye ihtiyacınız olacak - uygulamanın kendisini ve erişim haklarını tanımlamaktan, dizeleri depolamaya kadar. ekranda görüntülenecektir. Ayrıca özel konsol yazılımını kullanma becerisine de ihtiyacınız olacak.

Peki, kesinlikle tüm Android yazılımlarının dağıtıldığı APK paketi nedir?

Uygulama kaynak koda dönüştürme

Bu yazımızda sadece demonte uygulama kodları ile çalıştık ancak büyük uygulamalarda daha ciddi değişiklikler yapılırsa smali kodu anlamak çok daha zor olacaktır. Neyse ki, dex kodunu Java koduna dönüştürebiliriz; bu, orijinal olmasa da ve derlenmemiş olsa da, uygulamanın mantığını okumak ve anlamak çok daha kolaydır. Bunu yapmak için iki araca ihtiyacımız olacak:

  • dex2jar, Dalvik bayt kodunu JVM bayt koduna çeviren bir çevirmendir; buna dayanarak Java dilinde kod elde edebiliriz;
  • jd-gui, JVM bayt kodundan okunabilir Java kodu almanızı sağlayan bir derleyicidir. Alternatif olarak Jad'i (www.varaneckas.com/jad) kullanabilirsiniz; Oldukça eski olmasına rağmen bazı durumlarda Jd-gui'ye göre daha okunabilir kod üretir.

Bu şekilde kullanılmaları gerekir. İlk olarak, apk paketinin yolunu argüman olarak belirterek dex2jar'ı başlatıyoruz:

% dex2jar.sh mail.apk

Sonuç olarak, Java kodunu görüntülemek için jd-gui'de açılabilen Java paketi mail.jar mevcut dizinde görünecektir.

APK paketlerinin düzenlenmesi ve alınması

Naylon poşet Android uygulamaları aslında normal bir ZIP dosyasıdır, içeriği görüntülemek ve çıkarmak için hiçbir özel araca gerek yoktur. Bir arşivleyicinin olması yeterlidir - Windows için 7zip veya Linux'ta konsolun sıkıştırmasını açma. Ama bu ambalajla ilgili. İçinde ne var? Genel olarak içimizde şu yapı var:

  • META-INF/- uygulamanın dijital sertifikasını, yaratıcısını tanımlayan ve paket dosyalarının sağlama toplamlarını içerir;
  • res/ - uygulamanın çalışmalarında kullandığı çeşitli kaynaklar, örneğin görüntüler, arayüzün bildirimsel açıklaması ve diğer veriler;
  • AndroidManifest.xml- uygulamanın açıklaması. Bu, örneğin gerekli izinlerin bir listesini içerir. Android sürümü Ve gerekli izin ekran;
  • sınıflar.dex- için derlenmiş uygulama bayt kodu sanal makine Dalvik;
  • kaynaklar.arsc- aynı zamanda kaynaklar, ancak farklı türden - özellikle dizeler (evet, bu dosya Ruslaştırma için kullanılabilir!).

Listelenen dosyalar ve dizinler, hepsi olmasa da, belki de APK'ların büyük çoğunluğundadır. Ancak, bahsetmeye değer, pek yaygın olmayan birkaç dosya/dizin daha vardır:

  • varlıklar- kaynakların analogu. Temel fark, bir kaynağa erişmek için onun tanımlayıcısını bilmenizin gerekli olmasıdır, ancak varlık listesinin uygulama kodundaki AssetManager.list() yöntemi kullanılarak dinamik olarak elde edilebilmesi;
  • kitap- NDK (Yerel Geliştirme Kiti) kullanılarak yazılmış yerel Linux kitaplıkları.

Bu dizin, C/C++ ile yazılmış oyun motorlarını buraya yerleştiren oyun üreticilerinin yanı sıra yüksek performanslı uygulamaların (örneğin, Google Chrome) yaratıcıları tarafından da kullanılır. Cihazı bulduk. Peki ilgilendiğiniz uygulamanın paket dosyasını nasıl alırsınız? APK dosyalarını root olmadan cihazdan almak mümkün olmadığından (bunlar /data/app dizininde bulunurlar) ve rootlama her zaman tavsiye edilmediğinden, uygulama dosyasını bilgisayarınıza almanın en az üç yolu vardır:

  • Chrome için APK İndirici uzantısı;
  • Gerçek APK Leecher uygulaması;
  • çeşitli dosya barındırma ve Vareznikler.

Hangisinin kullanılacağı bir zevk meselesidir; ayrı uygulamalar kullanmayı tercih ediyoruz, bu nedenle Real APK Leecher'ın kullanımını anlatacağız, özellikle Java ile yazıldığı ve buna göre Windows veya Nix'te çalışacağı için.

Programı başlattıktan sonra üç alanı doldurmanız gerekir: E-posta, Şifre ve Cihaz Kimliği - ve bir dil seçmeniz gerekir. İlk ikisi, cihazda kullandığınız Google hesabınızın e-postası ve şifresidir. Üçüncüsü cihaz tanımlayıcıdır ve çeviriciye kod yazılarak elde edilebilir. # #8255## ve ardından Cihaz Kimliği satırını bulma. Doldururken, yalnızca android öneki olmadan kimliği girmeniz gerekir.

Doldurup kaydettikten sonra sıklıkla “Sunucuya bağlanırken hata oluştu” mesajı çıkıyor. Google Play ile hiçbir ilgisi yoktur, bu yüzden onu görmezden gelmekten ve ilginizi çeken paketleri aramaktan çekinmeyin.

Görüntüle ve Değiştir

Diyelim ki ilginizi çeken bir paket buldunuz, indirdiniz, paketini açtınız... ve bir XML dosyasını görüntülemeye çalıştığınızda dosyanın metin olmadığını fark ettiğinizde şaşırdınız. Nasıl kaynak koda dönüştürülür ve genel olarak paketlerle nasıl çalışılır? SDK'yı yüklemek gerçekten gerekli mi? Hayır, SDK'yı kurmanıza hiç gerek yok. Aslında APK paketlerini ayıklamak, değiştirmek ve paketlemek için gereken tüm adımlar aşağıdaki araçları gerektirir:

  • ZIP arşivleyici ambalajı açmak ve paketlemek için;
  • küçük- Dalvik sanal makinesi bayt kodu birleştirici/çözücü (code.google.com/p/smali);
  • uygun- kaynakları paketlemeye yönelik bir araç (varsayılan olarak, uygulama performansını optimize etmek için kaynaklar ikili biçimde depolanır). Android SDK'ya dahildir ancak ayrı olarak da edinilebilir;
  • imzalayan- için araç elektronik imza değiştirilmiş paket (bit.ly/Rmrv4M).

Tüm bu araçları ayrı ayrı kullanabilirsiniz, ancak bu sakıncalıdır, bu nedenle bunlara dayalı olarak oluşturulmuş üst düzey yazılımları kullanmak daha iyidir. Linux veya Mac OS X üzerinde çalışıyorsanız apktool adında bir araç vardır. Kaynakları orijinal biçiminde açmanıza (ikili XML ve arsc dosyaları dahil), bir paketi değiştirilmiş kaynaklarla yeniden oluşturmanıza olanak tanır, ancak paketleri nasıl imzalayacağını bilmez, bu nedenle imzalayan yardımcı programını manuel olarak çalıştırmanız gerekir. Yardımcı programın Java ile yazılmış olmasına rağmen kurulumu oldukça standart değildir. Öncelikle jar dosyasının kendisini almanız gerekir:

$ 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 $ ihracat PATH=~/bin:$PATH

Windows üzerinde çalışıyorsanız, Virtious Ten Studio adında mükemmel bir araç vardır ve bu araç da tüm bu araçları (apktool'un kendisi dahil) toplar, ancak CLI arayüzü yerine kullanıcıya, kullanabileceğiniz sezgisel bir grafik arayüz sağlar. Birkaç tıklamayla paketi açma, parçalara ayırma ve kaynak koda dönüştürme işlemlerini gerçekleştirin. Bu araç Donation-ware'dir, yani bazen sizden lisans almanızı isteyen pencereler belirir, ancak sonuçta bu tolere edilebilir. Bunu anlatmanın bir anlamı yok çünkü arayüzü birkaç dakika içinde anlayabiliyorsunuz. Ancak apktool, konsol yapısı nedeniyle daha ayrıntılı olarak tartışılmalıdır.


Apktool seçeneklerine bakalım. Kısaca üç temel komut vardır: d (kod çözme), b (derleme) ve if (çerçeveyi kurma). İlk iki komutta her şey açıksa, üçüncü koşullu ifade ne işe yarar? Herhangi bir sistem paketini parçalara ayırdığınız durumlarda gerekli olan, belirtilen kullanıcı arayüzü çerçevesini açar.

İlk komutun en ilginç seçeneklerine bakalım:

  • -S- dex dosyalarını parçalara ayırmayın;
  • -R- kaynakları paketinden çıkarmayın;
  • -B- eklemeyin hata ayıklama bilgileri dex dosyasının sökülmesinin sonuçlarına;
  • --çerçeve-yolu- apktool'da yerleşik olanın yerine belirtilen kullanıcı arayüzü çerçevesini kullanın. Şimdi b komutu için birkaç seçeneğe bakalım:
  • -F- değişiklikleri kontrol etmeden zorla montaj;
  • -A- herhangi bir nedenle onu başka bir kaynaktan kullanmak istiyorsanız, aapt'in (APK arşivi oluşturmak için bir araç) yolunu belirtin.

Apktool'u kullanmak çok basittir; bunu yapmak için komutlardan birini ve APK'nın yolunu belirtmeniz yeterlidir, örneğin:

$ apktool d mail.apk

Bundan sonra paketin çıkartılan ve parçalara ayrılan tüm dosyaları posta dizininde görünecektir.

Hazırlık. Reklamcılığı devre dışı bırakma

Teori elbette iyidir, ancak paketlenmemiş paketle ne yapacağımızı bilmiyorsak neden buna ihtiyaç duyulsun? Teoriyi kendi yararımıza uygulamaya çalışalım, yani bazı yazılımları bize reklam göstermeyecek şekilde değiştirelim. Örneğin, Sanal Meşale olsun - sanal bir meşale. Bu yazılım bizim için idealdir çünkü can sıkıcı reklamlarla doludur ve dahası, kod ormanında kaybolmayacak kadar basittir.


Bu nedenle yukarıdaki yöntemlerden birini kullanarak uygulamayı marketten indirin. Virtious Ten Studio'yu kullanmaya karar verirseniz, APK dosyasını uygulamada açın ve sıkıştırın, bir proje oluşturun (Dosya -> Yeni proje), ardından proje içerik menüsünde Dosyayı İçe Aktar'ı seçin. Seçiminiz apktool'a düştüyse, sadece bir komutu çalıştırın:

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

Bundan sonra, com.kauf.particle.virtualtorch dizininde önceki bölümde anlatılana benzer bir dosya ağacı görünecektir, ancak dex dosyaları ve apktool.yml dosyası yerine ek bir smali dizini olacaktır. Birincisi uygulamanın çalıştırılabilir dex dosyasının ayrıştırılmış kodunu içerir, ikincisi ise apktool'un paketi geri birleştirmesi için gerekli hizmet bilgilerini içerir.

Bakmamız gereken ilk yer elbette AndroidManifest.xml. Ve burada hemen şu satırla karşılaşıyoruz:

Uygulamaya internet bağlantısını kullanma izinlerinin verilmesinden sorumlu olduğunu tahmin etmek zor değil. Aslında, yalnızca reklamlardan kurtulmak istiyorsak, büyük olasılıkla uygulamayı İnternet'ten engellememiz gerekecektir. Bunu yapmaya çalışalım. Belirtilen satırı siliyoruz ve yazılımı apktool kullanarak oluşturmaya çalışıyoruz:

$ apktool b com.kauf.particle.virtualtorch

Ortaya çıkan APK dosyası com.kauf.particle.virtualtorch/build/ dizininde görünecektir. Ancak dijital olarak imzalanmadığından kurulumu mümkün olmayacaktır. sağlama toplamları dosyalar (içinde META-INF/ dizini yoktur). Paketi apk-signer yardımcı programını kullanarak imzalamalıyız. Başlatıldı. Arayüz iki sekmeden oluşur - ilkinde (Anahtar Oluşturucu) anahtarlar oluştururuz, ikincisinde (APK İmzalayan) imzalarız. Özel anahtarımızı oluşturmak için aşağıdaki alanları doldurun:

  • Hedef dosya- anahtar deposu çıktı dosyası; genellikle bir çift anahtarı saklar;
  • Şifre Ve Onaylamak- depolama için şifre;
  • Takma ad- depodaki anahtarın adı;
  • Takma ad şifresi Ve Onaylamak- gizli anahtar şifresi;
  • Geçerlilik- geçerlilik süresi (yıl olarak). Varsayılan değer optimaldir.

Geri kalan alanlar genel olarak isteğe bağlıdır ancak en az birinin doldurulması gerekir.


UYARI

Apk-signer'ı kullanarak bir uygulamayı imzalamak için Android SDK'yı yüklemeniz ve belirtmeniz gerekir. tam yol Uygulama ayarlarında ondan önce.

Tüm bilgiler yalnızca bilgilendirme amaçlıdır. Bu makalenin materyallerinden kaynaklanabilecek olası zararlardan ne editörler ne de yazar sorumlu değildir.

Artık APK'yı bu anahtarla imzalayabilirsiniz. APK İmzalayan sekmesinde yeni oluşturulan dosyayı seçin, şifreyi, anahtar takma adını ve şifreyi girin, ardından APK dosyasını bulun ve cesurca "İmzala" düğmesine tıklayın. Her şey yolunda giderse paket imzalanacak.

BİLGİ

Paketi kendi anahtarımızla imzaladığımız için orijinal uygulamayla çakışacaktır, bu da yazılımı market üzerinden güncellemeye çalıştığımızda hata alacağımız anlamına gelir.

Dijital imza yalnızca üçüncü taraf yazılımlar için gereklidir; bu nedenle, sistem uygulamaları/system/app/ dizinine kopyalanarak kurulan dosyalar için imzalamanıza gerek yoktur.

Bundan sonra paketi akıllı telefonunuza indirin, kurun ve başlatın. Voila, reklam gitti! Ancak bunun yerine internete sahip olmadığımızı veya uygun izinlere sahip olmadığımızı belirten bir mesaj belirdi. Teorik olarak bu yeterli olabilir, ancak mesaj sinir bozucu görünüyor ve dürüst olmak gerekirse, aptal bir uygulamayla şansımız yaver gitti. Normalde yazılan yazılım büyük olasılıkla kimlik bilgilerini açıklayacak veya İnternet bağlantısını kontrol edecek ve aksi halde başlatmayı reddedecektir. Bu durumda nasıl olunur? Elbette kodu düzenleyin.

Tipik olarak uygulama yazarları, uygulama veya "faaliyetlerinden" biri (basit bir ifadeyle uygulama ekranları) başlatıldığında reklamları görüntülemek ve bu sınıfların çağrı yöntemlerini görüntülemek için özel sınıflar oluşturur. Bu sınıfları bulmaya çalışalım. Smali dizinine gidiyoruz, sonra com (org yalnızca cocos2d açık grafik kütüphanesini içerir), sonra kauf (burası burası, çünkü geliştiricinin adı ve tüm kodu orada) - ve işte burada, pazarlama rehberi. İçeride smali uzantılı bir sürü dosya buluyoruz. Bunlar sınıflardır ve bunların en dikkat çekeni Ad.smali sınıfıdır, adından reklam görüntüleyen sınıf olduğunu tahmin etmek kolaydır.

İşlem mantığını değiştirebiliriz, ancak yöntemlerinden herhangi birine yapılan çağrıları uygulamanın kendisinden kaldırmak çok daha kolay olacaktır. Bu nedenle pazarlama dizininden çıkıp bitişik parçacık dizinine ve ardından virtualtorch'a gidiyoruz. MainActivity.smali dosyası burada özel ilgiyi hak ediyor. Bu, Android SDK tarafından oluşturulan ve uygulamaya giriş noktası olarak yüklenen standart bir Android sınıfıdır (C'deki ana işleve benzer). Dosyayı düzenlemek için açın.

İçinde küçük kod (yerel montajcı) var. Düşük seviyeli yapısı nedeniyle oldukça kafa karıştırıcı ve okunması zordur, bu yüzden üzerinde çalışmayacağız, ancak kodda Ad sınıfına yapılan tüm referansları bulup yorumlayacağız. Aramaya “Reklam” satırını girip 25. satıra ulaşıyoruz:

Alan özel reklamı:Lcom/kauf/marketing/Ad;

Burada bir Reklam sınıfı nesnesini depolamak için bir reklam alanı oluşturulur. Satırın önüne ### işareti koyarak yorum yapıyoruz. Aramaya devam ediyoruz. Satır 423:

Yeni örnek v3, Lcom/kauf/marketing/Ad;

Nesne yaratımının gerçekleştiği yer burasıdır. Yorum yapalım. Aramaya devam ediyoruz ve 433, 435, 466, 468, 738, 740, 800 ve 802 numaralı satırlarda Ad sınıfının yöntemlerine çağrıları buluyoruz. Yorum yapalım. Görünüşe göre bu kadar. Kaydetmek. Şimdi paketin tekrar bir araya getirilmesi ve işlevsellik ve reklam varlığı açısından kontrol edilmesi gerekiyor. Deneyin saflığı için AndroidManifest.xml'den kaldırılan satırı geri getiriyoruz, paketi birleştiriyor, imzalıyor ve kuruyoruz.

Bizim kobayımız. Reklam görünür

Hata! Reklamlar yalnızca uygulama çalışırken kayboldu, ancak yazılımı başlattığımızda gördüğümüz ana menüde kaldı. Yani bekleyin, ancak giriş noktası MainActivity sınıfıdır ve uygulama çalışırken reklam kaybolup ana menüde kalmıştır, yani giriş noktası farklı mıdır? Gerçek giriş noktasını belirlemek için AndroidManifest.xml dosyasını yeniden açın. Ve evet, şu satırları içeriyor:

Bize (ve daha da önemlisi android'e), android.intent.category.LAUNCHER kategorisinden bir amaç (olay) android.intent.action.MAIN oluşturulmasına yanıt olarak Start adlı bir etkinliğin başlatılması gerektiğini söylüyorlar. Bu olay, başlatıcıdaki uygulama simgesine dokunduğunuzda oluşturulur ve böylece giriş noktasını yani Start sınıfını belirler. Büyük olasılıkla, programcı ilk önce giriş noktası standart MainActivity sınıfı olan ana menüsü olmayan bir uygulama yazdı ve ardından menüyü içeren ve Start sınıfında açıklanan yeni bir pencere (etkinlik) ekledi ve bunu manuel olarak giriş yaptı nokta.

Start.smali dosyasını açın ve tekrar "Ad" satırını arayın, 153 ve 155. satırlarda FirstAd sınıfından bahsedildiğini görüyoruz. Aynı zamanda kaynak kodunda da bulunur ve ismine bakılırsa reklamların ana ekranda görüntülenmesinden sorumludur. Daha ayrıntılı olarak bakalım, FirstAd sınıfının bir örneğinin oluşturulması ve bağlama göre bu örnekle ilgili olan bir niyet ve ardından koşullu geçişin tam olarak örnek oluşturulmadan önce gerçekleştirildiği cond_10 etiketi var. sınıfın:

If-ne p1, v0, :cond_10 .line 74 yeni örnek v0, Landroid/content/Intent; ... :cond_10

Büyük olasılıkla, program bir şekilde reklamların ana ekranda gösterilip gösterilmeyeceğini rastgele hesaplar ve değilse doğrudan cond_10'a atlar. Tamam, görevini basitleştirelim ve koşullu geçişi koşulsuz bir geçişle değiştirelim:

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

Kodda artık FirstAd'den bahsedilmiyor, bu yüzden dosyayı kapatıyoruz ve sanal meşalemizi apktool kullanarak yeniden birleştiriyoruz. Akıllı telefonunuza kopyalayın, kurun, başlatın. Voila, tüm reklamlar ortadan kalktı, bunun için hepimizi tebrik ediyoruz.

Sonuçlar

Bu makale, Android uygulamalarını hackleme ve değiştirme yöntemlerine kısa bir giriş niteliğindedir. Korumanın kaldırılması, karmaşık kodun ayrıştırılması, uygulama kaynaklarının çevrilmesi ve değiştirilmesinin yanı sıra, ile yazılan uygulamaların değiştirilmesi gibi pek çok sorun perde arkasında kaldı. Android'i kullanma NDK. Bununla birlikte, temel bilgiye sahip olduğunuzdan, hepsini anlamak yalnızca zaman meselesidir.




Tepe