Writeup CCUG HackFest 0x02 (Cryptography)

Cryptography

One Byte XOR

diberikan file ZIP berisi source code python encryptor dan hasil enkripsinya berikut adalah scriptnya



from Crypto import Random
import base64

def main():
flag = open("flag.txt","rb").read()
key = Random.new().read(1)
res = ""
for i in range(len(flag)):
    res += chr(ord(flag[i]) ^ ord(key))
res = base64.b64encode(res)
open("encrypted","wb").write(res)

if __name__ == "__main__":
main()

Fungsi enkirptor diatas adalah meng-XOR setiap character dengan 1 byte key random, lalu hasilnya di encode ke base64. Untuk menyelesaikan challenge ini, penulis menggunakan Brute Force untuk angka dari 0 sampai 256
berikut adalah script solvernya


from Crypto import Random
import base64

flag = open("flag.txt","rb").read()
flag = base64.b64decode(flag)

def xorString(string,key):
   res = ""
   for i in range(len(string)):
   res += chr(ord(flag[i]) ^ key)
   return res

for j in range(0,256):
   resu = xorString(flag,j)
   if "HackFest" in resu:
   print j,resu

Setelah di run maka di dapatkan output :

Selamat, ini flagnya : HackFest{ketika_ragu_dan_galau_brute_force_aja}



Flag: HackFest{ketika_ragu_dan_galau_brute_force_aja}



Cryptizi


Diberikan file zip berisi source code python berupa enkriptor, berikut adalah Scriptnya





def main():
   print("#[][][]ENKRIPTOR mini " )
   x = raw_input("\n\ntYPE : \n")
   x = duniasakti(x)
   print("\n\n {}RESULT :\n" + x)
   return 0

def duniasakti(yy):
   x = list(yy)
   a = len(x) - 1
   n = a/2
   for i in range(n,a+1):
   temp = x[a-i]
   x[a-i] = x[i]
   x[i]   = temp
   a = a + 1
   v = a * 3
   for h in range(a):
   temp = x[h]
   for j in range(256):
   karakter = chr(j)
   if(karakter==temp):
   x[h] = str(j*v)
   break
   continue
   x = "Un%".join(x)
   x = list(x)
   z = list()
   yuyu = ['1','2','3','4']
   kangkang = ['!*','x','_','q']
   for i in x:
   c = i in yuyu
   if(c == True):
   i = kangkang[yuyu.index(i)]
   z.append(i)
   z = ''.join(z)
   return(z)

if __name__ == '__main__':
   main()

enkripsi ini merubah text asli (Plain text) menjadi list dan merubahnya dengan sebuah inyeger lalu di gabung dengan "Un5%" dan merubah angka menjadi !*,x,_,q secara berurutan, berikut adalah solvernya



cipher = open("xxcheap.enc","rb").read()

cipher = cipher.replace("!*","1")
cipher = cipher.replace("x","2")
cipher = cipher.replace("_","3")
cipher = cipher.replace("q","4")
cipher = cipher.replace("Un%"," ")
print cipher

a = 33
v = a * 3
x = [12375, 10395, 11484, 11286, 9999, 10197, 10890, 9999, 10791, 10395, 9900, 9405, 11484, 10395, 10692, 11583, 11385, 9405, 9603, 10395, 11385, 11583, 10890, 9603, 10791, 9405, 10197, 10890, 9603, 9900, 9603, 10593, 12177]
t = ""

print v

for i in range(33):
   h = x[i]
   y = h/v
   t += chr(y)

print(t[::-1])

maka akan keluar output


12375 10395 11484 11286 9999 10197 10890 9999 10791 10395 9900 9405 11484 10395 10692 11583 11385 9405 9603 10395 11385 11583 10890 9603 10791 9405 10197 10890 9603 9900 9603 10593 12177
99
{kadang_manusia_sulit_dimengerti}

Flag : HackFest{kadang_manusia_sulit_dimengerti}

AES Machine

diberikan sebuah koneksi netcat dengan alamat nc ccug.gunafarma.ac.id 6008 jika di jalankan maka akan keluar :



