def generateMainReport(theFileName, theReportData): report = open(theFileName, "w") report.write( '<html><head><title>TaintDroid Runner Report</title></head><body><p>' ) report.write('<h1>TaintDroid Runner Report</h1>') report.write('<h2>Parameters</h2>') report.write('<li><b>Working Directory</b>: %s' % theReportData['workingDir']) report.write('<li><b>Time</b>: %s-%s - %s-%s' % (Utils.getDateAsString(theReportData['startTime']), Utils.getTimeAsString(theReportData['startTime']), Utils.getDateAsString(theReportData['endTime']), Utils.getTimeAsString(theReportData['endTime']))) report.write('<li><b>numThreads</b>: %d' % theReportData['numThreads']) report.write('<li><b>emulatorStartPort</b>: %d' % theReportData['emulatorStartPort']) report.write('<li><b>cleanImageDir</b>: %s' % theReportData['cleanImageDir']) report.write('<h2>Apps</h2>') report.write( '<table><tr><th>ID</th><th>Package</th><th>APK Path</th><th>Call</th><th>Cipher</th><th>FS</th><th>Net</th><th>SSL</th><th>SMS</th><th>Errors</th></tr>' ) for app in theReportData['appList']: report.write( '<tr><td><li><a href="%s">%06d</a></li></td><td>%s</td><td>%s</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td>' % (app['reportName'], app['id'], app['appPackage'], app['appPath'], app['numCallAction'], app['numCipherUsage'], app['numFileSystem'], app['numNetwork'], app['numSSL'], app['numSMS'], app['numErrors'])) report.write('</table>') report.write('<h2>Logs</h2>') report.write('<li><a href="%s">Main Log</li>' % (theReportData['mainLogFile'])) for logFile in theReportData['threadLogFileList']: report.write('<li><a href="%s">%s</li>' % (logFile, logFile)) report.write('</p></body></html>')
def generateAppReport(theFileName, theResultEntry): # Inits app = theResultEntry['app'] log = None if theResultEntry.has_key('log'): log = theResultEntry['log'] # Write report report = codecs.open(theFileName, "w", "utf-8") report.write( '<html><head><title>TaintDroid Runner Report for %s</title></head><body><p>' % app.getPackage()) report.write('<h1>TaintDroid Runner Report for %s</h1>' % (app.getPackage())) report.write('<h2>Parameters</h2>') report.write('<li><b>Package</b>: %s' % app.getPackage()) report.write('<li><b>APK Name</b>: %s' % app.getApkFileName()) report.write('<li><b>Path</b>: %s' % app.getApk()) report.write('<li><b>Id</b>: %06d' % app.getId()) report.write('<li><b>steps</b>: %s' % SimulationSteps.getStepsAsString(theResultEntry['steps'])) report.write('<li><b>numMonkeyEvents</b>: %d' % theResultEntry['numMonkeyEvents']) report.write('<li><b>sleepTime</b>: %d' % theResultEntry['sleepTime']) report.write('<li><b>startTime</b>: %s-%s' % (Utils.getDateAsString(theResultEntry['startTime']), Utils.getTimeAsString(theResultEntry['startTime']))) report.write('<li><b>endTime</b>: %s-%s' % (Utils.getDateAsString(theResultEntry['endTime']), Utils.getTimeAsString(theResultEntry['endTime']))) report.write('<li><b>cleanImageDir</b>: %s' % theResultEntry['cleanImageDir']) report.write('<li><b>MD5 (hex)</b>: %s' % app.getMd5Hash()) report.write('<li><b>Sha256 (hex)</b>: %s' % app.getSha256Hash()) report.write('<li><b>maxLogcatSize</b>: %d' % theResultEntry['maxLogcatSize']) report.write('<h2>Log</h2>') if log is None: report.write('<h3>CallUsage</h3>') report.write('<h3>CipherUsage</h3>') report.write('<h3>FileSystem</h3>') report.write('<h3>Network</h3>') report.write('<h3>SSL</h3>') report.write('<h3>SMS</h3>') else: ReportGenerator.__generateReportLogTable( report, 'Call', ['Tag', 'DialString', 'Timestamp', 'StackTrace'], log.getLogEntryList(theType=CallActionLogEntry)) ReportGenerator.__generateReportLogTable( report, 'CipherUsage', ['Tag', 'Mode', 'PlainText', 'Timestamp', 'StackTrace'], log.getLogEntryList(theType=CipherUsageLogEntry)) ReportGenerator.__generateReportLogTable( report, 'FileSystem', [ 'Tag', 'Action', 'File', 'Id', 'Data', 'Timestamp', 'StackTrace' ], log.getLogEntryList(theType=FileSystemLogEntry)) ReportGenerator.__generateReportLogTable( report, 'Network', [ 'Tag', 'Action', 'Destination', 'Id', 'Data', 'Timestamp', 'StackTrace' ], log.getLogEntryList(theType=NetworkSendLogEntry)) ReportGenerator.__generateReportLogTable( report, 'SSL', [ 'Tag', 'Action', 'Destination', 'Data', 'Timestamp', 'StackTrace' ], log.getLogEntryList(theType=SSLLogEntry)) ReportGenerator.__generateReportLogTable( report, 'SMS', [ 'Tag', 'Action', 'Source', 'Destination', 'Dest Tag', 'Text', 'Timestamp', 'StackTrace' ], log.getLogEntryList(theType=SendSmsLogEntry)) report.write('<h2>Errors</h2>') if theResultEntry.has_key('badCancelationFlag'): report.write('<li>Thread could not be finished</li>') for error in theResultEntry['errorList']: try: report.write('<li>%s</li>' % str(error)) except UnicodeDecodeError, udErr: report.write('<li>Decode error: %s</li>' % str(udErr)) report.write('<li>') report.write(error) report.write('</li>')
def generateAppReport(theFileName, theResultEntry): # Inits app = theResultEntry['app'] log = None if theResultEntry.has_key('log'): log = theResultEntry['log'] # Write report report = codecs.open(theFileName, "w", "utf-8") report.write('<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>TaintDroid Runner Report for %s</title></head><body><p>' % app.getPackage()) report.write('<h1>TaintDroid Runner Report for %s</h1>' % (app.getPackage())) report.write('<h2>Parameters</h2>') report.write('<li><b>Package</b>: %s' % app.getPackage()) report.write('<li><b>APK Name</b>: %s' % app.getApkFileName()) report.write('<li><b>Path</b>: %s' % app.getApk()) report.write('<li><b>Id</b>: %06d' % app.getId()) report.write('<li><b>steps</b>: %s' % SimulationSteps.getStepsAsString(theResultEntry['steps'])) report.write('<li><b>numMonkeyEvents</b>: %d' % theResultEntry['numMonkeyEvents']) report.write('<li><b>sleepTime</b>: %d' % theResultEntry['sleepTime']) report.write('<li><b>startTime</b>: %s-%s' % (Utils.getDateAsString(theResultEntry['startTime']), Utils.getTimeAsString(theResultEntry['startTime']))) report.write('<li><b>endTime</b>: %s-%s' % (Utils.getDateAsString(theResultEntry['endTime']), Utils.getTimeAsString(theResultEntry['endTime']))) report.write('<li><b>cleanImageDir</b>: %s' % theResultEntry['cleanImageDir']) report.write('<li><b>MD5 (hex)</b>: %s' % app.getMd5Hash()) report.write('<li><b>Sha256 (hex)</b>: %s' % app.getSha256Hash()) report.write('<li><b>maxLogcatSize</b>: %d' % theResultEntry['maxLogcatSize']) report.write('<h2>Log</h2>') if log is None: report.write('<h3>CallUsage</h3>') report.write('<h3>CipherUsage</h3>') report.write('<h3>FileSystem</h3>') report.write('<h3>Network</h3>') report.write('<h3>SSL</h3>') report.write('<h3>SMS</h3>') else: ReportGenerator.__generateReportLogTable(report, 'Call', ['Tag', 'DialString', 'Timestamp', 'StackTrace'], log.getLogEntryList(theType=CallActionLogEntry) ) ReportGenerator.__generateReportLogTable(report, 'CipherUsage', ['Tag', 'Mode', 'PlainText', 'Timestamp', 'StackTrace'], log.getLogEntryList(theType=CipherUsageLogEntry) ) ReportGenerator.__generateReportLogTable(report, 'FileSystem', ['Tag', 'Action', 'File', 'Id', 'Data', 'Timestamp', 'StackTrace'], log.getLogEntryList(theType=FileSystemLogEntry) ) ReportGenerator.__generateReportLogTable(report, 'Network', ['Tag', 'Action', 'Destination', 'Id', 'Data', 'Timestamp', 'StackTrace'], log.getLogEntryList(theType=NetworkSendLogEntry) ) ReportGenerator.__generateReportLogTable(report, 'SSL', ['Tag', 'Action', 'Destination', 'Data', 'Timestamp', 'StackTrace'], log.getLogEntryList(theType=SSLLogEntry) ) ReportGenerator.__generateReportLogTable(report, 'SMS', ['Tag', 'Action', 'Source', 'Destination', 'Dest Tag', 'Text', 'Timestamp', 'StackTrace'], log.getLogEntryList(theType=SendSmsLogEntry) ) report.write('<h2>Errors</h2>') if theResultEntry.has_key('badCancelationFlag'): report.write('<li>Thread could not be finished</li>') for error in theResultEntry['errorList']: try: report.write('<li>%s</li>' % str(error)) except UnicodeDecodeError, udErr: report.write('<li>Decode error: %s</li>' % str(udErr)) report.write('<li>') report.write(error) report.write('</li>')
def generateMainReport(theFileName, theReportData): report = open(theFileName, "w") report.write('<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>TaintDroid Runner Report</title></head><body><p>') report.write('<h1>TaintDroid Runner Report</h1>') report.write('<h2>Parameters</h2>') report.write('<li><b>Working Directory</b>: %s' % theReportData['workingDir']) report.write('<li><b>Time</b>: %s-%s - %s-%s' % (Utils.getDateAsString(theReportData['startTime']), Utils.getTimeAsString(theReportData['startTime']), Utils.getDateAsString(theReportData['endTime']), Utils.getTimeAsString(theReportData['endTime']))) report.write('<li><b>numThreads</b>: %d' % theReportData['numThreads']) report.write('<li><b>emulatorStartPort</b>: %d' % theReportData['emulatorStartPort']) report.write('<li><b>cleanImageDir</b>: %s' % theReportData['cleanImageDir']) report.write('<h2>Apps</h2>') report.write('<table><tr><th>ID</th><th>Package</th><th>APK Path</th><th>Call</th><th>Cipher</th><th>FS</th><th>Net</th><th>SSL</th><th>SMS</th><th>Errors</th></tr>') for app in theReportData['appList']: report.write('<tr><td><li><a href="%s">%06d</a></li></td><td>%s</td><td>%s</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td>' % (app['reportName'], app['id'], app['appPackage'], app['appPath'], app['numCallAction'], app['numCipherUsage'], app['numFileSystem'], app['numNetwork'], app['numSSL'], app['numSMS'], app['numErrors'])) report.write('</table>') report.write('<h2>Logs</h2>') report.write('<li><a href="%s">Main Log</li>' % (theReportData['mainLogFile'])) for logFile in theReportData['threadLogFileList']: report.write('<li><a href="%s">%s</li>' % (logFile, logFile)) report.write('</p></body></html>')