jackpieno

加密程式

Jul 29th, 2022
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.90 KB | None | 0 0
  1. #數據相加
  2. def stringAdd(hexadecimal_string):
  3.     eee = ''
  4.     b = []
  5.     i=0
  6.     for byte in hexadecimal_string:
  7.         i=i+1
  8.         eee = eee+byte
  9.         if i%2 ==0 and i !=0:
  10.             b.append(eee)
  11.             eee = ''
  12.     return b
  13. #算字串長度
  14.  
  15. #輸入帳密(輸入數據中間要空白區分)
  16. Mystring = "Server001 test4"
  17.  
  18. needEncodeString = Mystring.encode()
  19.  
  20.  
  21. hexCode = 0xABCDABCD
  22.  
  23. for i in range(0,len(needEncodeString)+1):
  24.    
  25.     if i==0:
  26.         hexCode = hexCode+ 1
  27.     elif hex(int(needEncodeString[i-1])) != "0x20":
  28.         hexCode = hexCode + (needEncodeString[i-1] << i)
  29.        
  30.  
  31. print(hex(hexCode))
  32.  
  33. hexCode = str(hex(hexCode)).replace("0x","")
  34. hexCode = stringAdd(hexCode)
  35. hexCode.reverse()
  36.  
  37. tempString = []
  38. needEncode = []
  39. tick = 0
  40. for i in range(0,len(needEncodeString)):
  41.     if i==0:
  42.         tick = tick+1
  43.         tempString.append("01")
  44.     if hex(int(needEncodeString[i])) == "0x20":
  45.         tempString.append("00")
  46.     else:
  47.         tempString.append(str(hex(int(needEncodeString[i]))).replace("0x",""))
  48.     tick = tick+1
  49.    
  50.     if tick ==2:
  51.         tempString.reverse()
  52.         needEncode.append(tempString[0]+tempString[1])
  53.         tempString = []
  54.         tick = 0
  55.     if i == len(needEncodeString)-1:
  56.         if tick ==1:
  57.             needEncode.append(tempString[0]+"00")
  58.            
  59. x00 = '00'
  60. for i in range(0,len(hexCode)-1):
  61.     if i+1==1 :
  62.         needEncode.append(hexCode[i] + "00")
  63.     elif (i+1) % 2 ==0:
  64.         needEncode.append(hexCode[i+1] + hexCode[i])
  65.         i=i+1
  66.     else :
  67.         x00 = hexCode[i+1] +"00"
  68.        
  69. packLen = 32
  70. if len(needEncode) > 5:
  71.     packLen = packLen + (len(needEncode)-6)*2
  72. packLen = str(hex(packLen)).replace("0x","")
  73.  
  74.  
  75. #加總暫存
  76. esi = 0
  77.  
  78. for i in range(0,len(needEncodeString)+1):
  79.    
  80.     if i==0:
  81.         esi = esi+ 1
  82.     elif hex(int(needEncodeString[i-1])) != "0x20":
  83.         esi = esi + needEncodeString[i-1]
  84. for i in range(0,len(hexCode)):
  85.     esi = esi+ int(hexCode[i],16)
  86.        
  87. print("esi : " + str(hex(esi)))
  88.  
  89. EncodeHex = 0xBA59
  90.  
  91. keyTemp = "59BA"
  92.  
  93. keynum = EncodeHex +EncodeHex
  94.  
  95. outesi = esi
  96.  
  97. for i in range(0,8):
  98.     eax = i
  99.     eax = eax & 0x80000001
  100.  
  101.     ecx = EncodeHex
  102.    
  103.     dx = 0x10000
  104.  
  105.     ecx = ecx + 5
  106.  
  107.     eax =eax +1
  108.  
  109.     EncodeHex = ecx
  110.    
  111.     if i <6 :
  112.         dx = dx ^ ecx
  113.     else:
  114.         if i ==6 :
  115.             dx = dx + outesi
  116.            
  117.             dx = dx ^ ecx
  118.             #print(hex(dx))
  119.         if i ==7 :
  120.             dx = dx + 0x594B
  121.             dx = dx ^ ecx
  122.  
  123.     ecx = 0x10
  124.  
  125.     esi = dx
  126.  
  127.     ecx = ecx - eax
  128.  
  129.     esi = esi << ecx
  130.  
  131.     if (i+1) % 2 ==1:
  132.         ecx = 1
  133.     else:
  134.         ecx = 2
  135.  
  136.     eax = keynum
  137.  
  138.     dx = ((dx-0x10000) >> ecx) + 0x10000
  139.    
  140.     esi = esi | dx
  141.    
  142.     esi = esi + eax
  143.     keynum = esi
  144.     keyTemp = keyTemp +''.join(hex(esi)[-2:] + hex(esi)[-4:-2] )
  145. print(keyTemp)
  146.  
  147. x01 = 'ec'+packLen+'0000'+keyTemp
  148. x01 = bytearray.fromhex(x01);
  149. x00 = bytearray.fromhex(x00);
  150.  
  151. finish =bytearray(0)
  152.  
  153.  
  154. EncodeHex = 0xBA59
  155.  
  156. key_int = EncodeHex +0x1234
  157.  
  158. ebx_hex = hex(key_int*key_int)
  159.  
  160. print("EBX : " + str(ebx_hex))
  161.  
  162. ebx_hex = str(ebx_hex)
  163. ebx_hex = ebx_hex[len(ebx_hex)-4:len(ebx_hex)]
  164.  
  165. print("BX : " + str(ebx_hex))
  166.  
  167. nbits = 16
  168. temp = 0
  169. high_temp = 0
  170. low_temp = 0
  171. sec_temp =0
  172. oplen = 0
  173. for i in range(0,len(needEncode)):
  174.     key_int = key_int +3
  175.     temp = int(needEncode[i],16) - key_int
  176.     temp = int('{:04X}'.format(temp & ((1 << nbits)-1)),nbits)
  177.    
  178.     if oplen ==7:
  179.         oplen = 0
  180.     left = 16-oplen-1
  181.    
  182.     right = oplen+1
  183.    
  184.     oplen = oplen+1
  185.    
  186.     if left ==8:
  187.         left = 15
  188.         right = 1
  189.    
  190.     high_temp = temp << left
  191.    
  192.     low_temp = temp >> right
  193.    
  194.     new_temp = high_temp | low_temp
  195.    
  196.     new_temp = hex(new_temp)
  197.    
  198.     new_temp = new_temp[-4:]
  199.    
  200.     if i == 0:
  201.         last = hex(int(ebx_hex,16) + int(new_temp,16))
  202.  
  203.     else:
  204.         last = hex(sec_temp + int(new_temp,16))
  205.  
  206.     right_temp =  last[-4:]
  207.    
  208.     sec_temp =int(right_temp,16) >>2
  209.  
  210.     last = last[-2:] + last[-4:-2]
  211.     finish.extend(bytes(bytearray.fromhex(last)))
  212.  
  213. x01.extend(finish)
  214. x01.extend(x00)
  215. x01 = bytes(x01)
  216.  
  217. def resv_Pack_key(a):
  218.    
  219.     start = 5
  220.     a_int = int(a[4],16)
  221.     a_int = a_int >> 1
  222.     a_int = a_int & 3
  223.     for i in range(1,4):
  224.        
  225.         numa_int = a_int +i-1 & 3
  226.        
  227.         #原來位置
  228.         temp_dl = a[start]
  229.  
  230.         #替換位置
  231.         blInt = start+numa_int+1
  232.         temp_bl = a[blInt]
  233.        
  234.         a[start] = temp_bl
  235.  
  236.         a[blInt] = temp_dl
  237.        
  238.         start = start+5
  239.        
  240.     return a
  241.  
  242. b = stringAdd(x01.hex())
  243. b = resv_Pack_key(b)
  244. c = ''
  245. for i in range(0,len(b)):
  246.     c = c +''.join(b[i])
  247.  
  248. x01 = bytes(bytearray.fromhex(c))
  249. print("需偽造字串 : " + Mystring)
  250. print("----------代碼--------")
  251. print(x01)
  252.  
Add Comment
Please, Sign In to add comment