3
2008-10-15 13:44
根据图片信息用IDA模拟结果如下:
10460 E9 17 01 00 00 90 90 90 90 90 8D 85 38 FF FF FF
10470 50 6A 14 68 40 22 01 00 E8 23 FE FF FF 0F 82 07
10480 00 00 00 0F 83 01 00 00 00 E8 8D 85 38 FF FF FF
10490 50 8D 85 98 FD FF FF 50 FF 15 B4 20 01 00 8D 85
104A0 78 FD FF FF 50 8D 85 98 FD FF FF 50 FF 15 AC 20
seg000:00010460 E9 17 01 00 00 jmp loc_1057C
seg000:00010460 ; ---------------------------------------------------------------------------
seg000:00010465 90 db 90h ;
seg000:00010466 90 db 90h ;
seg000:00010467 90 db 90h ;
seg000:00010468 90 db 90h ;
seg000:00010469 90 db 90h ;
seg000:0001046A ; ---------------------------------------------------------------------------
seg000:0001046A 8D 85 38 FF FF FF lea eax, [ebp-0C8h]
seg000:00010470 50 push eax
seg000:00010471 6A 14 push 14h
seg000:00010473 68 40 22 01 00 push offset unk_12240
seg000:00010478 E8 23 FE FF FF call loc_102A0
seg000:0001047D 0F 82 07 00 00 00 jb near ptr loc_10489+1
seg000:00010483 0F 83 01 00 00 00 jnb near ptr loc_10489+1
seg000:00010489
seg000:00010489 loc_10489:
seg000:00010489
seg000:00010489 E8 8D 85 38 FF call near ptr 0FF398A1Bh
seg000:00010489 ; ---------------------------------------------------------------------------
seg000:0001048E FF db 0FFh
seg000:0001048F FF db 0FFh
seg000:00010490 ; ---------------------------------------------------------------------------
seg000:00010490 50 push eax
seg000:00010491 8D 85 98 FD FF FF lea eax, [ebp-268h]
seg000:00010497 50 push eax
seg000:00010498 FF 15 B4 20 01 00 call ds:dword_120B4 ; RtlInitUnicodeString
seg000:0001049E 8D 85 78 FD FF FF lea eax, [ebp-288h]
seg000:000104A4 50 push eax
seg000:000104A5 8D 85 98 FD FF FF lea eax, [ebp-268h]
seg000:000104AB 50 push eax
seg000:000104AC FF 15 AC 20 xx xx call dword ptr ds:xxxx20ACh
其关键代码为:
seg000:0001047D 0F 82 07 00 00 00 jb near ptr loc_10489+1
seg000:00010483 0F 83 01 00 00 00 jnb near ptr loc_10489+1
seg000:00010489
seg000:00010489 loc_10489:
seg000:00010489
seg000:00010489 E8 8D 85 38 FF call near ptr 0FF398A1Bh
seg000:00010489 ; ---------------------------------------------------------------------------
seg000:0001048E FF FF dw 0FFFFh
seg000:00010490 ; ---------------------------------------------------------------------------
seg000:00010490 50 push eax
将00010489处的call指令取消(U命令),从其下一个字节0001048A开始编码(C命令)得到以下结果:
seg000:0001047D 0F 82 07 00 00 00 jb loc_1048A
seg000:00010483 0F 83 01 00 00 00 jnb loc_1048A
seg000:00010483 ; ---------------------------------------------------------------------------
seg000:00010489 E8 db 0E8h ; ?
seg000:0001048A ; ---------------------------------------------------------------------------
seg000:0001048A
seg000:0001048A loc_1048A:
seg000:0001048A
seg000:0001048A 8D 85 38 FF FF FF lea eax, [ebp-0C8h]
seg000:00010490 50 push eax
可见call指令是假的,即E8为费字节,也就是所谓的“花指令”。