注意这个 MytimeGetTime 函数内部的加速算法是有问题的,对有些进程只能加速,不能减速,减速后就会卡主。。。

本帖隐藏的内容

#include "StdAfx.h" //预处理文件放第一行 ,否则 有些函数 会报错

#include <windows.h>

#include <stdio.h>

DWORD dwAddrtimeGetTime; //保存真的timeGetTime函数地址

DWORD WINAPI MytimeGetTime(void)//自己写的假冒的api函数

{

// DWORD ret=2*GetTickCount(); //函数直接返回2倍加速、或3倍、4倍、

return 4*GetTickCount();//函数直接返回2倍加速、或3倍、4倍

}

//JMP跳转-自定义函数

void WriteJMP(DWORD ProcAddr,LPVOID lpData)

{

BYTE _data[5];//声明了一个字节数组_data,字节长度为5

_data[0]=0xE9;// 0xE9代表汇编指令JMP

DWORD OldPro;//声明了一个整数OldPro,保存原来的内存属性

VirtualProtect((LPVOID)(ProcAddr),5,PAGE_EXECUTE_READWRITE,&OldPro);

//VirtualProtect函数功能是修改内存属性

//第一个参数 ProcAddr 是真的API函数地址,这里作为内存地址看待

//第二个参数 5代表的是字节长度

//第三个参数 PAGE_EXECUTE_READWRITE 内存的属性设置为可读可写

//第四个参数 OldPro 保存原来的内存属性

//VirtualProtect的函数功能为:修改Api函数的内存属性-改为'可读可写

memcpy((LPVOID)(_data+1),lpData,4);//_data是变量的内存地址

// WriteProcessMemory 和 memcpy 功能是一样的都是修改内存,可以修改youxi内存也可以youxi变量的内存数据

//memcpy函数是功能是:修改内存

//第一个参数 内存地址

//第二个参数 可以是内存地址也可以具体的数值

//第三个参数 数据长度

//以上是填充 机器码字节数组data[1]...到 data[4]

// _data[0]= 0xE9; _data变量的的内存地址为(LPVOID)_data

// _data[1]= 0x70; _data变量的的内存地址为(LPVOID)_data+1

// _data[2]= 0xC7;

// _data[3]= 0xD4;

// _data[4]= 0x90;

memcpy((LPVOID)(ProcAddr),_data,5);

VirtualProtect((LPVOID)(ProcAddr),5,OldPro,&OldPro);//内存属性恢复为只读

}

//卸载HOOK -恢复timeGetTime函数头的5个字节

void UnHOOK(DWORD ProcAddr)

{

BYTE _data[5];//声明了一个字节数组_data,字节长度为5

DWORD OldPro;//声明了一个整数OldPro,保存原来的内存属性

VirtualProtect((LPVOID)(ProcAddr),5,PAGE_EXECUTE_READWRITE,&OldPro);

//修改内存属性为可读可写,修改长度为5,PAGE_EXECUTE_READWRITE表示可读可写

_data[0]= 0x83;

_data[1]= 0x3D;

_data[2]= 0x14;

_data[3]= 0x00;

_data[4]= 0xB3;

memcpy((LPVOID)(ProcAddr),_data,5);

//通过字节数组的形式把83,3D,14,00,B3原来的5个字节写入 真Api函数地址

VirtualProtect((LPVOID)(ProcAddr),5,OldPro,&OldPro);//内存属性恢复为只读

}

BOOL WINAPI DllMain(HINSTANCE hmodule,DWORD reason, LPVOID lpreserved)

{

if(reason==DLL_PROCESS_ATTACH)// 如果DLL被注入到其他进程,DLL_PROCESS_ATTACH表示注入DLL的时候

{

HMODULE hWsock32=GetModuleHandle("winmm.dll");//获取winmm.dll模块句柄

dwAddrtimeGetTime=(DWORD)GetProcAddress(hWsock32,"timeGetTime");//获取api函数timeGetTime真正的地址

DWORD tmp=(DWORD)MytimeGetTime-(dwAddrtimeGetTime+5);// 假冒的API函数地址的字节(一个4个字节)

//通过字节的形式来代表假冒api函数MytimeGetTime的地址 ,保存到变量tem里面

//公式:假冒的API函数地址的4个字节=My函数地址-(真的函数地址+5)

WriteJMP(dwAddrtimeGetTime,&tmp);//开始HOOK-修改timeGetTime函数头的5个字节

}

if(reason==DLL_PROCESS_DETACH)// 如果DLL被卸载, DLL_PROCESS_DETACH表示卸载DLL的时候

{

UnHOOK(dwAddrtimeGetTime);//卸载HOOK -恢复timeGetTime函数头的5个字节

}

return TRUE;

}