┌─[fallcrescent@parrot]─[~] └──╼ $nc ccug.gunadarma.ac.id 6008
   _ ___   ___ __ __      _ _
  /_\ |    __/ __| |   \/ |__ _ __| |_ (_)_ _  ___
 / _ \|   _| \__ \ |  |\/| / _` / _| ' \  | | ' \/ -_)
/_/ \_\___|___/ |_|  |_ \__,_\__|_||_|_|_||_\___| v1.0
                                              
Options : encrypt, decrypt, getflag, quit
[!] NOTE : You only have 3 times to encrypt your plaintext or flag
>>

dan jika di masukkan getflah akan di dapatkan flag yang terenkripsi seperti berikut:



[+] Ciphertext : b5X77CB4DqBfWtrHHF14GySO/BctWdJKkmIp5f7opxJi6HcQTL37vteKjFyn2ReXxLjq2gh6iwwNTyLSXKpSWA==

diberikan juga source code untuk menencryptnya, berikut adalah script encrpyptornya



import sys
from base64 import b64encode
from base64 import b64decode
from Crypto.Cipher import AES
from Crypto import Random
import hashlib

BLOCK_SIZE = 16
IV = hashlib.md5(Random.new().read(32)).digest()
key = hashlib.sha256(Random.new().read(64)).digest()

def pad(s):
return s + Random.new().read(BLOCK_SIZE - (len(s) % 16))

def encrypt(msg):
msg = pad(msg)
cipher = AES.new(key,AES.MODE_OFB,IV)
return b64encode(cipher.encrypt(msg))

def _unpad(s):
    return s[:-ord(s[len(s)-1:])]

def getflag():
flag = open("flag.txt","rb").read()
return encrypt(flag)

def print_(s):
sys.stdout.write(s)
sys.stdout.flush()

def println(s):
print_(s+"\n")

def welcome():
print_(""" _   ___ ___   __ __ _ _
  /_\ | __/ __| |  \/ |__ _ __| |_ (_)_ _  ___
 / _ \| _|\__ \ | |\/| / _` / _| ' \| | ' \/ -_)
