首页
社区
课程
招聘
[求助]Win7 x64Themida的GetTickCount
发表于: 2012-4-24 00:26 4912

[求助]Win7 x64Themida的GetTickCount

2012-4-24 00:26
4912
网上找了很久。

就一篇 softworm 发表于05年的。
<<对抗GetTickCount的一种方法 >>
地址:http://bbs.pediy.com/showthread.php?threadid=16913

由于,想有个一劳永逸的方法。结果就有着个帖子了。

文章的方法 是 替换0x7FFE0000 的PTE。把PTE重指向自己的UserShareData。

但是现在UserShareData 内容不变的话。软件是不能正常运行的。

所以。做了个DLL+Sys。

Dll.的任务 是 分配一个 4K的页。 LONG ShareData[1024].

接着 memcpy(ShareData,(PVOID)0x7FFE0000,4096);

再创建一个线程线程。来维护 ShareData。总而言之 这线程非常能仿真的模拟0x7FFE0000

为什么要创建一个线程和维护ShareData.

当你下断,断下的时候。 创建的线程也会 因为断下而暂停。所以恢复的时候ShareData线程也随着恢复。GetTickCount就没什么大问题了。

但是现在问题 是 加载DLL到目标软件去 一切正常。。

用CE下断。 如果触发断点后。5-10S内不按F9 。 就会BOSD、

BOSD原因是memory management.  好像问题由于0x7FFE1001 .但是
0x7FFE0FFF后是没有内容的了。

大概代码。

DLL:

LONG UserShareData[1024]={0};

DWORD WINAPI ShareData(LPVOID)
{
          UserShareData[n]++; 之类的。模拟0x7FFE0000;
}

VOID SetPTE()
{
把 UserShareData地址传入驱动。
}

SYS:

取地址 PTE。的方法。在逆Win7 X64 MmIsAddressValid.是。
mov rdx,904C0000000h
mov    rax,rcx
shr     rax,12h
and     eax,3FFFFFF8h
sub     rax,rdx
ret

还有个是我在看CE的x64驱动代码是看到的。

pagebase=0xfffff68000000000ULL;
PTE=((FakeShareData & 0xFFFFFFFFFFFFULL) >> 12) *8 + pagebase;

两个计算方法计算出来的是一样的。

FakePTE=((FakeShareData & 0xFFFFFFFFFFFFULL) >> 12) *8 + pagebase;
RealPTE=((0x7FFE0000 & 0xFFFFFFFFFFFFULL) >> 12) *8 + pagebase;

接着就

memcpy(RealPTE,FakePTE,32);

同时还把RW 位。设置为0。因为直接cpy.

-。-我的对抗GetTickCount。就是这样。

求各位哥哥姐姐。指点迷津啊。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//