Цель - распаковать всё, потом разделить на 2 части.
Первую часть - 32 байта оставить как есть, а вторую распаковать с помощью zlib1.dll.
В распакованной части внести изменения, запаковать zlib1.dll объеденить с 32 байтами первой части и всё это запаковать в Base64.
Проще, конечно, обойтись без ADODB.Stream, но хочется разобраться с двумя предыдущими вопросами.
var =
( Join
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
)
size := StringBase64ToData(var, outData)
varsetcapacity(var1, size)
DllCall("Ntdll\RtlMoveMemory", Ptr, &var1, Ptr, &outData, Ptr, 32)
varsetcapacity(var2, size-32)
DllCall("Ntdll\RtlMoveMemory", Ptr, &var2, Ptr, &outData+32, Ptr, size-32)
DllCall("Ntdll\RtlMoveMemory", Ptr, &var1+32, Ptr, &var2, Ptr, size-32)
msgbox % Base64Enc(var1, size)
Base64Enc(ByRef Bin, nBytes) { ; By SKAN / 18-Aug-2017
Local Rqd := 0, B64 ; CRYPT_STRING_BASE64 := 0x1, CRYPT_STRING_NOCRLF := 0x40000000
DllCall( "Crypt32.dll\CryptBinaryToString", "Ptr", &Bin ,"UInt", nBytes, "UInt",0x1|0x40000000, "Ptr",0,"UIntP",Rqd )
VarSetCapacity( B64, Rqd * ( A_Isunicode ? 2 : 1 ), 0 )
DllCall( "Crypt32.dll\CryptBinaryToString", "Ptr",&Bin, "UInt",nBytes, "UInt",0x1|0x40000000, "Str",B64, "UIntP",Rqd )
Return B64
}
StringBase64ToData(stringBase64, ByRef outData)
{
static CRYPT := CRYPT_STRING_BASE64 := 1
DllCall("Crypt32\CryptStringToBinary", Ptr, &stringBase64, UInt, StrLen(stringBase64), UInt, CRYPT, UInt, 0, UIntP, bytes, UIntP, 0, UIntP, 0)
VarSetCapacity(outData, bytes)
DllCall("Crypt32\CryptStringToBinary", Ptr, &stringBase64, UInt, StrLen(stringBase64), UInt, CRYPT, Str, outData, UIntP, bytes, UIntP, 0, UIntP, 0)
Return bytes
}
С первым вопросом разобрался:
var =
( Join
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
)
size := StringBase64ToData(var, outData)
arr := ComObjArray(VT_UI1 := 0x11, size)
DllCall("Ntdll\RtlMoveMemory", Ptr, NumGet( ComObjValue(arr) + 8 + A_PtrSize ), Ptr, &outData, Ptr, size)
oADO := ComObjCreate("ADODB.Stream")
oADO.Type := 1 ; bin
ADO.Mode := 3
oADO.Open
oADO.Write(arr)
oADO.Position := 0
aBin := oADO.Read(size)
oADO.Close
varsetcapacity(a, size)
DllCall("Ntdll\RtlMoveMemory", Ptr, &a, Ptr, NumGet( ComObjValue(abin) + 8 + A_PtrSize ), Ptr, size)
msgbox % Base64Enc(a, size)
Base64Enc(ByRef Bin, nBytes) { ; By SKAN / 18-Aug-2017
Local Rqd := 0, B64 ; CRYPT_STRING_BASE64 := 0x1, CRYPT_STRING_NOCRLF := 0x40000000
DllCall( "Crypt32.dll\CryptBinaryToString", "Ptr", &Bin ,"UInt", nBytes, "UInt",0x1|0x40000000, "Ptr",0,"UIntP",Rqd )
VarSetCapacity( B64, Rqd * ( A_Isunicode ? 2 : 1 ), 0 )
DllCall( "Crypt32.dll\CryptBinaryToString", "Ptr",&Bin, "UInt",nBytes, "UInt",0x1|0x40000000, "Str",B64, "UIntP",Rqd )
Return B64
}
StringBase64ToData(stringBase64, ByRef outData)
{
static CRYPT := CRYPT_STRING_BASE64 := 1
DllCall("Crypt32\CryptStringToBinary", Ptr, &stringBase64, UInt, StrLen(stringBase64), UInt, CRYPT, UInt, 0, UIntP, bytes, UIntP, 0, UIntP, 0)
VarSetCapacity(outData, bytes)
DllCall("Crypt32\CryptStringToBinary", Ptr, &stringBase64, UInt, StrLen(stringBase64), UInt, CRYPT, Str, outData, UIntP, bytes, UIntP, 0, UIntP, 0)
Return bytes
}