Bir apk dosyası nasıl ayrıştırılır. Android uygulamalarını açar, değiştirir ve paketleriz. APK dosyası nedir

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

APK dosyası nedir?

APK, arşivlenen yürütülebilir dosyalar-uygulamalar için kullanılan bir Android işletim sistemi biçimidir ve dosyanın adı herhangi bir şey olabilir, ancak uzantı yalnızca şu .apk gibi görünmelidir. Diğer işletim sistemlerindeki APK analogları Windows .msi'de, Symbian - .sis, Linux - .rpm veya .deb'de bulunur.

İçinde ne olduğunu görün
Aslında, .apk bir ZIP arşividir, böylece dahili cihaza herhangi bir dosya yöneticisi veya arşivleyici, örneğin WinRAR veya X-plore mobil uygulaması kullanarak bakabilirsiniz.




Sadece dahili kaynaklara görsel erişiminiz olduğu unutulmamalıdır, düzenleme seçenekleri son derece sınırlıdır.

Yapıyı düşünün
.Apk içinde bir dizi dosya ve klasör görüyoruz, ne için olduklarını öğrenelim:

  • AndroidManifest.xml, tüm ana noktaları, gereksinimleri, sürümü, izinleri ve daha fazlasını öğrenebileceğiniz uygulamanın bir tür "pasaportudur".
  • META-INF bu dosya meta verileri, yani veriler, sağlama toplamları, veri yolları, kaynak yolları ve sağlama toplamları, sertifikalar hakkındaki verileri içerir. Bu dosyayı herhangi bir metin düzenleyiciyle açabilirsiniz, ancak Notepad ++ kullanmanız önerilir.
  • Res klasörü, simgeler, resimler, metin, grafik arayüz öğeleri gibi grafiksel tüm program kaynaklarını içerir. Ayrıca klasöre kolayca erişebilirsiniz.
  • classes.dex - Dalvik VM sanal makinesi tarafından yürütülen uygulamanın doğrudan program kodu, bu dosyanın içinde yalnızca .apk dosyasını çözebileceğinizi görebilirsiniz, bunun hakkında diğer makalelerde konuşacağız. kaynaklar.arsc - derlenmiş XML dosyası, bu dosya programa dahil olan tüm kaynaklarla ilgili verileri içerir.
  • lib - kaynaklara yalnızca özel programlar kullanılarak erişilebilen yerel kitaplıklara sahip bir klasör. Ayrıca, APK her zaman olmamakla birlikte com, org, udk gibi dosya ve klasörler içerebilir.

Ş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ı sökmek için ana araç Apktool'dur, ancak bu program yalnızca satırdan çalışır, bu da pek uygun değildir. Daha hızlı ve daha rahat ayrıştırma için APKing'i kullanabilirsiniz, bu aynı Apktool'dur, ancak içerik menüsünden çalışabilme özelliğine sahiptir.


Ve böylece APKing'i Windows için herhangi bir uygulama gibi kuruyoruz ve .apk'yi seçiyoruz, üzerine sağ tıklayıp Shift'e aynı anda tıklıyoruz, ardından aşağıdakileri göreceğiz:



Ve gerekli eylemi seçiyoruz, örneğin tamamen derlemeyi çöz, ardından program işlemi tamamlayacak ve aynı ada sahip bir klasör oluşturacaktır.



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



Artık tüm metin dosyaları düzenlenebilir, temel kurallara uyulurken popüler Notepad ++ programını kullanabilirsiniz, örneğin, AndroidManifest.xml'yi düşünün.

SmartAPKTool uygulamasından bahsettim. Değiştirilmiş apk dosyalarını açabilir, paketleyebilir ve imzalayabilir. Avantajı, grafik arayüzün varlığıdır. Bununla birlikte, ciddi bir dezavantaj da var. SmartAPKTool uzun süredir güncellenmedi ve program, Android'in yeni sürümleri için uygulamaları yanlış bir şekilde paketten çıkarıyor ve paketliyor. Bu nedenle, burada uygulamanın bu amaçlar için nasıl kullanılacağını açıklamaya çalışacağım. apktool.

