Welcome to HBH! If you have tried to register and didn't get a verification email, please using the following link to resend the verification email.

sever hacking - Python Code Bank


sever hacking
hack a sever
                # Created by UnknownSinister

#Hack the Server Challenged

#Given Data: Base 1511^x, modulus and output.
base=1511
modulus=35948145881546650497425055363061529726
output=10899914993644372325321260353822561193

#Baby/Giant steps discrete logarithms to evaluate exponential $x.
#You need a lot of memory to be able to run that code.
#CAUTION: DO NOT RUN ON PHONE
def baby_steps_giant_steps(a,b,p,N = None):
    if not N: N = 1 + int((p)**0.5)

    #initialize baby_steps table
    baby_steps = {}
    baby_step = 1
    for r in range(N+1):
        baby_steps[baby_step] = r
        baby_step = baby_step * a % p

    #now take the giant steps
    giant_stride = pow(a,(p-2)*N,p)
    giant_step = b
    for q in range(N+1):
        if giant_step in baby_steps:
            return q*N + baby_steps[giant_step]
        else:
            giant_step = giant_step * giant_stride % p
    return "No Match"

#I run this on my desktop PC and waited to obtain the results

# Code: baby_steps_giant_steps(base,output,modulus)

#I have also used the Pohlig-Hellman Algorith to obtain the folowing output:
    
x=5846138770670624478648053421625897
y=13876455641232175195163569384472100

#Note that y is just an arbitary output because it is not the exponential and give the output
def check(x):
    true="The value "+str(x) +" is the corresponding value of exponential $x"
    false="The value "+str(x)+" is NOT the corresponding value of exponential $x"
    if pow(1511,x,modulus)==output:
        return str(true)
    else:
        return str(false)

#The true exponential value will be in the form:
#  $x = x+y*k where k is a constant

#Hence I find a value k such that I get a 39 digit long exponential
#Note: I have ensured that the lenght of x is 39 digit long because 38 digit will produce a 31 characters flag.
#The demanded length of the flag is 32 characters. 
#Thus length of x must be 39 digit long
def find(x,y):
    i=0
    while True:
        z=x+y*i
        if len(str(z))!=39:
            i+=1
        else:
            break
    return i
       
#Convert it into hexadecimal form
def dec2hex(dec):
    hexstring=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"]
    c=0
    remainder=[]
    res=""
    if dec>0:
        while dec>0:
            remainder.append(dec%16)
            dec=dec//16
            c+=1
        for reverse in remainder[::-1]:
            res+=hexstring[reverse]
    else:
        res="0"
    return res

def hacktheserver(x,y):
    yes="~#### SERVER HAS BEEN HACKED ####~"
    print("~#### HACK THE SERVER CHALLENGE ####~")
    print("The value of x is:",x)
    print("The value of y is:",y)
    print("The Exponential is in the form x+y*k")
    print("The value of k is:",find(x,y))
    print(check(x+y*find(x,y)))
    print("Flag decimal value:",x+y*find(x,y))
    print("Flag 32 hexadecimal characters:",dec2hex(x+y*find(x,y)))
    print("Flag has been obtained")
    return yes

#AT LAST:    
print(hacktheserver(x,y))
            
Comments
Sorry but there are no comments to display