#!/usr/bin/python import os import subprocess def filechecksum(aaxfile): ret = subprocess.Popen(["ffprobe", "-v", "info", "-hide_banner", os.path.abspath(aaxfile)], stderr=subprocess.PIPE) grep = subprocess.Popen(["grep", "checksum"], stdin=ret.stderr, stdout=subprocess.PIPE) awk = subprocess.Popen(["awk", " { print $8 } "], stdin=grep.stdout, stdout=subprocess.PIPE) hashsum,out = awk.communicate() hashsum = hashsum.strip('\n') return hashsum def writeauthcode(hashsum): try: file = open(".authcode", "a") file.write(hashsum + os.linesep) except (IOError, OSError) as e: print "Can't write to .authcode" return 1 finally: file.close() return 0 def readauthcode(): try: if not os.path.isfile(".authcode"): open (".authcode", "w").close() with open(".authcode") as f: hashes = f.read().split() except (IOError, OSError) as e: print "Can't read in .authcode" return 1 finally: f.close() return hashes def newauthcode(checksum): rcwd = os.path.dirname(os.path.realpath(__file__)) command = "./rcrack *.rtc -h " command += checksum cmd = subprocess.Popen(command, cwd=rcwd, stdout=subprocess.PIPE, shell=True) grep = subprocess.Popen(["grep","-a", "hex"], stdin=cmd.stdout,stdout=subprocess.PIPE) key,stderr = grep.communicate() key = key.split() return key[2].split(':')[1] def checkagainstexisting(abytes,aaxfile): ret = subprocess.Popen(["ffprobe","-activation_bytes", abytes ,"-hide_banner" , os.path.abspath(aaxfile)], stderr=subprocess.PIPE) grep = subprocess.Popen(["grep", "mismatch", "-c"], stdin=ret.stderr, stdout=subprocess.PIPE) works,out = grep.communicate() return works.strip('\n') def getcorrectkey(aaxfile): authcodes = readauthcode() abyte = '' for x in authcodes: if (checkagainstexisting(x,aaxfile) == '0'): abyte = x return abyte if (abyte == ''): csum = filechecksum(aaxfile) abyte = newauthcode(csum) writeauthcode(abyte) return abyte if __name__ == "__main__": import sys if len(sys.argv) >= 2: args = sys.argv[1] else: print "I need an file name to lookup" sys.exit(1) checksum = filechecksum(args) out = newauthcode(checksum.strip()) if out is not None: print sys.argv[1], "Auth code is:", out else: print sys.argv[1], "no Authcode found"