From ba3fa4a1f0c78a360c0d7b4224dc2d3c6a5f37f8 Mon Sep 17 00:00:00 2001 From: drubicza Date: Sat, 14 Oct 2017 20:56:59 +0800 Subject: [PATCH] Refactoring and adding source code --- endec_arg.py | 180 ++++++++++++++++++++++++++++++++++++++++++++ endec_arg.pyc | Bin 5744 -> 5948 bytes endec_list.py | 197 +++++++++++++++++++++++++++++++++++++++++++++++++ endec_list.pyc | Bin 6312 -> 6051 bytes 4 files changed, 377 insertions(+) create mode 100755 endec_arg.py create mode 100755 endec_list.py diff --git a/endec_arg.py b/endec_arg.py new file mode 100755 index 0000000..57e35f1 --- /dev/null +++ b/endec_arg.py @@ -0,0 +1,180 @@ +#!/bin/env python +import re +import base64 +import hashlib +import binascii +import argparse +from sys import argv +from itertools import cycle +from string import lowercase, uppercase + +author = ''' + ===================================================== + =================================================== + =-=-=-=-=-=-=-=- B3yeZ Tools -=-=-=-=-=-=-=-= + =-=-=-=-=-=- Author : Bayu Fedra A -=-=-=-=-=-= + =================================================== + ===================================================== + ____ ______ _______ _ + | _ \\ |___ / |__ __| | | + | |_) | ___ _ _ ___ / / | | ___ ___ | |___ + | _ < / _ \\ | | |/ _ \\ / / | |/ _ \\ / _ \\| / __| + | |_) | __/ |_| | __// /__ | | (_) | (_) | \\__ \\ + |____/ \\___|\\__, |\\___/_____| |_|\\___/ \\___/|_|___/ + __/ | + |___/ bayufedraaxtkja@gmail.com +''' +b3yez = '{+} Thank You dude, please keep support, FB : https://www.facebook.com/bayufedra / Instagram : http://instagram.com/bayufedraa {+}' + + +def fn_result(s_res): + print '[+] Result => {}'.format(s_res) + #print b3yez + +def fn_error(s_msg): + print '[-] Error, not {} strings'.format(s_msg) + +def fn_main(): + print author + halah = argparse.ArgumentParser(description=' [+] Tools to Encoding, Decoding and Hashing [+]') + halah.add_argument('str', help='Strings') + halah.add_argument('-e', action='store_true', help='encode strings') + halah.add_argument('-d', action='store_true', help='decode strings') + halah.add_argument('-brute', action='store_true', help='Bruteforce char') + halah.add_argument('-key', type=int, action='store', help='Key for char caessar cipher') + halah.add_argument('-k', type=str, action='store', help='Key for char xor') + halah.add_argument('-b64', action='store_true', help='Base64 encryptions') + halah.add_argument('-b32', action='store_true', help='Base32 encryptions') + halah.add_argument('-b16', action='store_true', help='Base16 encryptions') + halah.add_argument('-hex', action='store_true', help='Hexadecimal') + halah.add_argument('-dec', action='store_true', help='Decimal') + halah.add_argument('-bin', action='store_true', help='Binary') + halah.add_argument('-rev', action='store_true', help='Reverse Strings') + halah.add_argument('-rot13', action='store_true', help='ROT 13 Cipher') + halah.add_argument('-caes', action='store_true', help='Caessar Cipher') + halah.add_argument('-xor', action='store_true', help='XOR Cipher') + halah.add_argument('-md5', action='store_true', help='MD5 Hashing') + halah.add_argument('-sha1', action='store_true', help='SHA1 Hashing') + halah.add_argument('-sha256', action='store_true', help='SHA256 Hashing') + halah.add_argument('-sha512', action='store_true', help='SHA512 Hashing') + wibu = halah.parse_args() + + if wibu.b64 and wibu.e: + fn_result(base64.b64encode(wibu.str)) + + if wibu.b64 and wibu.d: + try: + fn_result(base64.b64decode(wibu.str)) + except: + fn_error('base64') + + if wibu.b32 and wibu.e: + fn_result(base64.b32encode(wibu.str)) + + if wibu.b32 and wibu.d: + try: + fn_result(base64.b32decode(wibu.str)) + except: + fn_error('base32') + + if wibu.b16 and wibu.e: + fn_result(base64.b16encode(wibu.str)) + + if wibu.b16 and wibu.d: + try: + fn_result(base64.b16decode(wibu.str)) + except: + fn_error('base16') + + if wibu.hex and wibu.e: + fn_result(binascii.hexlify(wibu.str)) + + if wibu.hex and wibu.d: + try: + fn_result(binascii.unhexlify(wibu.str)) + except: + fn_error('hexadecimal') + + if wibu.dec and wibu.e: + fn_result(''.join([str(ord(c)) for c in wibu.str])) + + if wibu.dec and wibu.d: + try: + fn_result(re.sub('1?..', lambda m: chr(int(m.group())), wibu.str)) + except: + fn_error('decimal') + + if wibu.bin and wibu.e: + fn_result(bin(int(binascii.hexlify(wibu.str), 16))) + + if wibu.bin and wibu.d: + try: + fn_result(binascii.unhexlify('%x' % int(wibu.str, 2))) + except: + fn_error('binary') + + if wibu.rev: + fn_result(wibu.str[::-1]) + + if wibu.rot13: + if wibu.rot13 or wibu.e or wibu.d: + fn_result(wibu.str.encode('rot_13')) + + if wibu.caes and wibu.key: + en = wibu.str + n = wibu.key + hasil = '' + for x in range(len(en)): + if en[x].isalpha(): + if en[x].islower(): + hasil = hasil + lowercase[(lowercase.find(en[x]) + n) % 26] + else: + hasil = hasil + uppercase[(uppercase.find(en[x]) + n) % 26] + else: + hasil = hasil + en[x] + fn_result(hasil) + + if wibu.caes and wibu.brute: + for i in range(26): + hasil = '' + for x in range(len(wibu.str)): + if wibu.str[x].isalpha(): + if wibu.str[x].islower(): + hasil = hasil + lowercase[(lowercase.find(wibu.str[x]) + i) % 26] + else: + hasil = hasil + uppercase[(uppercase.find(wibu.str[x]) + i) % 26] + else: + hasil = hasil + wibu.str[x] + print '{} => [+] Result => {}'.format(str(i), hasil) + + if wibu.xor and wibu.brute: + for i in range(256): + print '{} => [+] Result => {}'.format(str(i), ''.join([chr(ord(l) ^ i) for l in wibu.str])) + + if wibu.xor and wibu.k: + string = wibu.str + n = wibu.k + hasil = '' + for c, k in zip(string, cycle(n)): + hasil += chr(ord(c) ^ ord(k)) + fn_result(hasil) + + if wibu.md5: + if wibu.md5 or wibu.e: + fn_result(hashlib.md5(wibu.str.encode('utf')).hexdigest()) + + if wibu.sha1: + if wibu.sha1 or wibu.e: + fn_result(hashlib.sha1(wibu.str.encode('utf')).hexdigest()) + + if wibu.sha256: + if wibu.sha256 or wibu.e: + fn_result(hashlib.sha256(wibu.str.encode('utf')).hexdigest()) + + if wibu.sha512: + if wibu.sha512 or wibu.e: + fn_result(hashlib.sha512(wibu.str.encode('utf')).hexdigest()) + + +if __name__ == '__main__': + fn_main() diff --git a/endec_arg.pyc b/endec_arg.pyc index 617b09bf283c5ea6ab961778b2f348a4835a697c..34fef532e0798eb03770bec1826275d25286ebfc 100644 GIT binary patch literal 5948 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 literal 5744 zcmbtYOLG(16+SIl@&g!*0UH|znuoy#KadQD0rT(!@MLOcQidweXdteZ`r2w)FL$@V znmARdkSy5DY*NV|$fL5%BKuSp*^ump%~X=@uuskGsN_56cFR{7Cl%6?Tlb#tywAC( z8kb%M$% zs-!8Grb;K}I>};>48r6X-L5gC=l@+{2^}2;46U2LLBy zg+~O|(i$E#;UPoqQB&MrOeIJT~*(Fms}fd3ocx zn0b%QJa3t?$^SMs^R1XkQ0ZiwWMl@M*$$2y(PTTKXuy1`jd^(^+riOXV>8)~IGWSs zKNDfp=2?e(opNVr^I{~q@MxHF!=%uv*Qs=tR3E8xq_|t7?-j6bJm^^FY@aa-3AHa` zpI&q{M@V&03H>`m?hX2>E;ee9K?L2g?DED7aq%X*_@d?FDEWs{QC+bZ<@2uEli}W? zrwMk+R2QWO;w2GBdP=EgR>YAlOoiJll{+uma874Qou~fSv@CCwQk=IrcB+($^LBy! z-=(5-p(1iae3JRQ@aV^syTp5Si3UqJu0;MX)A4>< z_8V!GQl@@6%yMN(SM$!Bxjz)?X2lS-`BqSrIP!ytFIZPea2c2zUwIn#QVKcIy31cg=-5I}= z;99uE_Z{N9D+fhR$$)#02K33;_$s{|mG3?Bhq|JOhq^X@AQ3O>h(9zUzR)^{Hs!AI z2~*eQ1YToacs+|BX|ca`F7x3On}*3hcN!*tAtqegA`iL9+eb$h>O)5#H zTcmI-@qn0>Cx|f~HoobK@;68R)o#w;90dtkK%u7WR5-W0!mHhp!g&lo(KAoM{aB%< z>{N&x?dIXLSm6TsUyGgv3VszU)RdhH7j{?pH7mqx-Tjg8;XTj$7p{*+5?F?Kvti#=uJ72hZIb_wi*J(>?dA$D&Q1HpRHo}+ zgCSb7uUmlahwXBpirggs0$N!Cm%g@G0GAfsS{cQjd4)|Z0i48#FJ=}+a>q_KEvqwN zW82KOrI)d!Nde0ibHWMJDhTW!3-c0^Q3{wcB97_%L(m^;QP_tN2rFB-joEx(fgBUW zVWCGXlTgmEh)O*1jft&{#KbrLvcu-36&jR0`e>Eg$k`0nOU~`JisO|h3bl&e6Z`~c z=7$%4WIrf6)ph&RTEli5t{SuJWrag$uParz101`WACB2~=g^hKFsujHCMTafc`~u; z6jZ)eTW4jHEi*{u`_&+H)_kWD34q^=N$t#z4fEk1xZ$dx;CuDZt5t)G*xR37coZF* zux8(>7HY0nT^q9(lwR3R)wLI$pa?4ShB);Ugnr0#ps33AuoH{>p$|L=c%qD}FpVFl zz&64jEQ7G-tCi4isNfxJ6&q1Dlx)kmg1BsS8(}r$dA|{=U_X{~yjrdK1!WhCjvufG zY`#RfZEz+Bxz7+JaQ50zU zk`15zrp}tSo1eiiLz;aW4nlKp!q#j{6}HZ9&n=1bczpU!2XfAnuBBK-tUFQd)pm?tm|6vN4Qh z3+B2=XD+FrQ4Rz9#!WjoF2wOi_8s4^`D1pq7TS4Tp17BGV?l-f8w-jQvz&f|A)`() zUkEmmT4ZibOceNG$$xx6<{9b74LqSmTlh~6{Ii1ieFWe8@+AFeggNCr6^g$6qRP_4 zYksX!*N)b409pI0G6S&!*wI?cSr`UIo zGwktkm7_4c`Nr((c8g`C+jv|UMUk#Vv#n&NyrEc|Z3hS01r+Tyc8@b8p*F(Rkvm|L z5b!=x$AQ*^Lzh(OXnQ9pc%B@HB8E`e%ZKc=uUU1$mO!8-PL#a9c%kw`eh*k;PCc)h z!IC6f29rGbCC_=hG<+WNNtpH58WmLyzt3*?0v4UJQw+JW9oJofi^8yU0E8uOd>L)x zHiLmop(kFxAr>({PjcUB(9Dq3rFYwCZk0-8|YUn;@sQIo=S|hJr1D!+BD5j2-2EROY zT+t=dMp_|qj3)+98BxF^noEK7a^8HWx~79JgTk7%%UqST0_X2q(6~|V+s$JB%#Rz)ndfkO$XWgIhx8!6i=XF%>T{hqlk#u7|Et za~oxKlZ^$(aNldipMI;?>OGK7q!WGC!Nj1&pA*)JXr=eB-4lDkdjx+;@FuPQZI_0< z(;}0!j#~R7`I8X^K18%`D{b{#?||M7zN4_#jZYdD;jeWzaTXM|d=Ru_xF57e6Qha4 e*71neYaO?ST2iO1Goq=_>az}8`=N99)xQA-7_|BT diff --git a/endec_list.py b/endec_list.py new file mode 100755 index 0000000..9029724 --- /dev/null +++ b/endec_list.py @@ -0,0 +1,197 @@ +#!/bin/env python +import os +import re +import sys +import base64 +import hashlib +import binascii +import platform +import itertools +from itertools import cycle +from string import lowercase, uppercase + +str_menu = ''' + [1] Base64 + [2] Base32 + [3] Base16 + [4] Binary + [5] Hexadecimal + [6] Decimal + [7] ROT13 + [8] Caesar + [9] Reversed Text +[10] MD5 Hash +[11] SHA1 Hash +[12] SHA256 Hash +[13] SHA512 Hash +[14] Xor Bruteforce +[15] Xor With Key +[16] Cancel + +[i] Pilihan : ''' + +str_endeop = ''' +[1] Encode +[2] Decode + +[i] Opsi : ''' + +str_cont = ''' +[1] Lanjut +[2] Tidak + +[i] Pilihan: ''' + +l_edr = ['[+] Hasil : ',\ + '[i] Text to Encode : ',\ + '[i] Text to Decode : '] + +def fn_x64(i_opt): + a = [{1:base64.b64encode, 2:base64.b64decode},\ + {1:base64.b32encode, 2:base64.b32decode},\ + {1:base64.b16encode, 2:base64.b16decode}] + b = int(raw_input(str_endeop)) + print '' + if (b > 2): sys.exit() + s = raw_input(l_edr[b]) + print l_edr[0] + a[i_opt][b](s) + +def fn_hex(): + a = int(raw_input(str_endeop)) + print '' + if (a > 2): sys.exit() + b = raw_input(l_edr[a]) + return a,b + +def fn_csr(n, s_csr): + s_out = '' + for x in xrange(len(s_csr)): + if s_csr[x].isalpha(): + if s_csr[x].islower(): + s_out += lowercase[(lowercase.find(s_csr[x]) + n) % 26] + else: + s_out += uppercase[(uppercase.find(s_csr[x]) + n) % 26] + else: + s_out += s_csr[x] + return s_out + +def fn_hash(i_opt): + a = [{0:hashlib.md5, 1:'[i] MD5 Hash Encode: '},\ + {0:hashlib.sha1, 1:'[i] SHA1 Hash Encode: '},\ + {0:hashlib.sha256, 1:'[i] SHA256 Hash Encode: '},\ + {0:hashlib.sha512, 1:'[i] SHA512 Hash Encode: '}] + print l_edr[0] + a[i_opt][0](raw_input(a[i_opt][1]).encode('utf')).hexdigest() + +def fn_done(): + print ''' +[+] Thank You dude, please keep support +[+] FB : https://www.facebook.com/bayufedra +[+] Instagram : http://instagram.com/bayufedraa''' + sys.exit() + +def fn_main(): + if platform.system == 'Windows': + os.system('cls') + else: + os.system('clear') + + print ''' + =================================================== + ================================================= + =-=-=-=-=-=-=-= B3yeZ Tools =-=-=-=-=-=-=-= + =-=-=-=-=-= Author : Bayu Fedra A =-=-=-=-=-= + ================================================= + =================================================== + ____ ______ _______ _ + | _ \\ |___ / |__ __| | | + | |_) | ___ _ _ ___ / / | | ___ ___ | |___ + | _ < / _ \\ | | |/ _ \\ / / | |/ _ \\ / _ \\| / __| + | |_) | __/ |_| | __// /__ | | (_) | (_) | \\__ \\ + |____/ \\___|\\__, |\\___/_____| |_|\\___/ \\___/|_|___/ + __/ | + |___/ bayufedraaxtkja@gmail.com + + root@B3yeZ:~# cat list.txt''' + + while True: + try: + listt = int(raw_input(str_menu)) + if listt == 1: + fn_x64(0) + + elif listt == 2: + fn_x64(1) + + elif listt == 3: + fn_x64(2) + + elif listt == 4: + o,s = fn_hex() + print '{}{}'.format(l_edr[0], bin(int(binascii.hexlify(s), 16)) if (o == 1) else binascii.unhexlify('%x' % int(s, 2)) if (o == 2) else '') + + elif listt == 5: + o,s = fn_hex() + print '{}{}'.format(l_edr[0], binascii.hexlify(s) if (o == 1) else binascii.unhexlify(s) if (o == 2) else '') + + elif listt == 6: + o = int(raw_input(str_endeop)) + print '' + if (o > 2): break + s = raw_input(l_edr[o]) + print '{}{}'.format(l_edr[0], ''.join([str(ord(c)) for c in s]) if (o == 1) else re.sub('1?..', lambda m: chr(int(m.group())), s) if (o == 2) else '') + + elif listt == 7: + print '{}{}'.format(l_edr[0], raw_input('[i] Text to En/Decode : ').encode('rot_13')) + + elif listt == 8: + o = int(raw_input(str_endeop)) + print '' + if o == 1: + en = raw_input(l_edr[o]) + n = input('[i] Key : ') + print '{}{}'.format(l_edr[0], fn_csr(n, en)) + if o == 2: + en = raw_input('[i] Caesar to Bruteforce : ') + for i in xrange(26): + print ' {} => Hasil ===> {}'.format(str(i), fn_csr(i, en)) + + elif listt == 9: + print '{}{}'.format(l_edr[0], raw_input('[i] Text to Reverse : ')[::-1]) + + elif listt == 10: + fn_hash(0) + + elif listt == 11: + fn_hash(1) + + elif listt == 12: + fn_hash(2) + + elif listt == 13: + fn_hash(3) + + elif listt == 14: + a = raw_input('[i] XOR to Bruteforce : ') + for i in xrange(256): + print '{} => Hasil ===> {}'.format(str(i), ''.join([chr(ord(l) ^ i) for l in a])) + + elif listt == 15: + a = raw_input('[i] Strings to XOR : ') + b = raw_input('[i] Key : ') + hasil = '' + for c, k in zip(a, cycle(b)): + hasil += chr(ord(c) ^ ord(k)) + print '{}{}'.format(l_edr[0], hasil) + + elif listt == 16: + fn_done() + + if int(raw_input(str_cont)) == 2: + fn_done() + + except KeyboardInterrupt: + sys.exit() + + +if __name__ == '__main__': + fn_main() diff --git a/endec_list.pyc b/endec_list.pyc index 3f5ec619cf8473b8c2525c3127a9edaf6c778b08..a8fc696dd90d7e753f40e4a678364597c23225c3 100644 GIT binary patch literal 6051 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 BkDLGi literal 6312 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