首页
社区
课程
招聘
[原创]用户态完美实现"变速齿轮"
发表于: 2012-7-6 21:49 42989

[原创]用户态完美实现"变速齿轮"

2012-7-6 21:49
42989

mov edx,7FFE0000h
mov eax,dword ptr ds:[edx]
mul dword ptr ds:[edx+4]
shrd eax,edx,18h
retn

cmp dword ptr ds:[76B30014],0
jnz GetTickCount
call Func_1
sub eax,dword ptr ds:[76B30018]
push 0
sbb edx,dword ptr ds:[76B3001C]
push 2710
push edx
push eax
call Func_2
add eax,dword ptr ds:[76B30020]
retn

Func_1:
mov edi,edi
mov edx,dword ptr ds:[7FFE000C]
mov eax,dword ptr ds:[7FFE0008]
cmp edx,dword ptr ds:[7FFE0010]
jnz short winmm.76B12B0B
retn

Func_2:
;// 一堆废话,又臭又长...
;// 从第一个"jnz GetTickCount"的跳转来看,
;// 只要让timeGetTime的返回值跟GetTickCount一样即可~
mov edi,edi
push ebp
mov ebp,esp
push ecx
push ecx
lea eax,dword ptr ss:[ebp-8]
push eax
push dword ptr ss:[ebp+8]
call ntdll.ZwQueryPerformanceCounter   ;// 看这个~
test eax,eax
jl 0xxxxxxxxx
cmp dword ptr ss:[ebp-8],0
je 0xxxxxxxxx
xor eax,eax
inc eax
leave
retn 4

;// ntdll.ZwQueryPerformanceCounter:
;// 这孙子直接进入内核了....
mov eax,0A5
mov edx,7FFE0300
call dword ptr ds:[edx]
retn 8

;// 看win源码知道, 这孙子进内核后又会调用
;// "KeQueryPerformanceCounter"
;// 而这个内核函数做的也只是查询下_KUSER_SHARED_DATA中的东西

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (34)
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
分析得很不错,向楼主学习了:
2012-7-6 22:14
0
雪    币: 292
活跃值: (153)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
Powerless

给人看裸体~  就露个痛快呗~  还遮层纱
2012-7-6 22:16
0
雪    币: 45
活跃值: (51)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
只能看这么多了....

钩子函数都发上来了.. 自己写个简单地button 挂上钩子就完了嘛....

看雪上讲钩子的帖子也很多啊....

挂钩子主要注意下去掉代码的写保护属性不就OK么?

我不能发源码是因为这个钩子模板属于公司机密, 我泄露了这个那个... 丢了饭碗咋搞呢?~~~
2012-7-6 22:43
0
雪    币: 45
活跃值: (51)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
.
.
.
.
               
                                                                  
                期待大大过来一起研究 内核下如何实现变速齿轮啊 ~~
                                                                  
               
.
.
.
2012-7-6 22:45
0
雪    币: 270
活跃值: (97)
能力值: ( LV8,RANK:140 )
在线值:
发帖
回帖
粉丝
6
顶一下 感谢分享
2012-7-7 10:11
0
雪    币: 5196
活跃值: (3432)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
收藏了。~~~
2012-7-7 12:29
0
雪    币: 193
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
联系我QQ:2437591041
有事找你谈。
2012-7-7 12:49
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
9
驱动做系统级加速需要hook 2个函数~
2012-7-7 12:58
0
雪    币: 45
活跃值: (51)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
根据看雪上的资料,
我Hook了 nt!KeUpdateSystemTime,
修改其对_KUSER_SHARED_DATA(0xffdf0000)结构的更新

没加速效果, 倒是系统变卡了 变慢了...

请问还有那个函数要Hook?
2012-7-7 13:47
0
雪    币: 1040
活跃值: (1293)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
恭喜你成功了啊,根据相对论,系统卡了,不就是软件加速了么……
2012-7-7 17:00
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
12
系统也是软件,嘿嘿。
2012-7-7 21:14
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
13
刚才看到一篇文章很不错,分享下给同样需要的朋友:

精确获取时间(QueryPerformanceCounter)
http://www.cnblogs.com/sifenkesi/archive/2011/06/01/2065673.html
2012-7-7 21:44
0
雪    币: 5327
活跃值: (3719)
能力值: ( LV13,RANK:283 )
在线值:
发帖
回帖
粉丝
14
多谢楼主分享
2012-7-7 22:39
0
雪    币: 45
活跃值: (51)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
问题是, 所有的程序也跟着系统一起卡卡的.....
2012-7-7 23:52
0
雪    币: 602
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
卡卡更健康//
2012-7-8 15:56
0
雪    币: 2
活跃值: (199)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
感谢楼主能把自己的东西发出来,才使其他人一起进步。

感谢楼主的共享精神,思路收下了
2012-7-8 17:20
0
雪    币: 2
活跃值: (199)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
大白天的就出来了啊,快来抓住老V啊,晚了就跑了
2012-7-8 17:21
0
雪    币: 167
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
前段时间刚逆了一个外挂驱动,写了一个内核加速器,但发现如果速度过快,刚加速时屏幕会黑屏一下。
2012-7-9 01:10
0
雪    币: 69
活跃值: (41)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
20
请参考CheatEngine中的speedhacker.c / .h
2012-7-9 03:56
0
雪    币: 105
活跃值: (38)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
21
少年不错。~!。。学习下。。 哈哈,猜猜哥是谁。
2012-7-9 09:38
0
雪    币: 45
活跃值: (51)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
22
谢谢...
刚把 CE的源码 下下来看了下...

CE是delphi开发的..
不过确实有speedhacker.pas /.dpr

看了下, 也是在三环下 对timeGetTime GetTickCount, QueryPerformanceCounter 这三个函数进行挂钩了.... 这个我已经实现了.    跟我这个帖子说的是一样的....
CE源码片段:(timeGetTime的钩子过程函数)

implementation

function speedhackversion_GetTickCount: DWORD; stdcall;
var x: dword;
begin
//also used for timeGetTime
  x:=TGetTickCount(realgettickcount);
  //time past since activation, mulitplied by speed multiplier
  result:=trunc((x-initialtime)*speedmultiplier)+initialoffset; 

end;


现在纠结的是内核态下实现 加速整个操作系统的 加速器....
2012-7-9 11:39
0
雪    币: 952
活跃值: (1821)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
内核这个方法应该可用
替换SharedUserData
http://bbs.pediy.com/showthread.php?t=38180
2012-7-10 00:54
0
雪    币: 2
活跃值: (199)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
经测试,没有变速齿轮好用。。。
2012-7-10 10:54
0
雪    币: 225
活跃值: (218)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
通过timer计时,怎么HOOK?

没有实现,不完美啊
2012-7-10 11:00
0
游客
登录 | 注册 方可回帖
返回
//