• Apk dosyalarını değiştirmek için program. Android uygulamalarını açma, değiştirme ve paketleme

    Bu yazımızda 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 formatı Android sistemleri, yürütülebilir uygulama dosyalarını arşivlemek için kullanılır ve dosyanın adı herhangi bir şey olabilir, ancak uzantı yalnızca .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
    Temel olarak .apk posta arşiviöyleyse bak iç organizasyon herhangi bir dosya yöneticisini veya arşivleyiciyi kullanabilirsiniz, örneğin WinRAR veya mobil uygulama Keşfet.





    Aynı zamanda, dahili kaynaklara yalnızca görsel erişim elde ettiğinizi, düzenleme seçeneklerinin son derece sınırlı olduğunu hatırlamakta fayda var.
    yapıyı düşünün
    .apk'nin içinde bir dizi dosya ve klasör görüyoruz, bunların ne işe yaradığını öğrenelim:
    • AndroidManifest.xml, tüm ana noktaları, gereksinimleri, sürümü, izinleri ve daha fazlasını öğrenebileceğiniz uygulamanın bir tür "pasaportu" dur.
    • META-INF bu dosya meta verileri içerir, yani veriler hakkında veriler sağlama toplamları, veri yolları, kaynak yolları ve sağlama toplamları, sertifikalar. Bu dosyayı herhangi bir metin düzenleyiciyle açabilirsiniz, ancak Notepad++ önerilir.
    • Res klasörü, tüm program kaynaklarını, simgeler, resimler, metin, GUI öğeleri gibi grafik kaynaklarını içerir. Ayrıca klasöre kolayca erişebilirsiniz.
    • classs.dex - hemen programlama kodu Dalvik VM sanal makinesi tarafından yürütülen uygulama, bu dosyanın içindekileri sadece .apk'yi çözerek görebilirsiniz, buna başka makalelerde değineceğiz. kaynaklar.arsc -derlenmiş XML dosyası, bu dosya programda yer alan tüm kaynaklarla ilgili verileri içerir.
    • lib - kaynaklarına yalnızca kullanılırken erişilebilen yerel kitaplıklara sahip bir klasör özel programlar. Ayrıca APK'de com, org, udk gibi dosya ve klasörler olabilir, ancak her zaman değil.

    Şimdi iç yapıya daha detaylı bakalım, bunun için bir decompiler programa, 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 sadece hattan çalışır ki bu pek uygun değildir. Daha hızlı ve daha rahat ayrıştırma için APKing'i kullanabilirsiniz, bu hala 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 olarak yüklüyoruz ve .apk'yi seçerek üzerine sağ fare tuşuyla ve aynı zamanda Shift ile tıklıyoruz, ardından aşağıdakileri göreceğiz:


    Ve gerekli eylemi seçiyoruz, örneğin tamamen kaynak koda dönüştür, 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şebileceğiz.


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

    Bazen Android'deki bazı uygulamalar nedense kullanıcıya uymaz. Bir örnek can sıkıcı reklamlar. Ve bu şekilde olur - programda herkes iyidir, ancak yalnızca içindeki çeviri ya çarpıktır ya da tamamen yoktur. Veya, örneğin, program deneme sürümüdür ve tam versiyon ihtimal yok Durum nasıl değiştirilir?

    giriiş

    Bu yazıda, bir APK'yı bir uygulama ile nasıl demonte edeceğimiz, iç yapısına nasıl bakacağımız, bytecode'u nasıl demonte edeceğimiz ve kaynak koda dönüştüreceğimiz hakkında konuşacağız ve ayrıca uygulamalarda bize şu veya bu faydayı sağlayabilecek çeşitli değişiklikler yapmaya çalışacağız.

    Tüm bunları kendiniz yapmak için en azından ihtiyacınız olacak temel bilgi java dili, Android için hangi uygulamaların yazıldığı ve XML dili, uygulamanın kendisini ve erişim haklarını açıklamaktan ekranda görüntülenecek dizeleri depolamaya kadar Android'de her yerde kullanılır. Ayrıca, özel konsol yazılımlarını kullanma yeteneğine de ihtiyacınız olacak.

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

    Uygulama koda dönüştürme

    Makalede, yalnızca demonte uygulama koduyla çalıştık, ancak büyük uygulamalar daha ciddi değişiklikler yaparsanız, smali kodunu anlamak çok daha zor olacaktır. Neyse ki, dex kodunu, orijinal olmamasına ve geri derlenememesine rağmen, uygulamanın mantığını okumak ve anlamak çok daha kolay olan Java koduna dönüştürebiliriz. Bunu yapmak için iki araca ihtiyacımız var:

    • dex2jar - Java kodunu alabileceğimiz Dalvik bayt kodunun JVM bayt koduna çevirmeni;
    • jd-gui, JVM bayt kodundan okunabilir Java kodu almanızı sağlayan bir derleyicidir. Alternatif olarak, Jad'i (www.varanecas.com/jad) kullanabilirsiniz; oldukça eski olmasına rağmen, bazı durumlarda daha fazla üretir okunabilir kod jd-gui'den daha.

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

    %dex2jar.sh mail.apk

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

    APK paketlerinin düzenlenmesi ve alınması

    Naylon poşet Android uygulamaları, aslında, içeriğini görüntülemek ve paketinden çıkarmak için özel bir araç gerektirmeyen normal bir ZIP dosyasıdır. Bir arşivleyiciye sahip olmak yeterlidir - Windows için 7zip veya Linux'ta konsol unzip. Ama bu ambalajla ilgili. İçinde ne var? İçeride, genellikle aşağıdaki yapıya sahibiz:

    • META-INF/- Uygulamanın, oluşturucusunu onaylayan dijital bir sertifikasını ve paket dosyalarının sağlama toplamlarını içerir;
    • res/ - uygulamanın çalışmasında kullandığı görüntüler, arayüzün bildirimsel açıklaması ve diğer veriler gibi çeşitli kaynaklar;
    • AndroidManifest.xml- uygulamanın açıklaması. Bu, örneğin gerekli izinlerin bir listesini içerir, gerekli android versiyonu ve gerekli ekran çözünürlüğü;
    • sınıflar.dex- için derlenmiş uygulama bayt kodu sanal makine Dalvik;
    • kaynaklar.arsc- ayrıca 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ğundadır. Ancak, bahsetmeye değer birkaç daha az yaygın dosya/dizin vardır:

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

    Bu dizin, oyun üreticileri tarafından C/C++ ile yazılmış oyun motorlarını ve ayrıca yüksek performanslı uygulamaların yaratıcıları tarafından kullanılır (örneğin, Google Chrome). Cihaz anlaşıldı. Ancak ilgili uygulamanın paket dosyası nasıl elde edilir? APK dosyalarını cihazdan köklendirme olmadan almak mümkün olmadığından (bunlar / data / app dizinindedirler) ve köklendirme her zaman tavsiye edilmediğinden, uygulama dosyasını bilgisayara almanın en az üç yolu vardır:

    • Chrome için APK İndirici uzantısı;
    • Gerçek APK Sülük uygulaması;
    • çeşitli dosya barındırma ve warezniki.

    Hangisinin kullanılacağı bir zevk meselesidir; kullanmayı tercih ediyoruz bireysel başvurular, bu nedenle, özellikle Java ile yazıldığı ve buna göre Windows'ta, hatta nix'te çalışacağı için Real APK Leecher'ın kullanımını açıklayacağız.

    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-posta adresi ve şifresidir. Üçüncüsü, cihaz kimliğidir ve çeviricideki kodu çevirerek alabilirsiniz. # #8255## ve ardından Cihaz Kimliği satırını bulmak. Doldururken, android- ön eki olmadan yalnızca kimliği girmeniz gerekir.

    Doldurup kaydettikten sonra sık sık "Sunucuya bağlanırken hata oluştu" mesajı çıkıyor. alakası yok Google Oyun, bu yüzden görmezden gelmekten çekinmeyin ve ilginizi çeken paketleri arayın.

    İnceleme ve değişiklik

    Diyelim ki ilgilendiğiniz bir paket buldunuz, indirdiniz, paketini açtınız... ve bir XML dosyasını görüntülemeye çalıştığınızda, dosyanın bir metin dosyası olmadığını görünce şaşırdınız. Nasıl derlenir ve genel olarak paketlerle nasıl çalışılır? SDK'yı yüklemek gerçekten gerekli mi? Hayır, SDK'yı yüklemeniz gerekmez. Aslında, APK paketlerini paketinden çıkarmaya, değiştirmeye ve paketlemeye yönelik tüm adımlar için aşağıdaki araçlara ihtiyaç vardır:

    • ZIP arşivleyici paketin açılması ve paketlenmesi için;
    • küçük- Dalvik sanal makine bayt kodunun birleştirici/parçalayıcısı (code.google.com/p/smali);
    • uygun- 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ıca edinilebilir;
    • İmzalayan- için araç elektronik imza değiştirilmiş paket (bit.ly/Rmrv4M).

    Tüm bu araçları ayrı ayrı kullanabilirsiniz, ancak bu elverişsizdir, bu nedenle temel alınarak oluşturulmuş daha üst düzey yazılımları kullanmak daha iyidir. Linux veya Mac OS X kullanıyorsanız, apktool adlı bir araç vardır. Kaynakları orijinal biçimlerine (ikili XML ve arsc dosyaları dahil) açmanıza, değiştirilmiş kaynaklarla paketi yeniden oluşturmanıza olanak tanır, ancak paketleri nasıl imzalayacağını bilmediğinden, 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 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 $ export PATH=~/bin:$PATH

    Windows üzerinde çalışıyorsanız, bunun için Virtual Ten Studio adlı mükemmel bir araç vardır ve bu araç aynı zamanda tüm bu araçları (apktool'un kendisi dahil) toplar, ancak bir CLI arabirimi yerine kullanıcıya sezgisel bir GUI, birkaç tıklamayla paketten çıkarma, parçalara ayırma ve kaynak koda dönüştürme işlemlerini gerçekleştirebileceğiniz. Bu araç Donation-ware'dir, yani pencereler bazen bir lisans alma teklifiyle görünür, ancak bu sonuçta tolere edilebilir. Bunu tarif etmenin bir anlamı yok çünkü arayüzü birkaç dakika içinde anlayabilirsiniz. Ancak apktool, konsol yapısı gereği daha ayrıntılı olarak ele alınmalıdır.

    Apktool seçeneklerini göz önünde bulundurun. kısacası üç tane var temel komutlar: d (kod çözme), b (oluştur) ve if (çerçeveyi kur). İlk iki komutta her şey açıksa, üçüncü komut olan koşullu operatör ne yapar? Bir sistem paketini incelediğinizde gerekli olan belirtilen UI çerçevesini paketinden çıkarır.

    İlk komutun en ilginç seçeneklerini göz önünde bulundurun:

    • -S- dex dosyalarını sökmeyin;
    • -R- kaynakları ambalajından çıkarmayın;
    • -B- dex dosyasını sökme sonuçlarına hata ayıklama bilgilerini eklemeyin;
    • --çerçeve yolu- yerleşik apktool yerine belirtilen UI çerçevesini kullanın. Şimdi b komutu için birkaç seçeneği göz önünde bulundurun:
    • -F- değişiklikleri kontrol etmeden zorunlu montaj;
    • -A- herhangi bir nedenle başka bir kaynaktan kullanmak istiyorsanız, aapt'a (APK arşivi oluşturmak için kullanılan araç) giden yolu belirtin.

    Apktool'u kullanmak çok basittir, tek yapmanız gereken komutlardan birini ve APK'nın yolunu belirtmektir, örneğin:

    $ apktool d mail.apk

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

    Hazırlık. Reklamları devre dışı bırak

    Teori elbette iyidir, ancak paketlenmemiş paketle ne yapacağımızı bilmiyorsak neden gerekli? 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. Bizim için bu yazılım mükemmel, çünkü can sıkıcı reklamlarla dolu ve kodun çılgınlığında kaybolmamak için yeterince basit.


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

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

    Bundan sonra, com.kauf.particle.virtualtorch dizininde, önceki bölümde açıklanana benzer, ancak dex dosyaları ve bir apktool.yml dosyası yerine ek bir küçük dizin içeren bir dosya ağacı görünecektir. İlki, uygulamanın yürütülebilir dex dosyasının demonte kodunu içerir, ikincisi, apktool'un paketi geri birleştirmek için ihtiyaç duyduğu hizmet bilgilerini içerir.

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

    Uygulamaya İnternet bağlantısını kullanma izinlerini vermekten sorumlu olduğunu tahmin etmek kolaydır. Aslında sadece reklamlardan kurtulmak istiyorsak uygulamayı internetten yasaklamamız büyük ihtimalle yeterli olacaktır. Hadi yapmaya çalışalım. Belirtilen satırı silin ve yazılımı apktool kullanarak derlemeye çalışın:

    $ 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 yüklenemez (sadece bir META-INF/ dizini yoktur). Paketi apk-signer yardımcı programıyla imzalamamız gerekiyor. 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 depolar;
    • Ş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.

    Kalan alanlar genel olarak isteğe bağlıdır - ancak en az birini doldurmanız gerekir.


    UYARI

    Bir uygulamayı apk-signer ile imzalamak için Android SDK'yı yüklemeniz ve uygulama ayarlarında tam yolunu belirtmeniz gerekir.

    Tüm bilgiler yalnızca bilgilendirme amaçlıdır. Bu makaledeki materyallerin neden olabileceği olası zararlardan ne editörler ne de yazar sorumlu değildir.

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

    BİLGİ

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

    Dijital imza yalnızca gereklidir üçüncü taraf yazılımı, yani / system / app / dizinine kopyalayarak kurulan sistem uygulamalarını değiştiriyorsanız, bunları imzalamanıza gerek yoktur.

    Bundan sonra paketi akıllı telefona bırakıyoruz, kuruyoruz ve çalıştırıyoruz. Voila, reklam gitti! Ancak bunun yerine, İnternet'e sahip olmadığımızı veya uygun izinlere sahip olmadığımızı belirten bir mesaj belirdi. Teorik olarak, bu yeterli olabilir, ancak mesaj can sıkıcı görünüyor ve dürüst olmak gerekirse, aptalca bir uygulamayla şanslıydık. İyi yazılmış bir yazılım, büyük olasılıkla kimlik bilgilerini açıklığa kavuşturacak veya bir İnternet bağlantısı olup olmadığını kontrol edecek ve aksi takdirde başlamayı reddedecektir. Bu durumda nasıl olunur? Tabii ki, kodu düzenleyin.

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

    Çalışmasının mantığını değiştirebilirdik, ancak herhangi bir yöntemine yapılan çağrıları uygulamanın kendisinden aptalca kaldırmak çok daha kolay olurdu. Bu nedenle, pazarlama dizininden çıkıp komşu parçacık dizinine ve ardından sanal el fenerine gidiyoruz. MainActivity.smali dosyası burada özel 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). Düzenlemek için dosyayı açın.

    İçeride smali kodu (yerel derleyici) bulunur. Düşük seviyeli doğası nedeniyle oldukça kafa karıştırıcı ve okuması zor, bu yüzden onu incelemeyeceğiz, sadece kodda Ad sınıfının tüm sözlerini bulup yorumlayacağız. Aramada "Reklam" dizesini giriyoruz ve 25. satıra geçiyoruz:

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

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

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

    Nesnenin oluşturulduğu yer burasıdır. yorum yapıyoruz Ad sınıfının metotlarına yapılan 433, 435, 466, 468, 738, 740, 800 ve 802 numaralı satırlarda aramaya ve bulmaya devam ediyoruz. yorum yapıyoruz Öyleymiş gibi görün. Kurtarırız. Şimdi paketin tekrar monte edilmesi ve performansı ve reklamın varlığı açısından kontrol edilmesi gerekiyor. Deneyin saflığı için AndroidManifest.xml'den kaldırılan satırı geri getiriyoruz, paketi topluyoruz, imzalıyoruz ve kuruyoruz.

    Bizim kobayımız. Görünür reklam

    Oppa! Reklamlar 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 reklam kayboldu, ancak ana menüde kaldı, yani giriş noktası farklı mı? Gerçek giriş noktasını ortaya çıkarmak için AndroidManifest.xml dosyasını yeniden açıyoruz. Ve evet, şu satırları içeriyor:

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

    Start.smali dosyasını açıyoruz ve tekrar "Ad" satırını arıyoruz, 153 ve 155. satırlarda FirstAd sınıfından söz edildiğini görüyoruz. Ayrıca kaynak kodundadır ve ismine bakılırsa ana ekranda reklam göstermekten sorumludur. Daha ileriye bakarsak, FirstAd sınıfının bir örneğinin ve bu örnekle ilgili bağlama göre bir amacın oluşturulması ve ardından, sınıfın bir örneğini oluşturmadan tam olarak önce gerçekleştirilen koşullu geçiş olan cond_10 etiketi vardır. :

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

    Büyük olasılıkla, program bir şekilde ana ekranda reklam göstermenin gerekli olup olmadığını rastgele hesaplar ve değilse, doğrudan cond_10'a atlar. Tamam, görevini basitleştirelim ve koşullu geçişi koşulsuz olanla 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 apktool kullanarak sanal meşalemizi yeniden birleştiriyoruz. Akıllı telefona kopyalayın, kurun, çalıştırın. Voila, tüm reklamlar gitti, hepimizi tebrik ediyoruz.

    Sonuçlar

    Bu makale sadece kısa tanıtım Android uygulamalarını açma ve değiştirme yöntemlerinde. Korumanın kaldırılması, karartılmış kodun ayrıştırılması, uygulama kaynaklarının çevrilmesi ve değiştirilmesi ile birlikte yazılan uygulamaların değiştirilmesi gibi pek çok sorun perde arkasında kaldı. android kullanarak NDK. Ancak temel bilgilere sahip olmak, tüm bunları anlamak sadece an meselesidir.

    Android platformu için programlar, sahip tek dosyadır. apk uzantısı bu çok uygun. Aslında, bir akıllı telefona veya tablete herhangi bir program yüklemek, onun kolay kopyalama gadget'ınıza. Bir apk dosyası nedir ve içinde ne olduğunu nasıl görebilirsiniz?

    APK dosyası nedir?

    APK kısaltması şu şekilde genişletilir: Android Paketi Kit, Android uygulamaları için yürütülebilir bir dosya paketidir. Bu, derlenmiş ve çalışmaya hazır kodları ve diğer kaynakları içeren bir arşivdir. apk dosyaları Google Play gibi İnternet sitelerinde depolanır ve oradan gadget'ınıza indirilip kurulabilir. Şifreli değiller.

    Yapısı, geliştirici tarafından Dalvik veya ART sanal makine ortamında çalışacak şekilde hazırlanır. Bu makineler Android işletim sisteminde yerleşiktir ve cihazınızdaki tüm uygulamaları çalıştırırlar.

    Apk dosyasının kendisi, herhangi bir arşivleyiciyle açabileceğiniz normal bir arşivdir. Windows ortamı. Örneğin, WinRAR veya ZIP arşivlerini açan bir dosya yöneticisi. Bakalım içinde ne var.

    • Yalnızca program kodu olan dex uzantılı (adı herhangi bir şey olabilir) yürütülebilir bir dosya.
    • Yanındakiresources.arsc, bu programın kullanması gereken kaynakların kaydıdır. Bu bir XML yapısıdır.
    • AndroidManifest.xml, herhangi bir program için zorunlu bir dosyadır ve onunla ilgili ana bilgileri içeren bir bildirimdir. Burada örneğin programın sürümü, gerekli Android sürümü, geliştirici hakkında bilgiler, gerekli ekran çözünürlükleri vb. kaydedilebilir.
    • Res dizini, programın çalışması için ihtiyaç duyduğu dahili kaynakları içerir. Tüm resimler, simgeler, simgeler, haritalar vb. burada olabilir.
    • Lib dizini, programın çalışması için yerel kitaplıklardır, örneğin, C++ kodu. Kitaplıklar kullanılmıyorsa bu dizin eksik olabilir.
    • Varlıklar dizini, uygulama için ek kaynaklardır, bazen eksik de olabilir. Hangi kaynakların kullanılması gerektiğiresources.arsc dosyasında açıklanmıştır.
    • Dizin META-INF - program meta verileri. Örneğin, veri yollarını ve sağlama toplamlarını içerebilen MANIFEST.MF dosyası. RSA sertifika dosyaları, Manifest-Sürüm bilgileri ve benzeri hizmet bilgileri burada saklanabilir.

    Popüler APK Dosya Düzenleyicilerine Genel Bakış

    Daha önce de belirtildiği gibi, apk dosyasını herhangi bir ZIP arşivleyici ile açabilirsiniz. Bundan sonra, orada depolanan kaynakları görüntüleyebilirsiniz.

    Görüntülerde hiçbir sorun olmayacak, herhangi bir uygun programda açılabilirler. XML Biçimi Notepad++ gibi herhangi bir metin düzenleyiciyle açılır. Bu formatın nasıl çalıştığını biliyorsanız, bunlar zaten düzenlenebilir. Ancak derlenmiş yürütülebilir dosyalar için özel araçlar kullanmanız gerekecek.

    Tutulma Editörü. Bu, bir programcı için tam teşekküllü bir çapraz platform ortamıdır. Herhangi bir konuda geliştirebilirsiniz modern Diller ve pişir yürütülebilir dosyalar, Android için dahil. Ortam, çok sayıda eklenti kullanılarak esnek bir şekilde yapılandırılabilir.

    Android SDK'sı. Adından da anlaşılacağı gibi, bu özel bir geliştirme aracıdır. mobil programlar sadece android için. Bununla birlikte, başka birinin uygulamasının yürütülebilir dosyalarını kolayca kaynak koda dönüştürebilir veya kendi uygulamanızı sıfırdan yazabilirsiniz. Kodunuzu hata ayıklamak ve test etmek, programların farklı araçlarla uyumluluğunu test etmek vb. için çeşitli modülleri isteğe bağlı olarak bağlaması bakımından farklılık gösterir.

    APK indirici. Bu için bir eklenti Chrome tarayıcı, herhangi bir siteden apk programları indirmeyi ve yapılarını görüntülemeyi çok kolaylaştırır. Bunu yapmak için Google Play'de kayıtlı bile olmayabilirsiniz.

    APK Düzenleyici. Apk paketleri içindeki kaynaklarla çalışmanıza izin veren bir editör. Eclipse kadar güçlü değil ama pek çok basit şey yapıyor. Örneğin, programdan reklam bloklarını kaldırabilir, arayüzü Ruslaştırabilir, simgeleri veya dokuları kendinizinkiyle değiştirebilir ve çok daha fazlasını yapabilirsiniz.

    Android sistem uygulamalarının düzenlenmesi, çoğunlukla bir akıllı telefon, tablet veya başka bir cihazın kullanıcısı bununla kontrol edildiğinde gerçekleştirilir. işletim sistemi, akımı karşılamayı bırakır dış görünüşüretici veya satıcı tarafından cihaza yüklenen programlar. Diğer bir neden de sadece ilgili değişiklikler yapma ihtiyacı olmayabilir. grafik Tasarım Android uygulamaları, aynı zamanda çeşitli öğelerin konumunu ve temel işlevlerin performansını da etkiler.

    Kodda değişiklik yapmak için hemen hemen her dilde (tercihen Java ve C ++) temel programlama becerileri gerekir. Grafikleri değiştirmek için doğrudan eller ve bir grafik düzenleyicide çalışma yeteneği yeterli olacaktır.

    Öncelikle Android uygulamalarında sadece grafikleri mi değiştirmeniz gerektiğine yoksa sistemdeki öğelerin düzenini değiştirip kodda daha derin değişiklikler mi yapmanız gerektiğine karar vermelisiniz. Uygulamayla bir arşiv olarak çalışmayı veya komple sökme ve düzenleme.

    Grafikleri değiştir sistem uygulamaları android

    Orijinal grafikleri basitçe değiştirmek veya değiştirmek için (düğme renklerini değiştirme, resimleri yeniden çizme vb.), bir standarda sahip olmak yeterlidir. WinRAR arşivleyici. Aynı zamanda, kullanıcının cihaz üzerinde "root" haklarına sahip olması gerekir (buna benzer hesap Windows'ta yönetici) ve sahip olunması da arzu edilir alternatif kurtarma(CWM) ve kök gezgini (erişmek için dosya sistemi Android doğrudan cihazın kendisinde).

    Her şeyden önce, cihazda "USB hata ayıklamasını" etkinleştirmeniz, ardından bir USB kablosu kullanarak bilgisayara bağlamanız ve yüklemeniz gerekir. gerekli sürücüler. Genellikle üzerinde bulunurlar sanal disk bir bilgisayara bağlandığında görünen.

    O zaman ayrıca internetten ADB eklentisini indirmeniz gerekir. dosya yöneticisi. Bu eklenti tüm Android sistemini klasörlerle bağlı bir sürücü olarak görmenizi sağlar. Tüm sistem uygulamaları /system/app ve /system/framework konumunda bulunur. İstediğiniz uygulamayı bulduktan sonra, bilgisayarınıza kopyalamanız yeterlidir. Eklenti kurulu değilse, apk uzantılı uygulamayı çıkarılabilir bir SD karta ve ardından buradan bilgisayarınıza kopyalamak için kök gezgini kullanabilirsiniz.

    kopyaladıktan sonra istenen uygulama grafikleri düzenlemeye başlayabilirsiniz. Bu arada, Android uygulamalarındaki tüm resimler şuraya kaydedilir: png formatı, herhangi bir grafik düzenleyici tarafından kolayca açılır. ile uygulama dosyasını açarak WinRAR'ı kullanma, bir dizi klasör görebilirsiniz. Biz sadece res klasörüyle ilgileneceğiz, bu klasörde sırayla birçok farklı klasörler. Bunlardan sadece adında "çekilebilir" kelimesi bulunanlara ihtiyaç vardır.

    Şimdi cihaz tipimizi ve ekran çözünürlüğünü hatırlayalım. Bu bir akıllı telefonsa ve çözünürlük 240x320 ise, o zaman esas olarak çizilebilir ve çizilebilir-ldpi klasörleriyle ilgileneceğiz. Çözünürlük 320x480 ise - sırasıyla çizilebilir ve çizilebilir-mdpi klasörleri ve 480x800 çözünürlük için - çizilebilir ve çizilebilir-hdpi klasörleri. Bunlara ek olarak, genellikle adlarında "arazi" kelimesi bulunan klasörler de vardır - bunlar aşağıdakiler için grafiklerdir: portre modu, yani cihaz eğildiğinde.

    Elinizde bir tablet varsa, herhangi bir ekran çözünürlüğünde yalnızca çizilebilir ve çizilebilir-mdpi klasörleriyle ilgileneceğiz.

    Seçilen klasörleri bilgisayarınıza kopyalayarak, orijinal görüntüleri istediğiniz ve göze hoş gelen şekilde değiştirebilir veya yeniden renklendirebilirsiniz. 9.png çözünürlüğündeki resimlere özellikle dikkat etmelisiniz. Gerçek şu ki, böyle bir görüntünün çevresi boyunca, bütünlüğünün ihlali uygulamanın başarısız olmasına yol açacak olan özel işaretlere sahip bir piksel genişliğinde özel bir çerçeve vardır. Bu nedenle, bu tür dosyaları düzenlerken ekstra özen gösterilmelidir.

    Klasörü düzenledikten sonra apk uzantılı uygulamanın kendisi olan arşive geri yüklemeniz gerekiyor. Bu durumda WinRAR'da “sıkıştırma yok” seçeneğinin seçilmesi gerekmektedir.

    Düzeltilen uygulama, kök gezgini kullanılarak (önce dosya SD karta ve ondan cihaza kopyalanır) veya kurtarma işleminden çıktıktan sonra - hemen bilgisayardan / sisteme / uygulamaya veya / sistem / çerçeve klasörü . Ardından, kök gezgini veya ADB eklentisindeki uygun seçenekleri kullanarak dosya izinlerini ayarlamanız gerekir. 644 formatında olmalıdır.Cihazı yeniden başlattıktan sonra işin sonucunu görebilirsiniz. güncellenmiş uygulama.

    Sistem uygulamalarının kaynak kodunu düzenleme

    Sistem uygulamalarının kaynak kodunu düzenlemek için biraz daha uğraşmak gerekiyor. Uygulamayı üzerinde değişiklik yaptıktan sonra demonte edip build edebilmek için aşağıdaki adımlardan birkaçını gerçekleştirmeniz gerekecek.

    1) Gerekli yazılım paketini bilgisayardaki yerlerine kurun. son sürümler: Java SE Runtime Environment ve Android SDK Windows (uygulamalar ve bileşenleriyle çalışmak için programlar), APKtool veya APKManager veya Firmware_tool (sistem uygulamalarını parçalara ayırmak ve derlemek için üç programdan biri), NotePad ++ editörü (sistem uygulamalarında değişiklik yapmak için) kaynak Android sistem uygulamaları).

    2) Cihazda USB hata ayıklamasını etkinleştirin, bir USB kablosu kullanarak bilgisayara bağlayın, cihazla çalışmak için gerekli sürücüleri yükleyin.

    3) Uygulama kodu ile çalışmak için yukarıdaki programlardan birini kullanarak, telefondaki klasörü / sistem / çerçeveyi (tamamen) programın uygun klasörüne ve sistem uygulamalarını / sistem / uygulama klasöründen çıkarmanız gerekir. Örneğin, Firmware_tool programı için, telefondaki dosyalar uygun alt klasörlerdeki C: Firmwaretoolfw_project1_source2_system.img_unpacked klasörüne kopyalanmalıdır (uygulamalar uygulama klasörüne, dosyalar çerçeveden çerçeve klasörüne). Hem bu hem de diğer programları kullanırken, onlar için talimatları okuduğunuzdan emin olun.

    4) "referans çerçevesini" kurun, örn. uygulamaların kaynak koda dönüştürme (yani kod çözme) ve derleme (yani kod derleme) işlemlerinin gerçekleştirileceği bir dizi kural.

    Bu, sistem uygulamalarıyla çalışma hazırlığını tamamlar.

    Uygulamaların cihazdan kaldırılması ve geri yüklenmesi, “Android sistem uygulamalarında grafiklerin değiştirilmesi” bölümünde açıklanan prosedüre benzer şekilde gerçekleştirilir.

    Android uygulamalarının kodunu düzenlemek genellikle kullanılarak yapılır. Not Defteri düzenleyicisi++ - en uygunlarından biri metin editörleri, seçilen programlama dili için sözdizimi vurgulama seçeneğine sahiptir. Kural olarak, düzenlerken, seçilenleri kullanarak yol boyunca grafikleri de değiştirebilirsiniz. grafik editör.

    Düzenleme tamamlandıktan sonra, değiştirilen uygulama cihaza geri yüklenir ve cihazın kendisinin yeniden başlatılması gerekir. Uygulamaları cihaza indirmeden önce hata ayıklamak için daha gelişmiş düzenleyiciler, çeşitli öykünücüler kullanır, örneğin Google'dan Eclipse.