能力值:
( LV9,RANK:165 )
2 楼
沙发,不知道有谁会反汇编看看,自己暂时没空练练手。。。。本人菜鸟一个
能力值:
( LV2,RANK:10 )
3 楼
晕,还加UPX....
能力值:
( LV2,RANK:10 )
4 楼
加个压缩壳不一定是为了保护什么,也可以是效率什么
,先谢谢你们了!
能力值:
( LV3,RANK:20 )
5 楼
在做保护之前,请先确保你自己的程序能在所有windows系统下面运行。XP确实可以,但是2K就不能运行,因为它的send的开头不是
mov edi, edi
push ebp
mov ebp, esp
而你的程序貌似认定程序入口必定如此,于是2k就GameOver了,其他Vista和Win7我没有测试过。
能力值:
( LV2,RANK:10 )
6 楼
谢谢您的反馈!菜鸟本人经验不足,测试没有考虑版本问题,对于保护库的调用约定是可变的,由于本人常在XP上工作,可能send和recv的调用约定已是__stdcall,Win2000很少接触,也许它的调用约定是__cdecl,至于inline hook 是会做判断处理的(错误应该不会出现在我测试的Hook上
),所以我想您的错误应该是出栈的错误,这个问题只要做代码的时候判断下操作系统版本,然后根据不同的版本给出库保护它们的调用约定就不会出现错误了,因为本人没做任何系统版本处理
,还有关于库保护通用性问题,我没有做任何固定设置,都是设计者自己设置或选择自动设置,库调用属性初始化为__stdcall约定,见笑了,再次感谢您回馈!
能力值:
( LV3,RANK:20 )
7 楼
调用约定是不可能改变的,都是stdcall,我跟踪了下2k出错的原因是,第一次调用send的那个0x00401C38的call eax,其eax是0,于是出错。而且就算XP下面在你的dll加载前,先修改了send的入口代码,比如改成push xxxx+ret这种地址无关的跳转代码,在你Hook以后,你的0x00401CB2这处代码依然是mov edi, edi+push ebp的那种,而0x00401CB2不会是临时计算生成的代码,也就是说你已经认定入口必定是这个样子,才会这么做。这在不同版本的操作系统中是得不到保证的。
能力值:
( LV3,RANK:20 )
8 楼
你另一处HOOK生成的代码,前八个字节的内容也是固定的,只是后面有部分是复制过来的,同样也是依赖特定的操作系统。
能力值:
( LV2,RANK:10 )
9 楼
额。。。我确实没有固定任何值,值都是根据我设定的大小自动获取的,不过你说的错误我听懂了一点,关于push,ret的跳转特征在我这里最新的版本里面已经更新了,上传的测试版本有待更新呢
,至于您说的eax是0的错误问题比较含糊呢
,关于核心方面的东西可以以消息的方式发给我,有需要的话我可以提供库调用的相关代码,你看后就明白了
,可能我理解能力有问题
,还谢谢您的反馈!
哦,是的,我那两个inline hook确实固定了ASM,你我看这脑袋把问题老看到库里面去了,谢谢了
!