通过辨别队伍的编号解决问题

alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
label(xxx) // 添加一个新标签

newmem: //this is allocated memory, you have read,write,execute access
// 你的代码
cmp [ebx+04+0c],01 // if [ebx+04+0c] == 01, then => xxx, else => originalcode
je xxx

originalcode:
mov [ebx+04],eax

xxx:
fldz 

exit:
jmp returnhere

"Tutorial-i386.exe"+288D9:
jmp newmem
returnhere:

还有种方法,这种方法更使用与大多数游戏,参考视频 (opens new window)

通过分析结构找到不同的点,然后在进行区分

[ENABLE]

aobscanmodule(INJECT,Tutorial-i386.exe,89 43 04 D9 EE) // should be unique
alloc(newmem,$1000)

label(code)
label(return)
label(xxx)

newmem:
  cmp [ebx+10],1 // 如果等于1,说明不是敌人直接跳过,否则就执行秒杀
  je xxx

code:
  // mov [ebx+04],eax
  mov [ebx+04],0
  fldz 
  jmp return

xxx:
  fldz
  jmp return

INJECT:
  jmp newmem
return:
registersymbol(INJECT)

[DISABLE]
INJECT:
  db 89 43 04 D9 EE

unregistersymbol(INJECT)
dealloc(newmem)

关于一条指令可能会影响很多值的情况,通过找差异来判断当前处理的为那个值,这些差异可能存在内存偏移中,寄存器中,堆栈中,XMM0-XMM15,建议观看此视频 (opens new window)