有人再说修改代码算什么功能,其实除了call,就只有hoOK功能了。修改代码也是一种hoOK,可能有人不明白。我做个示范就知道了。你释放了一个技能,触发了对应的技能call【每个技能都有自己独立的技能call,这里不是说的350技能call】,你修改基址的代码。使得这个call在内部的一个call,【这个来自于代码定位】。跳转到了别的call地方。这就是一个hoOK。或许修改代码不明显,不够透彻。我们可以在基址代码地方,把代码修改为一个技能基址。,这时候你发现我们触发基址,会使用代码被替换的技能基址。这样基址换基址的hoOK相信大家比较好理解了。
想到姿势了吧,呵呵。基址替换基址在替换基址也是可行的哦。人物换人偶的。修改人偶超级技能,替换有惊喜。
直接call人偶技能也是很好玩的。
现在的call变得和一年前不一样了。以前大部分是push 压入参数,中规中矩的方法。现在是什么 mov xxx,xx
call 内存地址
或者mov xxx,xx
call 【寄存器+偏移】
或者 push xx
Jmp 【内存地址】
call → 假call 返回 真call的参数
push eax
call 内存地址。
现在奇奇怪怪的call调用。还有些call被加密得不成样子了。只能从类似原型上判断了。其实我刚刚开始也很难理解为什么mov,也变成参数了。后面我进入call了了解了,他是把指针放在寄存器了。对应的esp来查找指针。这是易叔告诉我的 ,我们需要的数据不一定要压栈。只要传入内存地址也是可行的,只是这样就不好管理堆栈平衡了。要自己记住每一个指针内存地址。push是sp指针自动加1,自动分配一个地址给你保存寄存器内存地址值。它只是直接用了寄存器内存地址。这样稍有sp,和主程序不对应就崩溃,而你修复sp是无效的。挺狠的。
push也是挺难理解的命令哦
比如 push eax,1
push ecx,2
push edI,3
这时候 eax为1,ecx为2,edI为3
pop eax
pop ecx
pop edI
这时候变成了 eax为3,ecx为2,edI为1
也就是反过来了。不要去纠结为什么这样,只要知道是反向的赋值就行了。一切是sp作怪,sp一直在最底部造成的。你说一个水壶你是不是也是这样先灌开水进去,然后盖上盖子。你要喝水了,是不是先打开盖子