Açıklama 1.
SmartAPKTool programı, toplanan apk dosyalarını imzalamak için hala kullanışlıdır.
Açıklama 2.
Makalede bahsedilen programların bağlantıları ↓

Program apktool grafik arayüze sahip değildir. Bu, komut satırı ile çalışmaya alışkın olmayanlar için bir dezavantajdır. Ancak bir artı da var: SmartAPKTool'dan farklı olarak, tüm hataları göreceğiz, bu da neyi düzelteceğimizi bileceğimiz anlamına gelir.

İki arşiv indirin: biri tüm sistemler için ortak, diğeri sistemimiz için (örnekte - Windows):

Her iki arşivi de aynı boş klasöre açın (örneğimizde, C: \\ apktool \\). İçeriği şu şekilde görünmelidir:

Şu andan itibaren programı kullanabiliriz apktool.

Açıklama 3.
64 bit Linux kullanıcılarının ia32-libs paketini yüklemeleri gerekecektir:

sudo apt-get install ia32-libs

Aynı klasöre açmamız gereken dosyayı koyuyoruz. Örneğin, ona orig.apk diyelim
Shift tuşuna basıp basılı tutarak, klasördeki herhangi bir boş alana sağ tıklayın (dosyalara tıklamayın!). Bundan sonra, "Komut penceresini aç" öğesini seçin. Görünen konsolda şunu yazın:

apktool orig.apk kod çözme

Dosya paketinden çıkarılacak:

Şimdi C: \\ apktool \\ dizininde paketlenmemiş uygulamanın bulunduğu bir klasörümüz var. Orijinal dosyayla aynı şekilde adlandırılır, eksi uzantı: C: \u200b\u200b\\ apktool \\ orig \\. Kaynak dosyaları Android makalesinde anlatıldığı gibi değiştirebiliriz: Bir telefona iki aynı uygulama nasıl kurulur. Değişiklikleri yaptıktan sonra, kaynak dosyaları apk içine paketleyerek uygulamanın bir kopyasını oluşturalım:

apktool orig sonucu oluşturmak.apk

Burada result.apk, kopya oluşturma için bulduğumuz dosya adıdır. Hata yoksa, dosya oluşturulacaktır:

Gerisi makalenin kapsamı dışındadır:

  1. Montaj sırasında hatalar varsa, nedenlerini bulmanız ve düzeltmeniz gerekir.
  2. Sonuç olarak ortaya çıkan sonuç.apk dosyasını imzalamak için kalır. Bu, yukarıda belirtildiği gibi SmartAPKTool kullanılarak yapılabilir; içindeki her şey sezgiseldir. Bir apk dosyasını imzalamanın başka yolları da vardır.
  3. Bir kopya yüklerken, başladığında veya çalıştığında da hatalar meydana gelebilir. Android SDK'da bulunan adb yardımcı programı kullanılarak yakalanmaları gerekir.

Uygulamayı imzalamak gerekiyor, aksi takdirde kurulmayacak. Hatalar çok yaygın değildir ve bunlara neden olan en yaygın sorunlar makalede açıklanmaktadır.

Android cihazlar için çeşitli üretici yazılımı kullanma sürecinde, bazen işletim sistemine yerleşik sistem uygulamalarını bir şekilde değiştirmek gerekli hale gelir. Bu yazımızda bu konuyu detaylı olarak ele alacağız.

Doğal olarak, sistem APK dosyasını düzgün ve istikrarlı bir şekilde çalışması için sökmeniz ve yeniden birleştirmeniz gerekir. Bunun için ne yapılması gerektiğini adım adım çözelim.

Öncelikle, sistem APK dosyalarını çözme işlemini gerçekleştirmeniz gerekir. Bunu nasıl yapacağınızı size anlatacağız.

