将两个apk文件绑定为一个

图片

我决定以某种方式将两个apk文件粘合在一起,但是在Internet上没有太多有关如何执行此操作的信息。 然后配备了适用于Android的Ahmyth Trojan(其源代码 ),开始了用自己的双手粘合apk的世界的旅程。 简要介绍一下...

简要介绍问题的实质:

有两个APK文件(假设1.apk和2.apk)。 任务是创建3.apk,它将粘贴1和2 apk(并将执行其功能)。

总结(Python代码):


我们有:


1.文件夹apk-用于包含apk的文件;
2.文件夹tmp-用于反编译的文件;
3. Tools文件夹-带有其他软件(例如apktool.jar,sign.jar,testkey)。

首先,我们确定工作所在的当前文件夹以及将要反编译的文件夹:

#!/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 

然后,我们将apk文件反编译到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 ) 

此步骤之后,我们有两个带有反编译文件的文件夹/ tmp / 1和/ tmp / 2。 现在,有趣的部分是宣言的结合

 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() 

现在按以下顺序排序:

我们在/ tmp / 1文件夹中找到AndroidManifest.xml文件:

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

在此文件中,我们找到所有声明的服务和类:

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

在AndroidManifest.xml文件夹/ tmp / 1中,将所有内容从标记“ <uses-permission”复制到标记“ <application”。 这是程序所需的所有权限:

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

我们在/ tmp / 2文件夹中找到AndroidManifest.xml文件:

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

之后,我们需要将所有这些都组合到一个文件中 ,以便一切就绪。

新清单 (new_mainfest2)包括:

  1. 2.apk应用程序的AndroidManifest.xml的开头(从开始到结束具有必要的权限);
  2. 我们在此处添加应用程序权限1.apk(permission1);
  3. 将2.apk应用程序的AndroidManifest.xml中的所有内容从“ <application”添加到“

添加应用程序1.apk(service1)的所有服务;
添加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>")] 

覆盖/ tmp / 2文件夹中的AndroidManifest.xml:

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

这样就完成了AndroidManifest的构建。 仍然需要将所有类从/ tmp / 1复制到/ tmp / 2。 更准确地说,我们将复制smali文件夹(这是所有应用程序类)和unknown文件夹:

 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 

好吧,总之,您需要将所有这些收集到一个apk文件中,签名:

  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 ) 

结果,3.apk文件出现在tmp文件夹中,这是其他两个文件的粘合。

PS在该实施例中,当粘贴两个应用程序的许可时,不检查它们的比较并仅添加不相比较的那些。 许可证声明中可能(并且将有重复)。 但是在此阶段,一切都可以重复进行。

资料来源:

AhMyth-Android-RAT

Source: https://habr.com/ru/post/zh-CN422885/


All Articles