[Soot-list] Regenerating Androidmanifest.xml file after Instrumenting Android

Modhi Alsobiehy m99m20 at hotmail.com
Sun Oct 19 04:47:33 EDT 2014


Hi Steven,




-- Duplicate node issue resolved, thank you!




-- The renaming issue with the apkHandler still not resolved! I checked the properties of the apk file and “full access” is granted for everyone! I'm not sure what I'm missing!!




-- Another issue with the regenerated manifest, I tried to replace it manually; repackaged, signed and zipaligned the apk; yet when I retested the code on the new apk and I got the following exception from the line: ProcessManifest pm = new ProcessManifest(apkFile);

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 763



at android.content.res.StringBlock.getShort(StringBlock.java:231)



at android.content.res.StringBlock.getString(StringBlock.java:91)



at android.content.res.AXmlResourceParser.getName(AXmlResourceParser.java:140)



at soot.jimple.infoflow.android.axml.parsers.AXMLPrinter2Parser.parseFile(Unknown Source)



at soot.jimple.infoflow.android.axml.AXmlHandler.<init>(Unknown Source)



at soot.jimple.infoflow.android.axml.AXmlHandler.<init>(Unknown Source)



at soot.jimple.infoflow.android.manifest.ProcessManifest.handle(Unknown Source)



at soot.jimple.infoflow.android.manifest.ProcessManifest.<init>(Unknown Source)

 I used the apktool to decode the apk and retrieved the regenerated manifest , this is part of it(1) vs the same part of the original(2):

(1)

<?xml version="1.0" encoding="utf-8"?>
<manifest package="epic.mychart.android" android:minSdkVersion="7" android:versionCode="9" android:versionName="3.0.1"
  xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-permission android:name="android.permission.READ_LOGS" />
    <permission android:name="epic.mychart.MyChart" android:protectionLevel="signature" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="epic.mychart.MyChart" />
    <uses-feature android:name="android.hardware.telephony" android:required="false" />
    <uses-feature android:name="android.hardware.touchscreen" android:required="true" />
    <uses-feature android:name="android.hardware.location" android:required="false" />
    <uses-feature android:name="android.hardware.location.network" android:required="false" />
    <application android:theme="@style/MyChartThemeNoTitle" android:label="MyChart" android:icon="@drawable/launchericon">






(2)

<?xml version="1.0" encoding="utf-8"?>
<manifest android:minSdkVersion="7" android:versionCode="9" android:versionName="3.0.1" package="epic.mychart.android"
  xmlns:android="http://schemas.android.com/apk/res/android">
    <permission android:name="epic.mychart.MyChart" android:protectionLevel="signature" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="epic.mychart.MyChart" />
    <uses-feature android:name="android.hardware.telephony" android:required="false" />
    <uses-feature android:name="android.hardware.touchscreen" android:required="true" />
    <uses-feature android:name="android.hardware.location" android:required="false" />
    <uses-feature android:name="android.hardware.location.network" android:required="false" />
    <application android:theme="@style/MyChartThemeNoTitle" android:label="MyChart" android:icon="@drawable/launchericon">



Could this be the cause of the exception?!


Thank you for your time and help!

-Modhi        


Sent from Windows Mail





From: Steven Arzt
Sent: ‎Thursday‎, ‎October‎ ‎16‎, ‎2014 ‎8‎:‎45‎ ‎AM
To: Modhi Alsobeihy
Cc: soot-list at CS.McGill.CA, soot-list at sable.mcgill.ca






Hi Modhi,


The problem with the duplicate node should have been fixed in one of my last commits from a couple of days ago. Please make sure that you are really using the newest version of the soot-infoflow-android project.

 

Concerning the renaming problem: The ApkHandler class modifies the original APK, i.e., the one you have loaded, and replaces it with the new version with the modified manifest file. Make sure that the original APK file is not write-protected and that you have permission to move / replace the file.

 

Best regards,

  Steven

 



Von: Modhi Alsobiehy [mailto:m99m20 at hotmail.com] 
Gesendet: Donnerstag, 16. Oktober 2014 15:13
An: Steven Arzt
Cc: soot-list at CS.McGill.CA; soot-list at sable.mcgill.ca
Betreff: Re: AW: [Soot-list] Regenerating Androidmanifest.xml file after Instrumenting Android

 



Hi Steven,


 


-- Thank you for your fast reply!


-- Something I forgot to mention, is it necessary to call:


 axmlh.getRoot().addChild(newAXmlNode);


because when I checked the new manifest, I found that the permission was added twice- I believe the first addition because of referencing the parent node-!!


 


-- This is the code I used after doing the required changes in the axmlhandler,

byte[] axmlBA = axmlh.toByteArray();

FileOutputStream fileOuputStream = new FileOutputStream(".\\AndroidManifest.xml"); 

fileOuputStream.write(axmlBA);

fileOuputStream.close();

List<File> fileList = new ArrayList<File>();

File newManifest = new File(".\\AndroidManifest.xml");

fileList.add(newManifest);

ApkHandler apkH = new ApkHandler(apk);