VC6.0蕉HOOK_timeGetTime 达到变速效果相关推荐

  1. 通过注册表修改VC6.0的字体【转】

    2019独角兽企业重金招聘Python工程师标准>>> 在VC6.0下更改字体,我们一般通过菜单-Tools-Options-Format来更改 但在我的win7 64位系统下这一选 ...

  2. vc6.0 简易的tcp网络讲解(二)

    至于为什么用vc6.0,我用的是xp系统,没钱 有错误请指出,本人业余的(所写的代码,尽量注释清楚)通过vc6.0的直接复制粘贴即可 (代码来源于网络, 仅供学习交流,严禁用于商业用途 ) 本人参考的 ...

  3. vc6.0 获取ip(一)

    作为新手!自己学的东西太多怕自己忘记,就做记录了(主攻单片机类):博客的文章以单片机为主,上位机为辅 最近被物联网云服务器的协议搞的醉生醉死,就打算自己做一个小型的转发服务器,娱乐使用,打算用vc6. ...

  4. VC6.0 使用小结--让开发更加快捷的vc插件

    1.VC6.0显示行号的插件 VC 6.0 没有显示行号的功能, 这个插件可以帮助显示行号, 效果不错 VC显示行号插件说明 ------------------------------------- ...

  5. 亲密接触VC6.0编译器

    亲密接触VC6.0编译器 大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解.原因是多方面的.大多数情况下,我们只停留在"使用"它,而不会想去"了解" ...

  6. [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)...

    首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code  1 2   template < class _Ty, cla ...

  7. VC6.0建立控制台程序实现PDA应用

    作者:iamlaosong 由于须要,又写起了文本界面的程序,以便PDA通过telnet连上运行. 假设是Linuxserver的话.这是非常easy的事,但是用户server是windows ser ...

  8. 在VC6.0中使用GDI+的两种办法

    朱金灿 GDI+是GDI的升级版本.在VC6.0中并没有配备GDI+的相关文件.那么如何在VC6.0使用GDI+呢?我从网上搜索了一些资料,并结合自己的使用,总结出一下两种方法.下面我各建一个MFC工 ...

  9. VC6.0快捷键一览表

    F1 显示帮助,如果光标停在代码的某个字符上,显示MSDN中相应的帮助内容 F2 书签功能: Ctrl+F2 –在某行设置一个书签(再按一次次是取消) F2 –跳到下一个书签位置 Shift+F2 – ...

最新文章

  1. 大牛程序员分享 Python基础学习笔记
  2. 深入分析SpringBoot源码如何内嵌Tomcat容器?
  3. 《Java8实战》笔记汇总
  4. 要闻君说:IBM最新量子计算机真真像个艺术品!鹅厂正式成立了自己的技术委员会哇!联想竟然也试着做了一款智能闹钟?...
  5. 把区块链作为核心技术自主创新重要突破口:华为云可以做什么?【华为云分享】
  6. opencv1-安装及资料
  7. 安装centos7步骤_Centos7下源码编译安装mysql5.7 详细步骤 小白也能安装
  8. 指针(Pointer)
  9. ListView中有Checkbox时的点击和选择问题
  10. BZOJ 3555 [CTSC2014] 企鹅QQ Hash
  11. Redis Command
  12. 我的Delphi开发经验谈(本人修改版) 收藏
  13. [微信支付]如何获取公众号AppID、AppSecret、商户号和商户API密钥
  14. 如何对全站进行死链接检测?
  15. 2019配电安规电子版_2018年配电安规.docx
  16. 黑客攻防专题九:菜鸟 Sa 注入=肉鸡
  17. 情感营销,如何打动消费者的心
  18. 产业链图谱:2021年中国5G产业链图谱|产业链全景图
  19. APP - 查询全国医院各科室排行榜(二)
  20. 年过35岁的程序员爆料:大龄程序员们的花样出路

热门文章

  1. response设置响应头
  2. plsql(轻量版)-存储函数存储过程
  3. 建造者模式源码解析(jdk-guava+mybatis)
  4. Dubbo支持的注册中心
  5. 计算机有残留office,电脑中无法安装Office2013删除残留文件的方法
  6. php flash chart,openflashchart 2.0 简单案例php版
  7. python程序文件扩展名有_python程序文件的扩展名称是什么
  8. 【重温基础】2.流程控制和错误处理
  9. chapter3.1封装和解构
  10. vue中的provide/inject的学习