Bu nedenle, .apk dosyasının şifresi çözüldü ve derlenmiş oldu. İlgilendiğimiz uygulamayı parçalara ayırıyoruz, bir isim taşımasına izin veriyoruz, örneğin netliği için, çerçeve- res. apk... Özgün bir uygulama olarak kafamızda hatırlıyoruz.

Diyelim ki uygulamada gerekli tüm değişiklikleri yaptık. İçinde APK'lerin tüm yönleri hakkında daha fazla konuşacağız. Şimdi onu geri toplaman gerekiyor. Bitmiş paketlenmiş uygulamayı değiştirilmiş bir uygulama olarak hatırlayalım 2.

Şimdi, uygulamaları orijinal ve değiştirilmiş olarak zihinsel olarak ezberlemenin neden gerekli olduğunu açıklayacağız 2. ApkTool tarafından oluşturulmuş bir uygulama (veya SmartApkTool gibi bir grafik kullanıcı arayüzü uzantısı kullanan) çalışmayacaktır, ancak bu bir problem değildir. Aşağıdaki eylemleri gerçekleştiriyoruz:

Bu dosyaları APK'ye geri koymak yeterince kolaydır. Bunu yapmak için, apktool'u uygun derleme bayrağıyla çalıştırmanız ve içinde derlenmiş uygulama bulunan klasöre giden yolu iletmeniz gerekir. Örneğin, apktool ile aynı dizinde bulunan bir uygulama klasörümüz varsa, komut şöyle görünecektir:

Kabuk

java -jar apktool.jar b uygulaması

java - jar apktool .jar b uygulaması

Montajdan sonra, bitmiş APK dosyası dizinde olacaktır. uygulama / yapı... Ardından, APK'yi imzalamanız gerekiyor. Bu, uygulamanın hata ayıklamanın yasak olduğu cihazlarda çalışması için yapılır. Yani, bu tür cihazlarda imzasız uygulamaların başlatılması yasaktır. Dijital sertifikalar ve dosya imzalama prosedürü hakkında daha fazla bilgiyi buradan okuyun.

Bir dosyayı imzalamak çok kolaydır: Bunun için signapk adında özel bir yardımcı program vardır. İlk sertifikaları bağımsız değişken olarak, ardından uygulamaya giden yol ve son olarak imzalı uygulamanın yolu (sonuç, nereye kaydedileceği) iletilerek başlatılmalıdır. Şöyle görünüyor:

Kabuk

java -jar signapk.jar testkey.x509.pem testkey.pk8 * .apk apk_signed.apk

java - jar signapk .jar testkey .x509 .pem testkey .pk8 * .apk apk_signed .apk

Böyle bir sertifika nereden alınır? Sertifikalar internette bulunabilir. Veya kendiniz yaratın. Örneğin, gerekli tüm dosyaların kurulması ve oluşturulmasıyla ilgili ayrıntılı talimatlar bulunabilir.

Sonuç

Gördüğünüz gibi, APK dosyalarını yeniden derlemek ve bir araya getirmek oldukça basit bir işlemdir ve otomatikleştirilebilir ve araştırmacı için işi kolaylaştırır. Dalvik sanal makinesinin kendisi de öğrenmesi ve açılması kolaydır; bu, bir yandan geliştiriciler için giriş engelini azaltır ve diğer yandan, Android platformunda bu kadar büyük bir korsanlık yüzdesinin ana nedenidir. Bu kısmen, örneğin oyun geliştiricilerinin genellikle hikayesi olan ilginç oyunlar yayınlamakla ilgilenmemelerinin nedenidir. Bağışla çarpıcı şekilde benzer çiftlikleri perçinlemek, kullanıcıların mevcut tutumu ile çok daha karlı. Bu nedenle, uygulamalar satın alıyor, geliştiricileri destekliyor ve ilginç içerikler elde ediyoruz. Ancak bağış yapmaya kesinlikle gerek yok!

Hepinize teşekkürler, tekrar görüşmek üzere.

