1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
#!/usr/bin/env python
import logging
import datetime
import sys
PATH_INSTALL = "./"
sys.path.append(PATH_INSTALL)
from optparse import OptionParser
from androguard.core.analysis import auto
from androguard.core.androconf import set_debug
option_0 = {'name': ('-d', '--directory'), 'help': 'directory input', 'nargs': 1}
option_1 = {'name': ('-v', '--verbose'), 'help': 'add debug', 'action': 'count'}
options = [option_0, option_1]
logger = logging.getLogger("main")
console_handler = logging.StreamHandler()
console_handler.setFormatter(logging.Formatter("%(message)s"))
logger.addHandler(console_handler)
logger.setLevel(logging.INFO)
def test(got, expected):
if got == expected:
prefix = ' OK '
else:
prefix = ' X '
print '%s got: %s expected: %s' % (prefix, repr(got), repr(expected)),
return (got == expected)
class AndroLog(object):
def __init__(self, id_file, filename):
self.id_file = id_file
self.filename = filename
def dump(self, msg):
now = datetime.datetime.now()
str_date = now.strftime("%Y-%m-%d %H:%M:%S ")
logger.info(str_date + "%s[%d]: %s" % (self.filename, self.id_file, msg))
def error(self, msg):
now = datetime.datetime.now()
str_date = now.strftime("%Y-%m-%d %H:%M:%S ")
logger.info(str_date + "ERROR %s[%d]: %s" % (self.filename, self.id_file, msg))
import traceback
traceback.print_exc()
class MyARSCAnalysis(auto.DirectoryAndroAnalysis):
def __init__(self, directory):
super(MyARSCAnalysis, self).__init__(directory)
def filter_file(self, log, fileraw):
ret, file_type = super(MyARSCAnalysis, self).filter_file(log, fileraw)
if file_type != "APK" and file_type != "ARSC":
return (False, None)
return (ret, file_type)
def analysis_arsc(self, log, arsc):
log.dump("%s" % str(arsc))
return False
def analysis_apk(self, log, apk):
if apk.is_valid_APK():
log.dump("%s" % str(apk.get_android_resources()))
return False
def crash(self, log, why):
log.error(why)
def main(options, arguments):
if options.verbose:
set_debug()
if options.directory:
settings = {
"my": MyARSCAnalysis(options.directory),
"log": AndroLog,
"max_fetcher": 3,
}
aa = auto.AndroAuto(settings)
aa.go()
if __name__ == "__main__":
parser = OptionParser()
for option in options:
param = option['name']
del option['name']
parser.add_option(*param, **option)
options, arguments = parser.parse_args()
sys.argv[:] = arguments
main(options, arguments)
|