vb.net算术运算导致解密溢出

时间:2016-10-26 14:08:40

标签: vb.net encryption

我正在为密码恢复工具开发新的解密功能。我尝试用c ++编写代码并且工作:

void poco_pwd(u_char *pwd, int type) {
    int     len,
            tmp;
    u_char  *out;
    short   azz;

    if(type) azz = 0x2537;  // encrypt message
        else azz = 0x2a9a;  // other passwords

    len = strlen(pwd) >> 1;
    out = pwd;
    while(len--) {
        sscanf(pwd, "%02X", &tmp);
        pwd += 2;
        *out++ = tmp ^ (azz >> 8);
        azz = ((tmp + azz) * 0x8141) + 0x3171;
    }
    *out = 0;
}

我试图将此代码转换为vb.net和c#,但它会引发算术溢出操作。这个功能新的价值被放到" azz"变量。 " AZZ"是一个短变量,但这些值非常高。奇怪的是它适用于c ++。

我将此代码转换为vb.net:

Dim encpass As String = "1EF66D8BD3C32476CEC8CF"
Dim encpassByte As Byte() = Encoding.UTF8.GetBytes(HexToString(encpass))
Dim azz As Integer = &H2A9A
Dim len As Integer = encpassByte.Length >> 1
Dim storage(len) As Char

For i = 0 To len
    storage(i) = (ChrW(encpassByte(i) Xor (azz >> 8)))
    azz = ((encpassByte(i) + azz) * &H8141) + &H3171 //Error: arithmetic operation resulted in an overflow.
Next

Console.WriteLine(storage.ToString)
Console.ReadKey()

十六进制到字符串函数:

Function HexToString(ByVal hex As String) As String
    Dim text As New System.Text.StringBuilder(hex.Length \ 2)
    For i As Integer = 0 To hex.Length - 2 Step 2
        text.Append(Chr(Convert.ToByte(hex.Substring(i, 2), 16)))
    Next
    Return text.ToString
End Function

此代码抛出此错误:算术运算导致溢出

0 个答案:

没有答案