ShortSigServerVerifySig( BINK,
CDKEY_PID_Part, 4, CDKEY_Sig_Part )
PlausibleKey
checks integrity and CRC
convert_external_key_to_internal(BINK,EBX)
x{+7c}=p (30 byte)
//signatureRemainBitsFromCDKEY => signature
unpack_signature( edi,
[Out_]BINK_Signature,
[Out_]BINK_Hash,
EBX.BINK_Signature-BitSize, EBX.BINK_Hash-BitSize,
CDKEY_Sig_Part)
//CDKEY_Sig_Part
is D88(0x53) Bits which is divided as
the following:
28(0x1c)
Bits
length given by BINK Hash
55(0x37)
Bits
length given by BINK
Signature
//X=30-byte-int ; e=empty(output)
ecdig_affine_exponentiation (x{+13C8}, BINK_Signature,
2, e{+38F4}, x{+12C8},
x{+7c})
ecdig_affine_exponentiation (x{+14C8},
BINK_Hash, 1, e{+39F4},
x{+12C8}, x{+7c})
ecdig_affine_addition
(x{+38F4}, x{+39F4},
e{+3AF4}, x{+12C8}, x{+7c})
ecdig_to_dwords
(x{+3AF4}, e{+3BF4}60-byte
,x{+7c} , [EBX.]0x0c)
ShortSigHash
(CDKEY_PID_Part, CDKEY_PID_Part_size,
x{+3BF4}60-byte, [EBX.]0x0C*2, e{+3CF4}4-Byte, 0x1C )
[cmpData]
([EBX.]1, BINK_Hash, e{+3CF8}4-Byte)
‘Output of convert_external_key_to_internal()
$ ebx >0000000C
....
$+4 >0000001C .. . BINK_Hash-BitSize
$+8 >00000001 ...
$+C >00000037 7... BINK_Signature-BitSize
$+10 >0130DFAE ®ß0
$+14 >6CCC8FD8 ØÌl dpcdll.6CCC8FD8
$+18 >6CCC9008 Ìl dpcdll.6CCC9008
$+1C >6CCC9068 hÌl dpcdll.6CCC9068
$+20 >6CCC90C8 ÈÌl dpcdll.6CCC90C8
$+50 >00000001 Dwords to compare in ‘cmpData’
To debug open DPCDLL-LicViewer.exe under ollydebug place dpcdll.pdb
into same dir is where dpcdll.dll is in (mostly that is C:\Windows\system32)
Set a breakpoint to all references to Dpcdll.ecdig_affine_exponentiation
and press the ‘Setkey CDKEY=’ to call validation.