0
10002579   . 6A 00          PUSH 0
1000257B   . 68 59020000    PUSH 259
10002580   . 8B11           MOV EDX,DWORD PTR DS:[ECX]
10002582   . 6A 00          PUSH 0
10002584     6A 05          PUSH 5
10002586     50             PUSH EAX
10002587     FF52 18        CALL DWORD PTR DS:[EDX+18]
1000258A     84C0           TEST AL,AL
1000258C     75 2B          JNZ SHORT Pigeon.100025B9
1000258E     8B4E 10        MOV ECX,DWORD PTR DS:[ESI+10]
10002591   . 68 D5070000    PUSH 7D5
10002596   . 68 0000FF00    PUSH 0FF0000
1000259B   . 68 90640110    PUSH Pigeon.10016490     ;ASCII "STR_PIGEON_SEND_ERR_NOEMONEY"
100025A0   . 8B39           MOV EDI,DWORD PTR DS:[ECX]
100025A2   . FF15 04300110  CALL DWORD PTR DS:[<&Common.CnStrGet>]   ;  Common.CnStrGet
100025A8   . 8B9424 5C04000>MOV EDX,DWORD PTR SS:[ESP+45C]
100025AF   . 83C4 04        ADD ESP,4
100025B2   . 50             PUSH EAX
100025B3   . 52             PUSH EDX
100025B4   . E9 30020000    JMP Pigeon.100027E9
100025B9   > 8B46 10        MOV EAX,DWORD PTR DS:[ESI+10]

我需要将 10002584 上的 push 5 更改为 push c350,但在 ollydbg 上出现未知标识符错误

当我使用 0xC350 时,下面的代码会发生变化,并且 dll 文件无法正常运行。

怎么做 ?

4

1 回答 1

2

push 0xc350显然需要超过 2 个字节(即 的长度push 5)进行编码。它需要 5 个字节。

您不能将这 5 个字节压缩到 2 个字节的空间中。如果您尝试,您将覆盖并损坏以下说明:

10002586     50             PUSH EAX
10002587     FF52 18        CALL DWORD PTR DS:[EDX+18]

您需要将push 5(以及可能的以下说明)替换jmp为将具有push 0xc350(以及被该 覆盖的说明jmp,如果有的话)并jmp返回的位置。

于 2012-08-15T13:45:07.493 回答