Bazen Android'deki bazı uygulamalar kullanıcıya bir şekilde uymuyor. Bir örnek can sıkıcı reklamlardır. Ve bu da olur - herkes programda iyidir, ancak yalnızca içindeki çeviri ya çarpıktır ya da tamamen yoktur. Ya da örneğin program deneme sürümüdür ancak tam sürümü almak mümkün değildir. Durum nasıl değiştirilebilir?

Giriş

Bu yazımızda bir APK paketini bir uygulama ile nasıl demonte edeceğimizden, iç yapısından nasıl bakacağımız, bayt kodunu söküp çözeceğimizden ve ayrıca uygulamada bize bir veya daha fazla fayda sağlayacak birkaç değişiklik yapmaya çalışacağız.

Tüm bunları kendi başınıza yapmak için, uygulamanın kendisini ve erişim haklarını açıklamadan ekranda görüntülenecek dizeleri depolamaya kadar Android uygulamalarının yazıldığı Java dili ve Android'in her yerinde kullanılan XML dili hakkında en azından bazı temel bilgilere ihtiyacınız olacaktır. Ayrıca özel konsol yazılımını da kullanabilmeniz gerekecektir.

Peki, Android için kesinlikle tüm yazılımların dağıtıldığı APK paketi tam olarak nedir?

Uygulamaları yeniden derleme

Bu yazıda sadece demonte edilmiş uygulama kodu ile çalıştık ancak büyük uygulamalarda daha ciddi değişiklikler yaparsanız smali kodunu anlamak çok daha zor olacaktır. Neyse ki, dex kodunu, orijinal olmasa ve geri derlenmemiş olmasına rağmen, uygulamanın mantığını okumak ve anlamak çok daha kolay olan Java koduna dex edebiliriz. Bunu yapmak için iki araca ihtiyacımız var:

  • dex2jar - Dalvik bayt kodunun JVM bayt koduna çevirmeni, temelinde Java dilinde kod alabiliyoruz;
  • jd-gui, JVM bayt kodundan okunabilir Java kodu almanıza izin veren derleyicinin kendisidir. Alternatif olarak, Jad'ı (www.varaneckas.com/jad) kullanabilirsiniz; oldukça eski olmasına rağmen, bazı durumlarda Jd-gui'den daha okunabilir kod üretir.

Bu şekilde kullanılmaları gerekir. İlk olarak dex2jar'ı çalıştırarak apk paketinin yolunu argüman olarak belirledik:

% dex2jar.sh mail.apk

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

Cihaz APK paketleri ve bunların makbuzu

Bir Android uygulama paketi, aslında içeriği görüntülemek ve açmak için herhangi bir özel araç gerektirmeyen normal bir ZIP dosyasıdır. Bir arşivleyiciye sahip olmak yeterlidir - Windows için 7zip veya Linux için konsol unzip. Ama bu paketleyiciyle ilgili. İçinde ne var? İçeride genel olarak şu yapıya sahibiz:

  • META-INF / - uygulamanın oluşturucusunu doğrulayan dijital bir sertifikasını ve paket dosyalarının sağlama toplamlarını içerir;
  • res / - uygulamanın çalışmasında kullandığı çeşitli kaynaklar, örneğin, resimler, arayüzün bildirime dayalı bir açıklaması ve diğer veriler;
  • AndroidManifest.xml - uygulama açıklaması. Buna, örneğin gerekli çözünürlüklerin bir listesi, gerekli Android sürümü ve gerekli ekran çözünürlüğü dahildir;
  • classes.dex - Dalvik sanal makinesi için derlenmiş uygulama bayt kodu;
  • 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 değilse de, belki de APK'lerin büyük çoğunluğunda bulunur. Bununla birlikte, bahsetmeye değer pek de yaygın olmayan birkaç dosya / dizin vardır:

  • varlıklar - kaynakların analogu. Temel fark, bir varlığa erişmek için onun tanımlayıcısını bilmeniz gerekirken, varlık listesi uygulama kodundaki AssetManager.list () yöntemi kullanılarak dinamik olarak elde edilebilir;
  • lib - NDK (Yerel Geliştirme Kiti) kullanılarak yazılan yerel Linux kitaplıkları.

