似乎无法弄清楚这是如何工作的

时间:2013-05-09 12:50:52

标签: winapi assembly x86

我正在尝试确定此挑战代码中的密码,但无法弄清楚它是如何工作的。有没有人有关于如何弄清楚它的作用的一些提示?

.text:00401000                 public start
.text:00401000 start:
.text:00401000                 mov     esi, offset loc_401013
.text:00401005
.text:00401005 loc_401005:                             ; CODE XREF: .text:00401011j
.text:00401005                 cmp     esi, offset byte_40105F
.text:0040100B                 jz      short loc_401013
.text:0040100D                 xor     byte ptr [esi], 0CDh
.text:00401010                 inc     esi
.text:00401011                 jmp     short loc_401005
.text:00401013 ; ---------------------------------------------------------------------------
.text:00401013
.text:00401013 loc_401013:                             ; CODE XREF: .text:0040100Bj
.text:00401013                                         ; DATA XREF: .text:starto
.text:00401013                 xor     bl, al
.text:00401015                 test    eax, 44CD8DFDh
.text:0040101A                 or      eax, edx
.text:0040101C                 jnp     short near ptr 400FE1h
.text:0040101E                 db      2Eh
.text:0040101E                 into
.text:00401020                 mov     esp, [esi]
.text:00401022                 xor     eax, 9936B34Ch
.text:00401027                 mov     edi, 0DBB8A8B8h
.text:0040102C                 cmpsd
.text:0040102D                 int     0A5h            ; used by BASIC while in interpreter
.text:0040102F                 sub     ebp, 0CDA5CD8Dh
.text:00401035                 in      eax, dx
.text:00401035 ; ---------------------------------------------------------------------------
.text:00401036                 dw 0CD8Dh
.text:00401038                 dd 0D832CDA7h, 0CD8DFD55h, 0CDA7D926h, 8DED81A5h, 0EDEDA5CDh
.text:00401038                 dd 0CDA7CD8Dh, 0FD55D832h, 0CDA7CD8Dh, 0FDA5D832h
.text:0040105C                 db 8Dh, 0CDh, 0Eh
.text:0040105F byte_40105F     db 0EEh                 ; DATA XREF: .text:loc_401005o
.text:00401060                 dd 90EEEEEEh, 90h, 66h dup(0)

1 个答案:

答案 0 :(得分:3)

代码只是将loc_401013:byte_40105F的每个字节与0xCD进行异或,然后跳转到该代码的开头,这使得反汇编变得毫无意义。要查看代码在做什么,您需要使用0xCD对该范围内的每个字节进行异或,然后重新进行反汇编。