########################################################################## # # EXE to BAT converter Version 1.0 # # This will use the classic DEBUG method to HEX-encode an executable # # into a batch script file. Enjoy. # # # # rattle | awarenetwork | org # # ########################################################################## from sys import argv as a, exit, stdout die = lambda x,n: stdout.write(x+'\n') or exit(n) try: f,b = open(a[1],'rb'),open(a[2],'w') except: die('[!] usage: exe2bat.py ',1); FOOTER = ''.join(map(lambda x:"%%E%% "+x+">>T\n", ["RCX","%X ","N T.BIN","WDS:0","Q"])) FOOTER += 'DEBUGNUL\nMOVE T.BIN T.EXE 1>NUL 2>NUL\nT.EXE' FC,CX = 0, f.seek(0,2) or f.tell() if (CX > 0xFFFF): f.close(); b.close() die('[!] filesize exceeds 64kb, quitting.',1); f.seek(0,0) b.write('@ECHO OFF\nSET E=ECHO\nDEL T 1>NUL 2>NUL\n') for chunk in xrange(0x1000): t = f.read(16) or b.write(FOOTER%CX) or die("",0) if t.count('\0')==0x10: FC += 1 else: if FC > 0: b.write('%%E%% FDS:%X L %X 00>>T\n'%((chunk-FC)*0x10,FC*0x10)) FC = 0 b.write('%%E%% EDS:%X '%(chunk*0x10)) b.write(' '.join(map(lambda x:"%02X"%ord(x),t))+'>>T\n') ## , ####a ,d###########m, ,##', a# ###']#i a##".#"`# "####a,## #' .##' ##P' "" .d#P'.# .I "#:##:aaad##' ##P' ,ama, .aa, .ama.g mmm d#P' # .I' ##:#####" ###' d#I,`#..a#"PI ,#I"## I##' d## ]IaI' d#[ ###' ]P ""m#mP#']P .#I #" d##' `" .## ##I ]P[ .I'.# ##' # I[ ,##P ,ama ,ama, d#[ .ama.g ###' I#, .I' ]#, ,##B d# aI (##',##"#) d#I,`#. ## ,#I"## ### `####" '####" "##""#m" I## ### #[ ]P ""m#m##[.#I #" ###, _,aaaaaa,_ I## #" # ]P[ .I' ## ##' # I[ ###a,. .,add##########bma. )##, .]I I#, .I' )##a#B d# aI ########""' `#""""""# "#####P" `####" `###""##""#m"