Bu dizin, oyun üreticileri tarafından C / C ++ ile yazılmış bir oyun motorunun yanı sıra yüksek performanslı uygulama üreticileri (Google Chrome gibi) barındırmak için kullanılır. Cihaz çözüldü. Ancak ilgilendiğiniz başvurunun gerçek paket dosyasını nasıl elde edersiniz? Cihazdan APK dosyalarını root olmadan almak mümkün olmadığından (bunlar / data / app dizininde bulunurlar) ve root her zaman tavsiye edilmediğinden, uygulama dosyasını bilgisayara almanın en az üç yolu vardır:

  • chrome için APK Downloader uzantısı;
  • gerçek APK Leecher uygulaması;
  • çeşitli dosya paylaşımı ve warezniki.

Hangisinin kullanılacağı bir zevk meselesidir; ayrı uygulamalar kullanmayı tercih ediyoruz, bu nedenle Real APK Leecher'ın kullanımını açıklayacağız, özellikle Java'da yazıldığından ve buna göre Windows'ta, hatta nix'te bile çalışacak.

Programı başlattıktan sonra, üç alanı doldurmanız gerekir: E-posta, Şifre ve Cihaz Kimliği - ve bir dil seçin. İlk ikisi, cihazda kullandığınız Google hesabınızın e-postası ve şifresidir. Üçüncüsü, cihaz tanımlayıcısıdır ve çeviricideki kodu çevirerek bunu elde edebilirsiniz. # #8255## ve ardından Cihaz Kimliği dizesini bulma. Doldururken, kimliği android öneki olmadan girmeniz yeterlidir.

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

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

Diyelim ki ilgilendiğiniz, indirdiğiniz, paketini açtığınız bir paket buldunuz ... ve bazı XML dosyalarını görüntülemeye çalışırken, dosyanın metin olmadığını görünce şaşırdım. Nasıl ayrıştırılır ve genel olarak paketlerle nasıl çalışılır? SDK'yı kurmak gerçekten gerekli mi? Hayır, SDK'yı yüklemenize gerek yoktur. Aslında, APK paketlerini açmak, değiştirmek ve paketlemek için tüm adımlar aşağıdaki araçları gerektirir:

  • zIP arşivleyici paketten çıkarmak ve paketlemek için;
  • smali - Dalvik sanal makinesinin (code.google.com/p/smali) bayt kodunun birleştiricisi / sökücüsü;
  • aapt - kaynakları paketlemek için 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 edinilebilir;
  • imzalayan - değiştirilmiş bir paketi dijital olarak imzalamak için bir araç (bit.ly/Rmrv4M).

Tüm bu araçları ayrı ayrı kullanabilirsiniz, ancak bu sakıncalıdır, bu nedenle bunların temelinde oluşturulmuş daha yüksek seviyeli bir yazılım kullanmak daha iyidir. Linux veya Mac OS X kullanıyorsanız, apktool adında bir araç var. Kaynakları orijinal biçimlerinde (ikili XML ve arsc dosyaları dahil) açmanıza, değiştirilen kaynaklarla bir paketi yeniden oluşturmanıza olanak tanır, ancak paketleri nasıl imzalayacağını bilmez, bu nedenle imzalayıcı 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 almalısınız:

$ 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 $ export PATH \u003d ~ / bin: $ PATH

Windows'ta çalışıyorsanız, tüm bu araçları da (apktool'un kendisi dahil) bir araya getiren Virtual Ten Studio adında mükemmel bir araç vardır, ancak CLI arayüzü yerine, kullanıcıya işlemleri gerçekleştirebileceğiniz sezgisel bir grafik arayüz sağlar. birkaç tıklamayla paketten çıkarma, sökme ve yeniden derleme üzerine. Bu araç Donation-ware'dir, yani bazen bir lisans almayı öneren pencereler vardır, ancak sonunda bu tolere edilebilir. Bunu tarif etmenin bir anlamı yok çünkü arayüzü birkaç dakika içinde anlayabilirsiniz. Ancak konsol niteliği nedeniyle apktool daha ayrıntılı olarak tartışılmalıdır.


