
рдореИрдВрдиреЗ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рджреЛ рдПрдкреАрдХреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ gluing рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рдПрдВрдбреНрд░реЙрдЗрдб (рдЗрд╕рдХреЗ
рд╕реНрд░реЛрдд ) рдХреЗ рд▓рд┐рдП рдЕрд╣реНрдорд┐рде рдЯреНрд░реЛрдЬрди рдХреЗ рд╕рд╛рде рд╕рд╢рд╕реНрддреНрд░, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╣рд╛рдереЛрдВ рд╕реЗ gluing APK рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рдпрд╛рддреНрд░рд╛ рд╢реБрд░реВ рд╣реБрдИред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЖрдЧреЗ ...
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:
рджреЛ рдПрдкреАрдХреЗ рдлрд╛рдЗрд▓реНрд╕ рд╣реИрдВ (рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ 1.apk рдФрд░ 2.apk)ред рдХрд╛рд░реНрдп 3.apk рдмрдирд╛рдирд╛ рд╣реИ, рдЬреЛ 1 рдФрд░ 2 рдПрдкреАрдХреЗ (рдФрд░ рдЙрдирдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдЧрд╛) рд╕реЗ рдЪрдордХреЗрдЧрд╛ред
рд╕рд╛рд░рд╛рдВрд╢ рдореЗрдВ (рдЕрдЬрдЧрд░ рдХреЛрдб):
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ:
1. рдлрд╝реЛрд▓реНрдбрд░
apk - рдПрдкреАрдХреЗ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП;
2. рдлрд╝реЛрд▓реНрдбрд░
tmp - рд╡рд┐рдШрдЯрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП;
3.
рдЯреВрд▓ рдлреЛрд▓реНрдбрд░ - рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде (рдЬреИрд╕реЗ рдХрд┐ APKtool.jar, sign.jar, testkey)ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╡рд░реНрддрдорд╛рди рдлреЛрд▓реНрдбрд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рдлреЛрд▓реНрдбрд░ рдЬрд╣рд╛рдВ рд╣рдо рд╡рд┐рдШрдЯрд┐рдд рд╣реЛрдВрдЧреЗ:
рдлрд┐рд░ рд╣рдо 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()
рдЕрдм рдЗрд╕ рдХреЛрдб рдореЗрдВ:рд╣рдореЗрдВ AndroidManifest.xml рдлрд╝рд╛рдЗрд▓ / tmp / 1 рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдорд┐рд▓рддреА рд╣реИ:
mainfest1 = open(apkFolder1+"/AndroidManifest.xml", "r").read()
рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рдо рд╕рднреА рдШреЛрд╖рд┐рдд рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдкрд╛рддреЗ рд╣реИрдВ:
service1 = mainfest1[(mainfest1.find("</activity>")+len("</activity>")):mainfest1.find("</application>")]
AndroidManifest.xml рдлрд╝реЛрд▓реНрдбрд░ / tmp / 1 рдореЗрдВ, "<рдЙрдкрдпреЛрдЧ-рдЕрдиреБрдорддрд┐" рдЯреИрдЧ рд╕реЗ рдЯреИрдЧ "<рдПрдкреНрд▓рд┐рдХреЗрд╢рди" рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХреЙрдкреА рдХрд░реЗрдВред рдпрд╣рд╛рдВ рдЙрди рд╕рднреА рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
permission1=mainfest1[ mainfest1.find("<uses-permission"):mainfest1.find("<application ")]
рд╣рдореЗрдВ AndroidManifest.xml рдлрд╝рд╛рдЗрд▓ / tmp / 2 рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдорд┐рд▓рддреА рд╣реИ:
mainfest1 = open(apkFolder2+"/AndroidManifest.xml", "r").read()
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ
рдпрд╣ рд╕рдм рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рд╕рдм рдХреБрдЫ рдЬрдЧрд╣ рдкрд░ рд╣реЛред
рдирдП рдкреНрд░рдХрдЯ (new_mainfest2) рдореЗрдВ рдирд┐рдореНрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- AndroidManifest.xml рдХреА рд╢реБрд░реБрдЖрдд 2.apk рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рд╢реБрд░реБрдЖрдд рд╕реЗ рдЕрдВрдд рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрдорддрд┐рдпрд╛рдВ);
- рд╣рдо рдпрд╣рд╛рдВ рдЖрд╡реЗрджрди рдЕрдиреБрдорддрд┐ 1.apk (рдЕрдиреБрдорддрд┐ 1) рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ;
- "<рдПрдкреНрд▓реАрдХреЗрд╢рди" рд╕реЗ 2.apk рдЖрд╡реЗрджрди рдХреЗ AndroidManifest.xml рдореЗрдВ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЬреЛрдбрд╝реЗрдВ "
рдЖрд╡реЗрджрди рдХреА рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ 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>")]
рдУрд╡рд░рд░рд╛рдЗрдЯрд┐рдВрдЧ AndroidManifest.xml / tmp / 2 рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ:
рдпрд╣ AndroidManifest рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рднреА рд╡рд░реНрдЧреЛрдВ / tmp / 1 / to / tmp / 2 рд╕реЗ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рд╣рдо
рд╕реНрдорд╛рд▓реА рдлрд╝реЛрд▓реНрдбрд░реНрд╕ (рдпрд╣рд╛рдВ рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд░реНрдЧ рд╣реИрдВ) рдФрд░
рдЕрдЬреНрдЮрд╛рдд рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВрдЧреЗ:
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 рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдЬреЛ рдЕрдиреНрдп рджреЛ рдХреА gluing рд╣реИред
PS рдЗрд╕ рдЕрд╡рддрд╛рд░ рдореЗрдВ, рдЬрдм рджреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЛ рдирдЬрд╝рд░рдЕрдВрджрд╛рдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдХреА рддреБрд▓рдирд╛ рдФрд░ рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЪреЗрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд░рдорд┐рдЯ рдХреА рдШреЛрд╖рдгрд╛ рдореЗрдВ рджреЛрд╣рд░рд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рд╣реЛрдЧрд╛)ред рд▓реЗрдХрд┐рди рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдирдХрд▓ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ:
тЖТ
рдЕрд╣реНрдорд┐рде-рдПрдВрдбреНрд░реЙрдЗрдб-рдЖрд░рдПрдЯреА