我正在尝试确定此挑战代码中的密码,但无法弄清楚它是如何工作的。有没有人有关于如何弄清楚它的作用的一些提示?
.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)
答案 0 :(得分:3)
代码只是将loc_401013:
到byte_40105F
的每个字节与0xCD进行异或,然后跳转到该代码的开头,这使得反汇编变得毫无意义。要查看代码在做什么,您需要使用0xCD对该范围内的每个字节进行异或,然后重新进行反汇编。