Apktool seçeneklerine bir göz atalım. Kısacası, üç ana komut vardır: d (kod çözme), b (oluşturma) ve if (çerçeve yükleme). İlk iki komutla her şey açıksa, üçüncü, koşullu operatör ne yapar? Herhangi bir sistem paketini incelediğinizde gerekli olan belirtilen UI çerçevesini açar.

İlk komutun en ilginç seçeneklerini ele alalım:

  • -s - dex dosyalarını parçalarına ayırmayın;
  • -r - kaynakları açmayın;
  • -b - dex dosyasını sökmenin sonuçlarına hata ayıklama bilgisi eklemeyin;
  • --frame-yolu - apktool'da yerleşik olan yerine belirtilen UI ç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 başka bir kaynaktan kullanmak istiyorsanız, aapt yolunu (APK arşivi oluşturmak için bir araç) belirtiriz.

Apktool'u kullanmak çok basittir, bunun için komutlardan birini ve APK'nin yolunu belirtmeniz yeterlidir, örneğin:

$ apktool d mail.apk

Bundan sonra, çıkarılan ve demonte edilen tüm paket dosyaları posta dizininde görünecektir.

Diseksiyon. Reklamları devre dışı bırak

Teori elbette iyidir, ancak paketlenmemiş paketle ne yapacağımızı bilmiyorsak neden buna ihtiyaç var? Teoriyi kendi yararımıza uygulamaya çalışalım, yani bazı yazılımları bize reklam göstermeyecek şekilde değiştirelim. Örneğin, bunun Virtual Torch - sanal bir meşale olmasına izin verin. Bizim için bu yazılım mükemmel çünkü can sıkıcı reklamlarla dolu ve dahası, kod ormanında kaybolmayacak kadar basit.


Bu nedenle, yukarıdaki yöntemlerden birini kullanarak uygulamayı piyasadan indirin. Virtuous Ten Studio'yu kullanmaya karar verirseniz, uygulamada APK dosyasını açın ve paketi açın, bunun için bir proje oluşturun (Dosya -\u003e Yeni proje), ardından proje bağlam menüsünden Dosyayı İçe Aktar'ı seçin. Seçiminiz apktool'a düşerse, sadece bir komutu yürütün:

$ apktool d 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ünecek, ancak dex dosyaları yerine ek bir smali dizini ve bir apktool.yml dosyası. Birincisi uygulamanın çalıştırılabilir dex dosyasının demonte kodunu içerir, ikincisi ise paketi geri oluşturmak için apktool tarafından ihtiyaç duyulan hizmet bilgilerini içerir.

Bakmamız gereken ilk yer elbette AndroidManifest.xml. Ve burada hemen aşağıdaki satırla tanışıyoruz:

Tahmin edebileceğiniz gibi, uygulamaya İnternet bağlantısını kullanma izni vermekten sorumludur. Aslında, sadece reklamlardan kurtulmak istiyorsak, büyük olasılıkla uygulama için İnternet'i devre dışı bırakmamız gerekir. Bunu yapmayı deneyelim. Belirtilen satırı silip apktool kullanarak yazılımı 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 imzası ve dosya sağlama toplamları olmadığı için (META-INF / dizini yoktur) onu kurmak mümkün olmayacaktır. Paketi apk imzalayıcı yardımcı programını kullanarak imzalamamız gerekiyor. Başlatıldı. Arayüz iki sekmeden oluşur - ilkinde (Key Generator) anahtarları oluşturuyoruz, ikincisinde (APK Signer) imzalıyoruz. Özel anahtarımızı oluşturmak için aşağıdaki alanları doldurun:

  • Hedef dosya - anahtar deposunun çıktı dosyası; genellikle bir anahtar çiftini depolar;
  • Parola ve Onaylamak - depolama için şifre;
  • Alias - arşivdeki anahtarın adı;
  • Takma ad parolası ve Onaylamak - gizli anahtar şifresi;
  • Geçerlilik - geçerlilik süresi (yıl olarak). Varsayılan optimumdur.

