如果是你Hook其它程序的数据包,如果长度发生变化是有问题的,有的协议是根据长度来检测的。

解决方案 »

  1.   

    这是有前提的,我以前在XP32位下,用delphi7一直是没问题的,在64位win7下,我仍然用delphi7处理,生成的程序和64位win7 Delphi2010一样的现象,所以最终怀疑是win7下的机制发生了变化
      

  2.   

    是不是新版的字符串是默认unicode方式了
      

  3.   

    有可能是Unicode的问题,建议用AnsiChar 或 AnsiString 试试
      

  4.   

    跟64位应该没有关系,delphi7只能编译出win32的程序,在win64下是以wow64环境运行的,并且你win32的程序只能hook win32的进程,既然大家都市win32环境,那么问题就跟64位没关系了。想想是不是其他的原因。
      

  5.   


    这一点可以排除,我全部改用的AnsiChar,发送的包是加密发出去的,服务端要解密,正确才能识别。
    我的情况是发送出去,服务端可以正确解密,并发送回包。但再就不会进行发包操作了
      

  6.   


    但是程序在winxp下生成并运行是没有问题的,我是指使用了加解密函数使数据包变化了的程序。在win7下,我测试过,即使不加密,哪怕我只在数据包中添加了两字节的无用数据发出去,情况也是一样的
      

  7.   

    不是字符串宽度的问题了那可能是加密算法的乘法溢出在32、64位下的结果不一样了
    不要使用integer,而是使用确定的int32(自定义)或int64
      

  8.   


    结果是一样的,肯定没有错误,已经做过详细的调试了。这几天翻阅资料,应该是win7下的一种特权保护机制在做怪
      

  9.   


    加密的是截获send函数中的buf数据,不是把数据加密后然后通过send发出去
      

  10.   

    肯定是用了strlen之类的函数来判断大小吧 
    这个函数遇到0就会报数 也就是断了  
      

  11.   

    我有类似的问题,不过没楼主场景那么复杂,在xp下一个socket通信程序没有问题,放到win7/win8上,就会在完成一次塔发送接受通讯后,报sokcet错误消息
      

  12.   

    大神   win7  64  如何 hook  send  recv  谢谢. 一直 失败. 从未成功.   解救命啊啊啊啊
    qq  964489899  求老师 指点. 菜鸟