@@ -1862,31 +1862,56 @@ def UNSEAL(data, auth_data, key, aes = False):
1862
1862
plain = cipher .decrypt (data )
1863
1863
return plain , cfounder
1864
1864
1865
+ def CompressedUtf8String (domain_name ):
1866
+ if domain_name is None :
1867
+ raise ValueError ("domain_name cannot be None" )
1868
+
1869
+ MAX_LABEL_LENGTH = 63
1870
+
1871
+ buf = bytearray ()
1872
+ labels = domain_name .split ('.' )
1873
+
1874
+ for label in labels :
1875
+ label_bytes = label .encode ('utf-8' )
1876
+ if len (label_bytes ) > MAX_LABEL_LENGTH :
1877
+ raise ValueError ("Label exceeded max length of 63 bytes." )
1878
+ buf .append (len (label_bytes ))
1879
+ buf .extend (label_bytes )
1880
+ buf .append (0 )
1881
+
1882
+ return bytes (buf )
1865
1883
1866
1884
def getSSPType1 (workstation = '' , domain = '' , signingRequired = False ):
1867
1885
auth = NL_AUTH_MESSAGE ()
1886
+ auth ['MessageType' ] = NL_AUTH_MESSAGE_REQUEST
1868
1887
auth ['Flags' ] = 0
1869
- auth ['Buffer' ] = b''
1870
- auth ['Flags' ] |= NL_AUTH_MESSAGE_NETBIOS_DOMAIN
1888
+
1871
1889
if domain != '' :
1872
- auth ['Buffer' ] = auth ['Buffer' ] + b (domain ) + b'\x00 '
1873
- else :
1874
- auth ['Buffer' ] += b'WORKGROUP\x00 '
1875
-
1876
- auth ['Flags' ] |= NL_AUTH_MESSAGE_NETBIOS_HOST
1877
-
1878
- if workstation != '' :
1879
- auth ['Buffer' ] = auth ['Buffer' ] + b (workstation ) + b'\x00 '
1890
+ if '.' in domain :
1891
+ auth ['Flags' ] = NL_AUTH_MESSAGE_NETBIOS_HOST | NL_AUTH_MESSAGE_DNS_DOMAIN
1892
+ if workstation != '' :
1893
+ auth ['Buffer' ] = b (workstation ) + b'\x00 ' + CompressedUtf8String (domain )
1894
+ else :
1895
+ auth ['Buffer' ] = b'MYHOST\x00 ' + CompressedUtf8String (domain )
1896
+ else :
1897
+ auth ['Flags' ] = NL_AUTH_MESSAGE_NETBIOS_HOST | NL_AUTH_MESSAGE_NETBIOS_DOMAIN
1898
+ if workstation != '' :
1899
+ auth ['Buffer' ] = b (domain ) + b'\x00 ' + b (workstation ) + b'\x00 '
1900
+ else :
1901
+ auth ['Buffer' ] = b (domain ) + b'\x00 MYHOST\x00 '
1880
1902
else :
1881
- auth ['Buffer' ] += b'MYHOST\x00 '
1882
-
1903
+ if workstation != '' :
1904
+ auth ['Buffer' ] = b'WORKGROUP\x00 ' + b (workstation ) + b'\x00 '
1905
+ else :
1906
+ auth ['Buffer' ] = b'WORKGROUP\x00 MYHOST\x00 '
1907
+
1883
1908
auth ['Flags' ] |= NL_AUTH_MESSAGE_NETBIOS_HOST_UTF8
1884
-
1909
+
1885
1910
if workstation != '' :
1886
1911
auth ['Buffer' ] += pack ('<B' ,len (workstation )) + b (workstation ) + b'\x00 '
1887
1912
else :
1888
1913
auth ['Buffer' ] += b'\x06 MYHOST\x00 '
1889
-
1914
+
1890
1915
return auth
1891
1916
1892
1917
################################################################################
0 commit comments