Alanların geri kalanı genellikle isteğe bağlıdır - ancak en az birinin doldurulması gerekir.


UYARI

Apk imzalayıcı kullanarak bir uygulamayı imzalamak için, Android SDK'yı yüklemeniz ve uygulama ayarlarında bunun tam yolunu belirtmeniz gerekir.

Tüm bilgiler yalnızca bilgi amaçlı verilmiştir. Bu makaledeki materyallerin neden olduğu herhangi bir zarardan ne yayın kurulu ne de yazar sorumlu değildir.

Şimdi bu anahtarla APK'yi imzalayabilirsiniz. APK İmzalayıcı sekmesinde, yeni oluşturulan dosyayı seçin, şifreyi, anahtar takma adını ve şifreyi girin, ardından APK dosyasını bulun ve kalın bir şekilde "İmzala" düğmesine basın. Her şey yolunda giderse paket imzalanacak.

BİLGİ

Paketi kendi anahtarımızla imzaladığımız için orijinal uygulama ile çakışacak, yani yazılımı piyasa üzerinden güncellemeye çalıştığımızda bir hata alacağız.

Dijital imza yalnızca üçüncü taraf yazılımlar için gereklidir, bu nedenle, yüklenen sistem uygulamalarını / system / app / dizinine kopyalayarak değiştiriyorsanız, bunları imzalamanıza gerek yoktur.

Bundan sonra paketi bir akıllı telefona bırakıp kurup başlatıyoruz. Voila, reklamlar gitti! Ancak bunun yerine, İnternet'e sahip olmadığımızı veya uygun izinlere sahip olmadığımızı belirten bir mesaj çıktı. Teorik olarak, bu yeterli olabilir, ancak mesaj can sıkıcı görünüyor ve dürüst olmak gerekirse, aptal bir uygulamayla şanslıydık. Normal olarak yazılmış bir yazılım, büyük olasılıkla yetkisini açıklığa kavuşturacak veya bir İnternet bağlantısının varlığını kontrol edecek ve aksi takdirde başlatmayı reddedecektir. Bu durumda nasıl olunur? Elbette kodu düzenleyin.

Tipik olarak, uygulama yazarları, uygulamanın başlatılması sırasında veya "etkinliklerinden" biri (basit terimlerle, uygulama ekranları) sırasında bu sınıfların reklamlarını ve ç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 sadece açık grafik kitaplığı cocos2d'yi içeriyor), sonra kauf (tam olarak orada, çünkü bu geliştiricinin adı ve tüm kodu orada) - ve işte burada, pazarlama dizini. İçinde smali uzantılı bir sürü dosya buluyoruz. Bunlar sınıflardır ve bunlardan en önemlisi, tam olarak reklamları gösterdiğini tahmin etmenin kolay olduğu adıyla Ad.smali sınıfıdır.