apkH.addFilesToApk(fileList);


and it is generating the following exception:


Exception in thread "main" java.lang.RuntimeException: could not rename the file D:\apks\location.apk to C:\Users\owner\AppData\Local\Temp\location.apk8599660687333204456.tmp

at soot.jimple.infoflow.android.axml.ApkHandler.addFilesToApk(Unknown Source)

at soot.jimple.infoflow.android.axml.ApkHandler.addFilesToApk(Unknown Source)

Thank you!



 


Sent from Windows Mail


 



From: Steven Arzt
Sent: ‎Thursday‎, ‎October‎ ‎16‎, ‎2014 ‎4‎:‎51‎ ‎AM
To: Modhi Alsobeihy
Cc: soot-list at CS.McGill.CA, soot-list at sable.mcgill.ca


 



Hi Modhi,

 

I am glad to hear that your original problem has been resolved.

 

What do you mean by “no luck”? What exactly happens? What exactly are you trying (i.e. give me the code)?`

 

Best regards,

  Steven

 



Von: soot-list-bounces at CS.McGill.CA [mailto:soot-list-bounces at CS.McGill.CA] Im Auftrag von Modhi Alsobiehy
Gesendet: Donnerstag, 16. Oktober 2014 07:32
Cc: soot-list at CS.McGill.CA; soot-list at sable.mcgill.ca
Betreff: Re: [Soot-list] Regenerating Androidmanifest.xml file after Instrumenting Android

 



Hi Steven,


 


I updated the jars and the problem resolved! Thank you!


 


Another thing please!


I have been trying to add the new manifest into the apk using the apkhandler but no luck! 


I would really appreciate any help!! 

 


-Best,


Modhi



On Oct 13, 2014, at 7:38 AM, "Steven Arzt" <Steven.Arzt at cased.de> wrote:



Hi Modhi,

 

I cannot reproduce your problem with the newest version of FlowDroid. I have fixed some issues with the XML manipulation classes over the last week, so please try again. This is my code:

 

             AXmlNode newAXmlNode = new AXmlNode("uses-permission", null, axmlh.getRoot());

             newAXmlNode.addAttribute(new AXmlAttribute<String>("name", "android.permission.READ_LOGS",

                           "http://schemas.android.com/apk/res/android"));

             axmlh.getRoot().addChild(newAXmlNode);

 

Make sure to get the namespace right, that was wrong in your code.

 

Best regards,

  Steven

 



Von: soot-list-bounces at CS.McGill.CA [mailto:soot-list-bounces at CS.McGill.CA] Im Auftrag von Modhi Alsobiehy
Gesendet: Montag, 13. Oktober 2014 00:42
An: Steven Arzt
Cc: soot-list at CS.McGill.CA; soot-list at sable.mcgill.ca
Betreff: Re: [Soot-list] Regenerating Androidmanifest.xml file after Instrumenting Android

 



Your quick response is highly appreciated!

 


-Thank you!


Modhi



On Oct 9, 2014, at 12:34 AM, "Modhi Alsobiehy" <m99m20 at hotmail.com> wrote:





Hi Steven,


I'm getting the following exception from the line calling toByteArray() and I couldn’t figure out how to fix it or what I have done wrong!!


Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

at pxb.android.axml.AxmlWriter$NodeImpl.write(AxmlWriter.java:238)

at pxb.android.axml.AxmlWriter$NodeImpl.write(AxmlWriter.java:254)

at pxb.android.axml.AxmlWriter.toByteArray(AxmlWriter.java:388)

at soot.jimple.infoflow.android.axml.AXmlHandler.toByteArray(Unknown Source)


this is the code responsible for a regenerating the manifest file, the axmlhandler instance is updated with the new axmlnode 


 


File apkFile = new File(apk);

ProcessManifest pm = new ProcessManifest(apkFile);

AXmlHandler axmlh = pm.getAXml(); 

AXmlNode newAXmlNode = new AXmlNode("uses-permission", null, axmlh.getRoot());

newAXmlNode.addAttribute(new AXmlAttribute("name", "android.permission.READ_LOGS", null));

AXmlNode temp = axmlh.getRoot().addChild(newAXmlNode);

byte[] axmlBA = axmlh.toByteArray();

FileOutputStream fileOuputStream = new FileOutputStream(".\\AndroidManifest.xml"); 

fileOuputStream.write(axmlBA);

fileOuputStream.close();


 Thank you,,


Modhi



 


 


 



From: Steven Arzt
Sent: ‎Monday‎, ‎September‎ ‎29‎, ‎2014 ‎7‎:‎20‎ ‎AM
To: Modhi Alsobeihy
Cc: soot-list at sable.mcgill.ca, soot-list at CS.McGill.CA


 



_______________________________________________
Soot-list mailing list
Soot-list at CS.McGill.CA
https://mailman.CS.McGill.CA/mailman/listinfo/soot-list
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.CS.McGill.CA/pipermail/soot-list/attachments/20141019/8c085218/attachment-0003.html 


More information about the Soot-list mailing list