/_/ \_\___|___/ |_|  |_\__,_\__|_||_|_|_||_\___| v1.0
                                                """)
def main():
num = 1
welcome()
println("")
println("Options : encrypt, decrypt, getflag, quit")
println("[!] NOTE : You only have 3 times to encrypt your plaintext or flag")
while True:
    try:
        print_(">> ")
        pil = raw_input()
        if pil == "encrypt":
            if num > 3:
                println("[!] You have use this more than 3 times")
                break
            print_("[?] Plaintext : ")
            plain = raw_input()
            println("[+] Ciphertext : " + encrypt(plain))
            num += 1
        elif pil == "decrypt":
   print_("[?] Plaintext : ")
            plain = raw_input()
   println("[+] Flag : " + decrypt(plain))
   num += 1
        elif pil == "getflag":
            if num > 3:
                println("[!] You have use this more than 3 times")
                break
            println("[+] Ciphertext : " + getflag())
            num += 1
        elif pil == "quit":
            println("[+] Exiting Program ")
            break
        else:
            println("[-] Invalid option ")
            break
    except:
        break

if __name__ == "__main__":
main()

dari source code diatas bisa disimpulkan bahwa IV dan key akan di buat random srtiap di jalankan jenis AESnya yang digunakan adalah OFB dan diencrypt menjadi base 64

untuk menyelesaikan soal ini dapat menggunakan cara menXOR kan plaintextnya lalu akan di dapatkan key yang akan di XOR untuk mendapatkan Flag.

dapat diambil contoh dari service yang di jalankan sbb:



>> encrypt
[?] Plaintext : AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
[+] Ciphertext : ZrXZxidcPJVlKq+zOH0LaQT6iW8IfaY44xJZlY2Z0zAXkAJobsuDmvT6rn/RqDDisYShfbYVzTVGkjGLSbsZWA==

script solver



import base64

flag = "b5X77CB4DqBfWtrHHF14GySO/BctWdJKkmIp5f7opxJi6HcQTL37vteKjFyn2ReXxLjq2gh6iwwNTyLSXKpSWA=="
flag = base64.b64decode(flag)

plain = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
cipher = "ZrXZxidcPJVlKq+zOH0LaQT6iW8IfaY44xJZlY2Z0zAXkAJobsuDmvT6rn/RqDDisYShfbYVzTVGkjGLSbsZWA=="

def xorString(string,key):
   res = ""
   for i in range(len(string)):
   res += chr(ord(string[i]) ^ ord(key[i]))
   return res.encode("hex")

key = xorString(plain,cipher)
print xorString(flag,key)

setelah di run maka di dapatkan flag
Flag : HackFest{145ea23a549de530111205c4949c79eb1cb70f44}

MultiByte Xor

Diberikan file zip berisi Source Code Python, beserta hasil enkripsinya berikut adalah source codenya :

def main():
key = open("key.txt","rb").read().strip()
message = open("message.txt","rb").read().strip()

assert(len(key) == 12)
assert('HackFest' in message)
assert(key.isalnum() == True)
message_enc = ""
for x in range(len(message)):
    message_enc += chr(ord(message[x]) ^ ord(key[x % len(key)]))
open("message.txt.encrypted","wb").write(message_enc)

if __name__ == "__main__":
main()

Berikut Hasil dari enkripsi yang di jalankan

*I<Q;3'    I/N+;[ 7:I{
^QGxc.+(N.1? &.N,D* i9(<7$*U/

9+39k

9@.&"kI:Q='i
9N+;[    7:Gk&
?Q&r*?
9,:(.    I1^&~i
*?Uo;'I/;Q!5i*N+U=&(N!*%+Do?,#
I:U;'%N
*
9^.r"

untuk menyelesaikan challenge ini penulis menggunakan Known Plain Attack dapat menggunakan tools yang ada di internet, untuk toolsnya bisa di lihat disini. dan ketika dijalankan maka akan menampilkan :

┌─[fallcrescent@parrot]─[~/Hackfest/Crypto/Multibyte_XOR_Source] └──╼ $ ./KPA.py message.txt.encrypted 'HackFest' 12
Searching XOR-encrypted message.txt.encrypted for string 'HackFest' (max_key_length = 12)
Key length: 12
Partial Key: In����ciX0OR
Plaintext: Se����t datang����HackFest����2. Saya ����gai prob����setter b����rap semo����nda dapa����ndapatka����l baru d����HackFest����bagai co����nya chal����e ini, c����enge ini����ancang a����peserta ����Fest mem����i betul ����imana kr����grafi XO����rkerja d����enyerang����dengan m����unakan K���� Plainte����ttack.
D����ni dia f����yang bis����da submi����HackFest����wn_plain����_attack_����e2f67cdf����4ddc8e09����4cd7}

Key length: 12
Partial Key: In����ciX0OR
Plaintext: Se����t datang����HackFest����2. Saya ����gai prob����setter b����rap semo����nda dapa����ndapatka����l baru d����HackFest����bagai co����nya chal����e ini, c����enge ini����ancang a����peserta ����Fest mem����i betul ����imana kr����grafi XO����rkerja d����enyerang����dengan m����unakan K���� Plainte����ttack.
D����ni dia f����yang bis����da submi����HackFest����wn_plain����_attack_����e2f67cdf����4ddc8e09����4cd7}

Key length: 12
Partial Key: ��iKunciX0��
Plaintext: ��lamat da���� di Hack���� 0x02. S����sebagai ����lem sett����erharap ����ga Anda ����t mendap����n hal ba����ari Hack����. Sebaga����ntohnya ����lenge in����hallenge���� diranca����gar pese����HackFest����ahami be����bagaiman����iptograf����R berker����an menye����nya deng����enggunak����nown Pla����xt Attac����an ini d����lag yang����a Anda s����t : Hack����{known_p����text_att����9276e2f6����a9b94ddc����fb2d4cd7�

Key length: 12
Partial Key: In����ciX0OR
Plaintext: Se����t datang����HackFest����2. Saya ����gai prob����setter b����rap semo����nda dapa����ndapatka����l baru d����HackFest����bagai co����nya chal����e ini, c����enge ini����ancang a����peserta ����Fest mem����i betul ����imana kr����grafi XO����rkerja d����enyerang����dengan m����unakan K���� Plainte����ttack.
D����ni dia f����yang bis����da submi����HackFest����wn_plain����_attack_����e2f67cdf����4ddc8e09����4cd7}

Didapat key = IniKunciX0OR


┌─[fallcrescent@parrot]─[~/Hackfest/Crypto/Multibyte_XOR_Source]
└──╼ $ ./KPA.py message.txt.encrypted --key=IniKunciX0OR
Key length: 12
Partial Key: IniKunciX0OR
Plaintext: Selamat datang di HackFest 0x02. Saya sebagai problem setter berharap semoga Anda dapat mendapatkan hal baru dari HackFest. Sebagai contohnya challenge ini, challenge ini dirancang agar peserta HackFest memahami betul bagaimana kriptografi XOR berkerja dan menyerangnya dengan menggunakan Known Plaintext Attack.
Dan ini dia flag yang bisa Anda submit : HackFest{known_plaintext_attack_9276e2f67cdfa9b94ddc8e09fb2d4cd7}

Flag : HackFest{known_plaintext_attack_9276e2f67cdfa9b94ddc8e09fb2d4cd7}

Kindergarten Encryption

Diberikan Script Encrpytor dan emkripsi seperti berikut :


import string
import random
import sys
character = string.digits + string.lowercase + string.uppercase + string.punctuation
BLOCK_SIZE = 8
key = random.randint(2**4,len(character))

def pad(s):
res = s
while len(res) % BLOCK_SIZE != 0:
    res += " "
return res

def encrypt(s):
p = pad(s)
c = ""
mx = []
mx_t = []
for x in range(len(p)):
    if p[x] not in character:
        c += p[x]
    else:
        pos = (character.index(p[x]) + key) % len(character)
        c += character[pos]
for x in range(0,len(c),BLOCK_SIZE):
    mx.append(c[x:x+BLOCK_SIZE])
for i in range(BLOCK_SIZE):
    tmp = ""
    for j in range(len(mx)):
        tmp += mx[j][i]
    mx_t.append(tmp)
return ''.join(mx_t)[::-1]

def main():
if len(sys.argv) == 2:
    f = sys.argv[1]
    cip = open(f,"rb").read()
    cip = encrypt(cip)
    open(f+".enc","wb").write(cip)
else:
    exit()

if __name__ == "__main__":
main()

bisa disimpulkan enkripsi tersebut merupakan implementasi dari kriptografi caesar  dan column transposition cipher, berikut solvernya :

import string

BLOCK_SIZE = 8
message = open("message.txt.enc","rb").read()
message = message[::-1]
character = string.digits + string.lowercase + string.uppercase + string.punctuation

def test(key):
   mx_t = []
   ka = len(message)
   ma = ka/BLOCK_SIZE

   for i in range(0,len(message),ma):
   mx_t.append(message[i:i+ma])
   mx = ""
   
   for i in range(0,len(mx_t[0])):
   for j in range(0,len(mx_t)):
   mx += (mx_t[j][i])
   c = ""
   for x in range(len(mx)):
   if mx[x] not in character:
   c+= mx[x]
   else:
   pos = (character.index(mx[x]) - key ) % len(character)
   c += character[pos]
   return c

for key in range(2**4,len(character)):
   c = test(key)
   if "HackFest" in c:
   print "key:",key
   print "plain:\n",c
   break

Output yang di dapat :

key: 16
plain:
IKLAN UNIVERSITAS GUNADARMA
Universitas Gunadarma
Membangun Insan Cerdas Berkompetitif dan Berkarakter
Universitas Gunadarma
Bersama UG masa depan diraih saat ini
HackFest{orang_pintar_kalah_sama_orang_sabar_tekun_dan_rajin}
MARS UNIVERSITAS GUNADARMA
Majulah Gunadarma
Majulah Putra Indonesia
Tuntut Ilmu Bersemangat Baja Tuk Mengemban Tugas Mulia
Majulah Gunadarma
Majulah Putra Indonesia
Kibarkan Panji Panji Cita
Tonggak Membangun Negara
Hiduplah Gunadarma
Hidup Siswa Pendidiknya
Mengabdi Pada Negara Bangsa Nan Jaya

Flag: HackFest{orang_pintar_kalah_sama_orang_sabar_tekun_dan_rajin}

Classic Crypto Machine

diberikan service netcat yang beralamatkan nc ccug.gunadarma.ac.id 6003 yang ketika di run maka akan tampil :


--------------------------------------------
   Random Classic Crypto Machine
--------------------------------------------
Option : encrypt, decrypt, getflag, exit

>> getflag
[+] Result : DJgqTxk5GqxsqH{xiUPxUo+5s}xr+5x+Ta+xi+5UaKjuU5j+

penulis mencoba untuk input setiap huruf uppercase, lowercase, dan numerik untuk mengetahui apa saja yang akan di rubah


Asli      = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789{}"
Cipher = "aHDsq5YVS3kneRmfIZGPW189lC06NdXgcuME2A7FtbpywzO4QLvhUrTiJKjBxo{}"

lalu penulis mencoba encrpyt pesan seperti berikut :


>> encrypt
[?] Message : HackFest{123456ABCDEGIJKLMOPQRSTUVWXYZ789}    
[+] Result : D2gcv0kyGEBMqz{Ao7PhTt+bi}Jp+4K+jw+LN+6OaxXudQr+

lalu penulis menyusun script sbb untuk solvernya :


from string import maketrans

#raw = "HackFest{123456ABCDEGIJKLMOPQRSTUVWXYZ789}"
#raw = "D2gcv0kyGEBMqz{Ao7PhTt+bi}Jp+4K+jw+LN+6OaxXudQr+"
raw = "DJgqTxk5GqxsqH{xiUPxUo+5s}xr+5x+Ta+xi+5UaKjuU5j+"
raw = raw.replace("+","")


asli   = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789{}"
cipher = "aHDsq5YVS3kneRmfIZGPW189lC06NdXgcuME2A7FtbpywzO4QLvhUrTiJKjBxo{}"
transtbl = maketrans(cipher,asli)

plain = raw.translate(transtbl)

print plain

t = "cKFGYAkRsJ7IeT{L9MtZ2OP3}4QV56SXCBUa8EHDW1"
h = "HackFest{123456ABCDEGIJKLMOPQRSTUVWXYZ789}"

result = ""
for i in range(len(h)):
   pos = t.find(h[i])
   result += plain[pos]

print result

flag : HackFest{60d8828f306ede4809f1fab0ff828853}


Baby RSA


Diberikan sebuah service nc ccug.gunadarma.ac.id 6004 yang ketika dibuka akan melakukan

-----     Basic RSA HackFest 0x02     -----

[+] Level 1 : Temukan nilai n

p = 112929231839133764922499650211502042983992522246363389414474183288140649720837
q = 109099903505021106777266264281880454823285926834179667561051699220281661035493
n =

Dapat disimpulkan bahwa challenge ini akan memiliki beberapa level dengan soal yang berbeda beda. Untuk menyelesaikan level-level terdapat hint berupa link yang menunjukan halaman Wikipedia dengan itu penulis dapat mendapatkan untuk mencari nilai n dapat di lakukan n = pq maka dibuatlah script di python

>>> def soal1(p,q):
... n=p*q
... print(n)
... return;
...
>>> soal1(p,q)
12320568296545651007975344558539473699506190984476704529033056826916623164536349893268304478908382864342093065085644220702536014936470661634136750798667641

Lalu level 2
[+] Level 2 : Temukan nilai p

n = 10872329446459129667921644340962528388878929362939012297295288926876443586605345820094871187376734268471914144532889920441052111516485840345063304798849199
q = 97964102664819230216369526981268162507859658722305600628418624802857385115189
p =

Dapat menggunakan persamaan sebelumnya hanya ditukar posisi p = nq

>>> def soal2(n,q):
... p = n/q
... print(p)
... return;
...
>>> soal2(n,q)
110982790131385439183723482973777784066553128829290195687134540527228330203091





Level 3

[+] Level 3 : Temukan nilai m

pesan = aku pasti bisa jadi juara hackfest 0x02
m =

Untuk mendapatkan m dapat dilakukan pengubahan pesan menjadi hexadecimal

>>> def soal3(pesan):
... m = int(pesan.encode("hex"),16)
... print(m)
... return;
...
>>> pesan = "aku pasti bisa jadi juara hackfest 0x02"
>>> soal3(pesan)
3175160763199730136104003070276660270796333966900447388966212557680438006565173088752158388274

Level 4
[+] Level 4 : Temukan nilai phi(n)

n = 9206319279554238079698747425008417624874207283636875034394462687384683731832770440746049983145925424382008526538789703529606606309114020211552708433112187
q = 98392596907614538909695412992547731548149407230658364699581726812760734593153
phi(n) =

Untuk mendapatkan (n)dapat digunakan rumus (n) =(p-1)(q-1) maka untuk level 4

>>> def soal4(n,q):
... p = n/q
... phin = (p-1)*(q-1)
... print(phin)
... return;
...
>>> soal4(n,q)
9206319279554238079698747425008417624874207283636875034394462687384683731832578480954364508576426459271964149847992919399995028606507027058104941207936256
Level 5

[+] Level 5 : Temukan nilai d

n = 9853378978342277246592854301601474299315203685648314474324753473155118482252169802617906434483572961369844016154721468959046212604116497292113114162231737
p = 110033185946243101710239017871774914594735109397409265529182580549501277407929
e = 65537
d =

Untuk level 5, q nya tidak diketahui maka harus melakukan q = nplalu untuk (n) =(p-1)(q-1)dan d = modulo inverse e dan (n)maka dalam python di lakukan

>>> from libnum import invmod
>>> def soal5(n,p,e):
...      q = n/p
...      phin = (p-1)*(q-1)
...      d = invmod(e, phin)
...      print(d)
...      return;
...
>>> soal5(n,p,e)
3440120304613419071353450711429319826092606856147200565894451748161531134968145179213649016515631007988591748561673347510075940851176671740951158297856001

Level 6

[+] Level 6 : Temukan nilai c

pesan = 6J4fGdqv2mER1pq0cYOTiYsDOpJjJgKRIVmA9d0DQtMPAZyr
n = 160530120449698853323914225889124288546202333785790888734659128737331626915319316700266511731408151927180987601275757530973277653384961677715161263674205308817194621469376259337292610388151469412735064526307603622141517435842801463275101483227977200587303919482938745312230648306154070691886591194934605433409
q = 13165879531906425940330381135111494537878458358222582656432653812513061043891386238791888923754391942196746222741546266017174542138733300161390873843866919
e = 65537
c =

Pada level 6 ini p tidak diketahui maka harus dilakukan p = nqdan pesan masih harus di ubah ke dalam hexadecimal dan untuk c = me % nmaka dalam python dapat dilakukan

>>> def soal6(m,n,q,e):
... p = n/q
... m = int(m.encode("hex"),16)
... c = pow(m,e,n)
... print(c)
... return;
...
>>> soal6(pesan,n,q,e)
100501547972271070798318369578645466989911616757748641372952916585423785490588909924189274460434149361552127069392971622473595503186907497335888977716049079304160335989197580325853248310829095991132035902793603908571011915641163207424630738539889500138614509900784220676722179766888454341208545415304372961547

Level 7

[+] Level 7 : Temukan nilai m

ciphertext in base64 = NBhrA55dSfY00kwWshL0e3WKcXYM6QqoDxt+cP2BCcwHPc7wNHTZ+L+89wyKw3TCXDgp8GpHLEAMvOPrJFZO6KaFoyHt8R46cCrwzFwx1x5C+miHhpUNVMcExnhG4M90VPq9EfEkCmHZJtXUfjbncXs5d7kBtT/8znjc9CdB9vw=
n = 105634545350227668733616554822704614788920475329747055385504294275239128530470142574808200030192609373682071201808841553172406658025654874765485132609987007425076979724142236031162853736147304603432629192223788297598717680324572795857452903934488917270781541310261931620206108863609139447378538166776891718573
q = 10057149911218765533626529011598670489153341897417383198981179878497158384644852029373336716203886373181491358314668788822752936362913099867066628093325287
e = 65537
m =

Untuk level 7 pesan nya telah di encode dengan base64 berarti harus di decode dahulu dan di encode lagi menjadi hexadecimal lalu p dan (n)sama seperti sebelumnya dengan m =md % n dengan d =modulo inverse e dan (n)lalu m adalah pesan yang telah di decode dan di encode menjadi hex. Dalam python

>>> import base64
>>> def soal7(c,n,q,e):
... tempc = base64.b64decode(c)
... tempc = int(tempc.encode("hex"),16)
... p = n/q
... phin = (p-1)*(q-1)
... d = invmod(e, phin)
... m = pow(tempc,d,n)
... print(m)
... return;
...
>>> soal7(pesan,n,q,e)
15920080425091568109598387832238350405708995466701118404360496515404108810595592823358106083566318505980095945388855

Level 8

[+] Level 8 : Temukan plaintext

ciphertext in base64 = X4eztVA+M9+dkuxSgS3e6JdLdbv9pFy1eWx0YuQyfCBS/8N9dvX9n+VZlEtCZDmqxfHW19TdO6tiHor34fhlWOmc0X8OyBF6ywIL6l9Z0fupNv+kPnoAS1LrQb/WPfq2YmT8tuE89Nm1erDI8tjsz9Cxq2BvW1geC/aH0l5xqvw=
n = 112159657044006086576915455759176679621763496017981700046200895529676073817474177034245292799763333996176042362769229641412420129561323219586574124980985619853051416733196196651657810439513884095626601902976547198664947223165325332365109374872968723598810114042756682864529920654837856721441582636538549146817
p = 10303880386138735355196665822024787118841643672219032647140881217742041465754554143032067331382589882001248527861118412427798577586084906701529625378686187
e = 65537
plaintext =

Level 8 sama seperti level 7 dalam pengerjaan hanya tinggal mengubah hasil m dari angka ke string

>>> from libnum import n2s
>>> def soal8(c,n,q,e):
... tempc = base64.b64decode(c)
... tempc = int(tempc.encode("hex"),16)
... p = n/q
... phin = (p-1)*(q-1)
... d = invmod(e, phin)
... m = pow(tempc,d,n)
... str = n2s(m)
... print(str)
... return;
...
>>> soal8(c,n,p,e)
FBaZgCWjZ7n0QxUqH5LUD8opOegltdBGThfGkw8VdOmxNYmU

Dan di dapatkan output

[+] Baik, sudah saatnya aku memberi kakak flag
[+] Ini flagnya kak : HackFest{basic_RSA_itu_pentiing_buangeet_lhoo_kak_hehe}

Flag : HackFest{basic_RSA_itu_pentiing_buangeet_lhoo_kak_hehe}

Categories: ,

0 comments:

Post a Comment

http://www.resepkuekeringku.com/2014/11/resep-donat-empuk-ala-dunkin-donut.html http://www.resepkuekeringku.com/2015/03/resep-kue-cubit-coklat-enak-dan-sederhana.html http://www.resepkuekeringku.com/2014/10/resep-donat-kentang-empuk-lembut-dan-enak.html http://www.resepkuekeringku.com/2014/07/resep-es-krim-goreng-coklat-kriuk-mudah-dan-sederhana-dengan-saus-strawberry.html http://www.resepkuekeringku.com/2014/06/resep-kue-es-krim-goreng-enak-dan-mudah.html http://www.resepkuekeringku.com/2014/09/resep-bolu-karamel-panggang-sarang-semut-lembut.html

Copyright © FallCrescent | Powered by Blogger

Design by Anders Noren       Up ↑