前提我已经注入到目标程序。
00256CB5 mov ebx,dword ptr ds:[eax+23] 
00256CB6 mov .....
00256CB7 mov .....
00256CB8 mov .....
    反汇编得到的信息,我要HooK这句00256CB5 mov ebx,dword ptr ds:[eax+23] ,
取得ebx的值跳到我程序FUN()去处理,处理完后再让它继续执行00256CB6 mov .....下面的语句。
帮帮忙!!!!说下具体思路???procedure FUN();
begin
 showmessage('ebx');//暂时别管ebx里面的值是什么。
end;

解决方案 »

  1.   

    直接修改00256CB5 mov ebx,dword ptr ds:[eax+23]  后的语句
    jmp到一个地方,做操作,然后再jmp回来
      

  2.   

    mov ebx,dword ptr ds:[eax+23]这句的机器码只占1字节的话我想除了Hook中断外没办法截获,如果有2字节就好办些了,可以修改为一个短跳转,修改前先保存下一句代码的地址,然后找到最近的一处有5字节空闲代码空间,一个短跳转到这里,这5个字节改为call调用到你自己的Hook函数。如果直接就占有5个字节以上那更好办了,直接修改为call调用,在Hook函数中修复返回地址
      

  3.   

    更新一下
    0086E3B4   .  8B8E 52040000          mov     ecx, dword ptr [eax+452]//要Hook的语句
    0086E3BA   .  8BC3                   mov     eax, ebx
    0086E3BC   .  2BC1                   add     eax, ecx
    0086E3BE   .  50                     push    eax
    0086E3BF   .  8BCE                   mov     ecx, esi
    我这样做:
      procedure FunA();stdcall;//处理函数
      var
        r:DWORD;
      begin
        asm
          pushad
          mov ecx, dword ptr [eax+452]//要hook的
          mov r,ecx;
        end;
         showmessage(IntToStr(r));
        asm
         popad;
        end;
      end;
      procedure FunB();//HOOK与还原函数。
      var
        p:Pointer;
      begin
        p:=@FunA;//处理函数指针
        asm
         //这里应该用怎么样的代码来Hook与还原???
        end;
      end;