İşleminin mantığını değiştirebilirdik, ancak herhangi bir yöntemine yapılan çağrıları uygulamanın kendisinden kaldırmak çok daha kolay olurdu. Bu nedenle, pazarlama dizininden çıkıyoruz ve bitişik parçacık dizinine ve ardından sanal torka geçiyoruz. MainActivity.smali dosyası burada özel bir ilgiyi hak ediyor. Bu, Android SDK tarafından oluşturulan ve uygulamaya giriş noktası olarak ayarlanan standart bir Android sınıfıdır (C'deki ana işleve benzer). Dosyayı düzenlemek için açın.

İçinde smali kodu (yerel montajcı) var. Düşük seviyeli doğası nedeniyle oldukça kafa karıştırıcı ve okunması zordur, bu yüzden onu incelemeyeceğiz, ancak kodda Reklam sınıfına yönelik tüm referansları bulup bunları yorumlayacağız. Aramada "Reklam" satırına giriyoruz ve kendimizi 25. satırda buluyoruz:

Özel alan reklamı: Lcom / kauf / marketing / Ad;

Bu, Reklam sınıfına ait bir nesneyi tutacak bir reklam alanı oluşturur. Satırın önüne ### işaretini yerleştirerek yorum yapıyoruz. Aramaya devam ediyoruz. 423. Satır:

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

Burası nesnenin yaratıldığı yerdir. Yorum yapıyoruz. 433, 435, 466, 468, 738, 740, 800 ve 802 numaralı Ad sınıfının yöntemlerini aramaya ve bulmaya devam ediyoruz. Yorum yapıyoruz. Öyle gibi görün. Kurtarırız. Şimdi paketi tekrar bir araya getirmeniz ve performansını ve reklamların varlığını kontrol etmeniz gerekiyor. Denemenin saflığı için AndroidManifest.xml'den silinen dizgiyi döndürüyoruz, paketi topluyoruz, imzalıyoruz ve kuruyoruz.

Kobayımız. Reklam görünür

Oops! Reklam, yalnızca uygulama çalışırken kayboldu, ancak yazılımı başlattığımızda gördüğümüz ana menüde kaldı. Öyleyse bekleyin, ancak giriş noktası MainActivity sınıfı ve uygulama çalışırken reklamlar kayboldu, ancak ana menüde kaldı, yani giriş noktası farklı mı? Gerçek giriş noktasını belirlemek için AndroidManifest.xml dosyasını yeniden açın. Ve evet, aşağıdaki satırlara sahip:

Bize (ve daha da önemlisi, android'e) android.intent.category.LAUNCHER kategorisinden bir niyet (olay) android.intent.action.MAIN oluşturulmasına yanıt olarak Başlat adlı bir etkinliğin başlatılması gerektiğini söylerler. Bu olay, başlatıcıdaki uygulama simgesine dokunduğunuzda oluşturulur, bu nedenle giriş noktasını, yani Başlangıç \u200b\u200bsınıfını tanımlar. Büyük olasılıkla, programcı önce standart MainActivity sınıfı olan giriş noktası olan ana menü olmadan bir uygulama yazdı ve ardından menüyü içeren ve Start sınıfında açıklanan yeni bir pencere (aktivite) ekledi ve manuel olarak onu giriş noktası yaptı.

Start.smali dosyasını açın ve tekrar "Ad" satırını arayın, 153 ve 155. satırlarda FirstAd sınıfının geçtiği yeri bulun. Aynı zamanda kaynak kodunda da yer alır ve ismine göre, reklamların ana ekranda gösterilmesinden kesinlikle sorumludur. Daha ileriye bakarız, bu örnekle ilgili bağlama göre FirstAd sınıfının bir örneğinin ve bir niyetin oluşturulması ve ardından koşullu geçişin sınıfın bir örneğini oluşturmadan önce tam olarak gerçekleştirilen cond_10 etiketi vardır:

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

Büyük olasılıkla, program bir şekilde rasgele olarak ana ekranda reklam gösterilip gösterilmeyeceğini hesaplar ve değilse, doğrudan koşul_10'a atlar. Tamam, görevini basitleştirelim ve koşullu atlamayı koşulsuz bir atlayışla değiştirelim:

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

Kodda FirstAd'a başka referans yok, bu nedenle dosyayı kapatın ve apktool kullanarak sanal meşalemizi yeniden birleştirin. Akıllı telefona kopyalayın, kurun, başlatın. Voila, tüm reklamlar kayboldu ve hepimizi tebrik ederiz.

Sonuç

Bu makale, Android uygulamalarını kırma ve değiştirme tekniklerine kısa bir giriş niteliğindedir. Korumayı kaldırma, gizlenmiş kodu ayrıştırma, uygulama kaynaklarını çevirme ve değiştirme ve Android NDK kullanılarak yazılan uygulamaları değiştirme gibi pek çok sorun perde arkasında kaldı. Ancak, temel bilgilere sahip olmak, tüm bunları anlamak sadece bir zaman meselesidir.