这段代码有什么作用?德尔福asm

时间:2012-06-15 10:26:47

标签: assembly

我尝试解析加密的& RQ历史记录,但我真的无法理解asm代码。它嵌入到Delphi函数中。

有人可以帮助我理解这个吗?

procedure decritt(var s:string; key:integer);
 asm
 mov ecx, key
 mov dl, cl
 shr ecx, 20
 mov dh, cl

 mov esi, s
 mov esi, [esi]
 or  esi, esi    // nil string
 jz  @OUT

// now esi points to the first character of the string

 mov ah, 10111000b

 mov ecx, length(s)
 or  ecx, ecx
 jz  @OUT
@IN:
 mov al, [esi]
 xor al, ah
 rol al, 3
 xor al, dh
 sub al, dl

 mov [esi], al
 inc esi
 ror ah, 3
 dec ecx
 jnz @IN
@OUT:
 end; // decritt

感谢。

3 个答案:

答案 0 :(得分:2)

这个c ++代码是等价的:

void encrypt(std::string s, int key) {

    const char dl = key;
    const char dh = key >> 20;
    char ah = 0xB8;

    for (int i=0; i<s.length(); ++i) {
        char c = s[i];
        c ^= ah;
        c = (c<<3)|(c>>5); // rotate a char three bits left
        c ^= dh;
        c -= dl;
        s[i] = c;
        ah = (ah>>3)|(ah<<5);
    }
}

答案 1 :(得分:1)

是的,最后我开始工作了。这是生成的python代码:

def decrypt(self, string, key):
    decrypted = []

    dl = key & 0xffff
    dh = key >> 20
    ah = 0xb8

    for i in xrange(0, len(string)):
        c = ord(string[i])
        c ^= ah & 0xff
        c = ((c<<3)|(c>>5)) & 0xff
        c ^= dh & 0xff
        c = (c - dl) & 0xff

        decrypted.append(chr(c & 0xff))
        ah = ((ah>>3)|(ah<<5)) & 0xff

    return "".join(decrypted)

答案 2 :(得分:0)

汇编函数采用加密字符串和解密密钥。使用一些固定的数学运算和密钥,解密字符串。我发现了一个Delphi示例,它做的相同,但更简单;

http://www.delphifaq.com/faq/delphi/strings/f95.shtml

您可以将ekini的Python代码转换为Delphi,以便在您的Delphi应用程序中删除asm代码,如果这是您想要的。