
我决定以某种方式将两个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)。
首先,我们确定工作所在的当前文件夹以及将要反编译的文件夹:
然后,我们将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()
现在按以下顺序排序:我们在/ 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)包括:
- 2.apk应用程序的AndroidManifest.xml的开头(从开始到结束具有必要的权限);
- 我们在此处添加应用程序权限1.apk(permission1);
- 将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:
这样就完成了AndroidManifest的构建。 仍然需要将所有类从/ tmp / 1复制到/ tmp / 2。 更准确地说,我们将复制
smali文件夹(这是所有应用程序类)和
unknown文件夹:
subprocess.call("cp -rn "+apkFolder1+"/smali "+apkFolder2 , shell=True )
好吧,总之,您需要将所有这些收集到一个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