我在 IDA 中看到了很多进出指令。我知道那些应该做什么,但我不知道如何对待它们,而且我在理解代码方面没有取得任何进展。
简短示例:我当前任务的第一个说明是:
seg000:00000000 mov edx, 61666A1Fh
seg000:00000005 fincstp
seg000:00000007 fnstenv byte ptr [esp-0Ch]
seg000:0000000B pop esi ; EIP
seg000:0000000C sub ecx, ecx
seg000:0000000E mov cl, 33h ; '3'
seg000:00000010 xor [esi+12h], edx
seg000:00000013 add edx, [esi+12h] ;
seg000:00000016 xor ecx, 0FFFFFF96h
seg000:00000019 test [ecx+esi*8+957C08Fh], dl
seg000:00000020 push eax ; ??????
seg000:00000021 mov bl, 0DEh ; '¦'
seg000:00000023 in al, dx
seg000:00000024 popa
seg000:00000025 loope near ptr 0FFFFFFACh
我有点迷失05h
-0Bh
因为这是我第一次遇到 FPU 指令,但我认为这ESI
应该指向指向的位置EIP
。
我的主要问题是关于23h
.
in al, dx
应该AL
从端口加载一个字节6A1Fh
吗?这是否与任何相关,或者这样的代码是否应该让我的工作更加努力或隐藏某些东西?也许它是加密的,并且在某个时候某些解密算法会起作用。或者也许这不应该被视为代码?