#!/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"
|