host = platform.system().lower()
class Deny(Module, common.Filters, common.PackageManager):
name = "find NullPointerException"
description = "."
examples = """
dz> run app.package.deny com.android.browser
"""
license = "BSD (3 clause)"
path = [ "app" , "package" ]
permissions = [ "com.mwr.dz.permissions.GET_CONTEXT" ]
def add_arguments( self , parser):
parser.add_argument( "package" , help = "the identifier of the package to inspect" )
def attack( self ,component,package,flags):
act = None
cat = None
data = None
comp = (package,component.name)
extr = None
flgs = None
if (flags = = 'activity' ):
flgs = [ 'ACTIVITY_NEW_TASK' ]
intent = android.Intent(action = act,component = comp,category = cat,data_uri = None , extras = extr, flags = flgs, mimetype = None )
if intent.isValid():
if (flags = = 'activity' ):
self .getContext().startActivity(intent.buildIn( self ))
if (flags = = 'service' ):
self .getContext().startService(intent.buildIn( self ))
if (flags = = 'receiver' ):
self .getContext().sendBroadcast(intent.buildIn( self ))
else :
self .stderr.write( "[-] Invalid Intent!\n" )
def execute( self , arguments):
if arguments.package ! = None :
package = self .packageManager().getPackageInfo(arguments.package, common.PackageManager.GET_ACTIVITIES | common.PackageManager.GET_RECEIVERS | common.PackageManager.GET_PROVIDERS | common.PackageManager.GET_SERVICES)
application = package.applicationInfo
activities = self .match_filter(package.activities, 'exported' , True )
receivers = self .match_filter(package.receivers, 'exported' , True )
providers = self .match_filter(package.providers, 'exported' , True )
services = self .match_filter(package.services, 'exported' , True )
self .stdout.write( "Attack Surface:\n" )
self .stdout.write( " %d activities exported\n" % len (activities))
self .stdout.write( " %d broadcast receivers exported\n" % len (receivers))
self .stdout.write( " %d content providers exported\n" % len (providers))
self .stdout.write( " %d services exported\n" % len (services))
if (application.flags & application.FLAG_DEBUGGABLE) ! = 0 :
self .stdout.write( " is debuggable\n" )
if package.sharedUserId ! = None :
self .stdout.write( " Shared UID (%s)\n" % package.sharedUserId)
actions = [activities,receivers,services]
action_str = [ 'activity' , 'receiver' , 'service' ]
i = - 1
try :
for action in actions:
i + = 1
if len (action) > 0 :
for tmp in action:
try :
if len (tmp.name) > 0 :
self .stdout.write( " [+]%s name:%s\n" % (action_str[i],tmp.name))
self .attack(component = tmp, package = arguments.package, flags = action_str[i])
if host = = "windows" :
os.system( "pause" )
else :
input ('')
except Exception, e:
self .stdout.write( " error-->%s name:%s\n" % (action_str,tmp.name))
self .stdout.write( " errorcontent:%s\n" % e)
continue
except :
self .stdout.write( " error" )
else :
self .stdout.write( "No package specified\n" )
|