当前位置:首页 » 编程软件 » 如何编译ssdt

如何编译ssdt

发布时间: 2022-10-04 02:02:52

A. DSDT和SSDT联合编译发生如下错误,该如何处理,求教

发生如下错误

B. SSDT 编译报错 大神们能给我解决下么

SSDT 编译报错
IP地址错误修复: 1、右击网上邻居,属性; 2、右击本地连接,属性。选中“Internet协议TCP/IP”,属性。 3、里面会有两个选项“自动获取IP地址”和“使用下面的IP地址”,选中“使用下面的IP地址”,然后在下面的框里输入IP、子网、网关和DNS就可以了。
需要win 7 sp1系统和ie10或者IE11.
Win7上安装vs2015 RC(候选发布版)失败完美解决方法,包含了Win7 SP1下载地址,IE10下载地址,IE11下载地址,在windows 7 操作系统上安装Visual Studio 2015,发生下面的错误:

解决方案:
可以手动安装目录packages\Patch 下根据操作系统32,64 位系统安装对应的补丁:

安装完成补丁KB2999226,就可以正常的安装Visual Studio 2015
失败条件1:
Windows NT版本为6.3,且WindowsBuildNumber < 9600,则不能安装。NT6.3是指windows 8.1系统或Windows Server 2012 R2,6.x是内核版本。如果是这个操作系统版本,且build版本号低于9600,则不能安装。
失败条件2:
兼容模式未开启,如果系统不是最新系统,则需要开启兼容模式,否则无法安装。
失败条件3:
操作系统是Win7以上版本,或者是Win7版本并且SP包大于等于1的其他情况,则无法安装。这个表示,如果是Win7,则必须安装SP1及以上版本的补丁包。如果你的Win7没有安装补丁包,请先安装,否则无法安装VS2015.如果是更高版本的操作系统,那么就不存在这个问题。

C. 易语言怎么编写远程控制啊像灰鸽子的那种!最好有源代码!

gh0st远控软件采用驱动级RESSDT过主动,svchost参数启动,替换系统服务的方式工作的,工作方式较为先进,美中不足的部分是没有进行驱动级或用户级隐藏,当然这部分可以添加进去。编码利用了VC的编程环境。
一、环境配置
编译环境一定要配置好:DDK+SDK+VC6,DDK用来编译sys文件的,SDK+VC6是用来编译工程的,配置部分比较简单,网上有很多资料,这里不再详述,有兴趣的朋友也可以查看DDK和SDK的相关帮助。
二、特征码定位简述
杀毒软件查杀木马的原理基本是根据特征查杀的,被查杀的部分我们称之为特征码,所以我们可以利用特征码定位工具MyCLL定位出病毒的特征码位置,定位工具原理是将被扫描木马分块,利用分段填充的方式,匹配杀软的特征值,找到杀软查杀病毒的位置。
定位出特征码,如何反向找到源码中的对应位置呢?请看下面分析,
三、二进制文件与源码定位之map文件利用
map文件是二进制和源码之间对应的一个映射文件。
我们假设根据第三步我们定位出了病毒的特征码:
病毒名称 特征码位置 内存地址
svchost.dll 000038AA_00000002 100044AA
svchost.dll 00005F98_00000002
第一步设置VC编译环境生成Map文件。
在 VC 中,点击菜单“Project -> Settings”选项页(或按下 Alt+F7),选择 C/C++ 选项卡,并在最下面的 Project Options 里面输入:/Zd ,然后要点击 Link 选项卡,选中“Generate mapfile”复选框,并在最下面的 Project Options 里面输入:/mapinfo:lines,表示生成 MAP 文件时,加入行信息。设置完成。
第二步编译VC工程,设置活动工程编译即可,这个不用说明。这个步骤完成后,在release(或debug)目录,多了一个.map文件(比如svchost.map)。
第三步打开map文件(用UE或文本编辑器打开都行),形式如下:
(begin)
Timestamp is 488fcef2 (Wed Jul 30 10:16:18 2008)
Preferred load address is 10000000
---------------------------------------------------------------------------1----(为方便说明,wrw添加)
Start Length Name Class
0001:00000000 00010a50H .text CODE
0001:00010a50 00000485H .text$x CODE
0002:00000000 000004c8H .idata$5 DATA
......
0003:00000010 00000004H .CRT$XIZ DATA
0003:00000020 00001a50H .data DATA
0003:00001a70 00000688H .bss DATA
0004:00000000 000000a8H .rsrc$01 DATA
0004:000000b0 00000cf0H .rsrc$02 DATA
----------------------------------------------------------------------------2---(为方便说明,wrw添加)
Address Publics by Value Rva+Base Lib:Object
0001:00000000 ??0CAudio@@QAE@XZ 10001000 f Audio.obj
0001:000000d0 ??_GCAudio@@UAEPAXI@Z 100010d0 f i Audio.obj
0001:000000d0 ??_ECAudio@@UAEPAXI@Z 100010d0 f i Audio.obj
0001:000000f0 ??1CAudio@@UAE@XZ 100010f0 f Audio.obj
0001:000001e0 ?getRecordBuffer@CAudio@@QAEPAEPAK@Z 100011e0 f Audio.obj
0001:00000240 ?playBuffer@CAudio@@QAE_NPAEK@Z 10001240 f Audio.obj
0001:000002c0 ?InitializeWaveIn@CAudio@@AAE_NXZ 100012c0 f Audio.obj
......
0001:00003310 ?SendToken@CFileManager@@AAEHE@Z 10004310 f FileManager.obj
0001:00003320 ?UploadToRemote@CFileManager@@AAE_NPAE@Z 10004320 f FileManager.obj
0001:00003440 ?FixedUploadList@CFileManager@@AAE_NPBD@Z 10004440 f FileManager.obj
0001:00003670 ?StopTransfer@CFileManager@@AAEXXZ 10004670 f FileManager.obj
0001:00003730 ?CreateLocalRecvFile@CFileManager@@AAEXPAE@Z 10004730 f FileManager.obj
......
----------------------------------------------------------------------------3---(为方便说明,wrw添加)
Line numbers for .\Release\FileManager.obj(E:\vtmp\gh0st3src\Server\svchost\common\FileManager.cpp) segment .text
17 0001:00002630 20 0001:0000267f 21 0001:00002698 24 0001:000026d0
25 0001:000026f8 26 0001:0000273c 29 0001:000027d0 33 0001:000027ee
77 0001:000027f8 36 0001:000027fb 37 0001:00002803 77 0001:0000280d
......
532 0001:0000340f 534 0001:00003414 537 0001:00003428 540 0001:00003440
546 0001:0000345d 547 0001:00003487 548 0001:00003490 549 0001:00003492
551 0001:0000349e 552 0001:000034b8 553 0001:000034cb 554 0001:000034d4
558 0001:000034de 560 0001:000034e9 563 0001:000034ee 564 0001:00003506
......
(end)
我们看下,定位svchost.dll 的第一个特征码内存地址为:100044AA,在第2块中,我们可以找到RVA+BASE与之很接近的是
0001:00003440 ?FixedUploadList@CFileManager@@AAE_NPBD@Z 10004440 f FileManager.obj
这样我们可以定位到FileManager.cpp中的FixedUploadList函数,是不是范围缩小了?
下面我们再缩小代码行
利用这个公式:特征码行偏移 = 特征码地址(Crash Address)- 基地址(ImageBase Address)- 0x1000
看起来好像很难,其实很简单,我们将100044AA去掉内存基址10000000,再减1000,因为PE很多从1000开始,可以得到代码偏移地址为34AA。到第3块中找对应的代码行。
偏移地址34AA在(551 0001:0000349e 552 0001:000034b8 )中间,也就是551行和552行中间,我们到源程序中查找第551行:
wsprintf(lpszFilter, "%s%s*.*", lpPathName, lpszSlash);
这样就定位出源代码了,要怎么修改就怎么修改它就可以了。
四、实战免杀
A、卡巴免杀
首次编译后,先做卡巴的免杀。卡巴杀sys文件和dll,当然也就杀包装它们的install.exe,最后卡巴还杀生成的sever,我这里说杀生成好的server不是和前面的特征码重叠的地方,而是杀配置信息。
第一步、sys免杀
sys重新编译后,增加了输入表的函数,同时系统不同,造成很多地方不同于原特征,顺利通过卡巴、金山、小红伞等杀软。
第二步、svchost.dll免杀
特征码定位MultiByteToWideChar和"gh0st update"两个位置。这里是通过第3步map文件得出的。
卡巴怕加花指令, 这个函数MultiByteToWideChar的调用上,可以在这个函数前面随便加几句无效语句就可以通过卡巴杀软。
字符串调用"gh0st update" ,这个是用于更新用的 ,如果不要在线更新,直接把这个语句所在代码块删除;嘿嘿,其实搜索工程替换这个字符串为其他的字符串就可以了^_^,这个方法同时可以过金山杀软。
第三步、server免杀
卡巴定位在最后的配置信息,采取跳转显然是不行的,采用加花的办法,在写入AAAAAA配置信息之前,随便写些东西,就可以做server免杀。
卡巴免杀完成!
B、Avast免杀
最新的avast杀软再查杀1下,杀install.exe和svchost.dll(也就是杀生成的文件和其中的资源文件),接着做它的源码免杀。
定位在特征字符串%02d/%02d/%02d和“SYSTEM\CurrentControlSet\Services\%s”两个地方。
解决方案:
1、svchost.dll的特征码定位在键盘记录KeyboardManager.cpp文件中的SaveInfo(char *lpBuffer)函数。特征字符串%02d/%02d/%02d,也就是我们看到键盘记录的日期,修改之,修改的方法很多,将其改为[%d/%d/%d %d:%d:%d] ,编译即可通过avast杀软。
2、install的特征码定位在“SYSTEM\CurrentControlSet\Services\%s”,对应文件是install.cpp里的InstallService函数,修改大小写,编译即可通过免杀。

五、添加垃圾代码的小方法
垃圾代码要移动特征码所在的位置,不要跑到堆栈中了,这样的代码没有用。可以采取添加for循环,做计数,简单统计,采用局部变量,不改变后面的逻辑为宜。
添加输出表的方法:
有杀输出表的,可以在生成的svchost.dll上添加空函数 ,但是每次编译都要修改1次资源 ,其实我们在源码上添加如下语句:
extern "C" __declspec(dllexport) bool JustTempFun();//声明
……
extern "C" __declspec(dllexport) bool JustTempFun() //实现
{
return false;
}
编译后,输出表就被改变了,有的杀软就可做到代码免杀。

六、gh0st自动生成6to4ex.dll的修改
看到好多站友提问自动生成6to4ex.dll的问题,有热心站友也提出了自己的见解 ,我感觉有些人提出的解决方案不完全正确,有可能造成刚入手人误解,我根据自己的理解说明1下。
gh0st服务端是通svchost -netsvcs启动的,所以程序要利用netsvcs 服务,服务端也就是根据netsvcs生成的,故不能说服务端生成是随机的,相对于大多数系统来讲,基本是固定的,下面看分析。
查看install.cpp里面的InstallService()方法,首先遍历HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Windows NT\CurrentVersion\Svchost中的服务项,查找到一个服务后,程序采取替换服务的方法,将原服务删除,然后生成对应服务项+ ex.dll的文件替换原服务,6to4服务一般排在第一位,6to4服务是一种自动构造隧道的方式,作用在于只需要一个全球惟一的IPv4地址便可使得整个站点获得IPv6 的连接,这个服务对一般人来讲,基本闲置,所以我们的程序就把6to4服务给替换掉,同时在windows\system32\目录下生成 6to4ex.dll,以后启动就是6to4ex了,如果把这个服务跳过去,就依次向下生成Ias、Iprip等服务啦,如果netsvcs项没有可以替换的服务,则程序将自己添加1个服务,名称就是由 AddsvchostService()方法产生的netsvcs_0x%d。
这样说不知道关心服务名称的明白了不?
这个不能说是技术问题,但是小技巧问题可以从这里产生,我不知道其他人的360是怎么过的,但是我觉得可以提示1下的是,如果是360默认系统安全的服务,它肯定不会报不安全,替换闲置的系统安全的服务则通过360的效果要好的多
本文来自: 华夏黑客同盟论坛 本文详细地址:http://bbs.77169.com/read.php?tid=255676

D. SSDT HOOK 问题

都什么年代了还hook ssdt ???

E. 如何在windbg调试驱动时下断点需要在源程序修改吗

1.编译好你的驱动,假设名为ShowSSDT.sys,并把驱动符号文件ShowSSDT.pdb发送到MySysSymbols文件夹下(之前设定的自己的调试符号文件夹)
2.启动虚拟机,选择调试方式进入系统
3.在Windbg中按下Ctrl+Break,输入bu ShowSSDT!DriverEntry(设置断点)回车确认然后输入g命令继续执行
4.把ShowSSDT.sys拖到虚拟机中(也可以通过网上邻居将驱动文件复制过去\\192.168.1.22\C$),在虚拟机系统中启动InstDrv,加载此驱动(也可以使用SRVINSTW.EXE将驱动作为服务安装到系统,然后使用net start 驱动名或是 net stop 驱动名)
5.回到Windbg窗口,如果一切正常的话,你会看到已经中断在ShowSSDT.sys的入口代码处了
接下来,要单步还是要下断点、要继续执行什么的,就全由你来作主了~~

F9设置断点,在按一次则取消断点
F10单步前进,即单步执行,遇到函数(call指令),不会进入函数内部,而是继续函数返回后的工作
F11单步进入,即单步执行,遇到函数(call指令),则进入函数内部继续单步执行
Debug->Break中断调试(只有在中断的情况下才能设置断点)

F. 求助如何修改DSDT来禁用独显

基本原理

在电脑开机时(对应_INI method)和睡眠唤醒时(对应_WAK method)调用关闭Nvidia独显的Method。

这个网站http://hybrid-graphics-linux.tuxfamily.org/index.php?title=ACPI_calls总结了关闭Nvidia显卡的常见methods,还列举了一些机型的具体情况,大家可以去看看,弄清楚自己电脑关闭显卡的method究竟是哪个,然后结合这个帖子来修改DSDT.

正如上面那个网站所示,关闭Nvidia独显一般有两种方法:一、使用 _DSM + _PS3;二、直接用_OFF(或者DOFF,SGOF等等,有些机型是不同的);

虽然上面那个网站一般都是直接调用OFF()函数来关闭独显的,但个人觉得如果有_DSM和_PS3的话,先使用方法一比较好,因为方法二可能会有一些影响,比如CPU变频的问题。(具体请看参考帖子[教程] 解决Optimus 和CPU Turbo 变频冲突)。

具体方法

很多人喜欢把SSDT的显卡部分移到DSDT中然后添加关闭独显的代码,并且开机DropOEMSSDT只用DSDT。但是我个人觉得这样子很麻烦,首先在移动过程中可能会产生错误,而且Drop掉SSDT后,DSDT中的那些External variables,methods就无法access了,因此DSDT中用到这些Objects,Methods的地方就会产生问题。如果Drop SSDT的目的是为了使用clover和变色龙的Generate P-States和C-States的话,clover可以只Drop掉有CPU信息的SSDT,变色龙可以把除有CPU信息的其他SSDT放在Extra目录下再DropSSDT,所以我认为完全没有必要花时间来移动显卡部分或者其他东西。如果DSDT和SSDT要相互调用对方的函数,那就在definition block那里加上External就好了。(如果新人看不懂这一段就跳过吧)说了那么多废话,终于开始了。

注意,在修改DSDT和SSDT之前,可以用这个帖子介绍的方法先生成dsl文件,可以减少错误,还有其他错误自己爬帖解决。不过如果你某个DSDT或SSDT有错误不能解决但你不需要再把它编译成AML文件的话,可以不用管它。

方法一:搜索函数

首先在DSDT和SSDT中搜索找到要用的函数_WAK,_INI,_PS3,_DSM。_WAK一般只有一个。_INI可能有很多个,最好用\_SB.PCI0下或\_SB.PCI0.PEG0.PEGP的。_PS3只有一个,如果没有的话看方法二。_DSM会有很多个,一定要用\_SB.PCI0.PEG0.PEGP下的,如果\_SB.PCI0.PEG0.PEGP下没有,搜索看看Device(GFX0)下有没有,如果都没有就看方法二.(注意,以下步骤是默认你DSDT的相关methods为一般情况,若有不同需根据你自己的DSDT做相应更改)

方法一:在_WAK之前新建一个Method PINI()

  • Method(PINI,0,NotSerialized)

  • {

  • \_SB.PCI0.PEG0.PEGP._DSM(Buffer(0x10)

  • {

  • /*0000*/0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,

  • /*0008*/0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0

  • },0x0100,0x1A,Buffer(0x04)

  • {

  • 0x01,0x00,0x00,0x03

  • })

  • \_SB.PCI0.PEG0.PEGP._PS3()

  • }

  • 方法一:在_WAK和适当的_INI中调用PINI()

    _WAK和_INI可能不在同一个DSDT或SSDT中,没有关系

  • Method(_WAK,1,Serialized)

  • {

  • PINI()

  • ......

  • [。。。省略。。。]

  • Method(_INI,0,NotSerialized)

  • {

  • PINI()

  • .......

  • }

  • 方法一:编译错误

    如果有类似以下的错误

  • ErrorObjectdoesnotexist(PINI)

  • 在DefinitionBlock(在DSDT和SSDT的最上面)加上以下代码

  • External(PINI,MethodObj)

  • 方法一:错误修正示范:

  • DefinitionBlock("acpi_dsdt.aml","DSDT",1,"LENOVO","CB-01",0x00000001)

  • {

  • External(_SB_.PCI0.PAUD.PUAM,MethodObj)//Warning:UnresolvedMethod,guessing0arguments(maybeincorrect,seewarningabove)

  • External(_SB_.PCI0.XHC_.DUAM,MethodObj)//Warning:UnresolvedMethod,guessing0arguments(maybeincorrect,seewarningabove)

  • External(_SB_.TPM_.PTS_,MethodObj)//Warning:UnresolvedMethod,guessing1arguments(maybeincorrect,seewarningabove)

  • External(_PR_.CFGD,FieldUnitObj)

  • External(_PR_.CPU0._PPC,IntObj)

  • External(_PR_.CPU0._PSS,PkgObj)

  • External(PINI,MethodObj)

  • 如果错误提示Object does not exist (\_SB.PCI0.PEG0.PEGP._PS3)

    在DefinitionBlock加上

  • External(_SB_.PCI0.PEG0.PEGP._PS3,MethodObj)

  • 如果错误提示Object does not exist (\_SB.PCI0.PEG0.PEGP._DSM)

    在DefinitionBlock加上

  • External(_SB_.PCI0.PEG0.PEGP._DSM,MethodObj)

  • 方法一:保存编译

    没有错误了,编译,save AML,把修改了的DSDT.aml, SSDT.aml和其他所以没有修改的SSDT*.aml放在Extra目录(变色龙),或patched文件夹(Clover),这样的话要DropSSDT。开机,幸运的话,Nvidia显卡应该被屏蔽了。

    方法二:没有_PS3函数

    如果没有_PS3函数,或者使用上面的方法没效果,那就试试这个方法吧。

    在_WAK和适当的_INI里面加入\_SB.PCI0.PEG0.PEGP._OFF()

  • Method(_WAK,1,Serialized)

  • {

  • \_SB.PCI0.PEG0.PEGP._OFF()

  • ......

  • [。。。省略。。。]

  • Method(_INI,0,NotSerialized)

  • {

  • \_SB.PCI0.PEG0.PEGP._OFF()

  • .......

  • }

  • 方法二:编译错误

    如果编译时有错误,像方法一的4中那样解决错误即可。

    方法二:编译保存

    没有错误了,编译,save AML,把修改了的DSDT.aml, SSDT.aml和其他所以没有修改的SSDT*.aml放在Extra目录(变色龙),或patched文件夹(Clover),这样的话要DropSSDT。开机,幸运的话,Nvidia显卡应该被屏蔽了。

    查看是否生效

    如何查看是否成功屏蔽Nvidia独显:打开“系统信息”→“图形卡/显示器”,若只有Intel显卡的信息就证明屏蔽成功。若成功了就支持一下吧!

G. 想请问一下clover提取的DSDT和SSDT如何命名才能加载

不同的电脑,要根据实际情况选择补丁。修改、编译好的,就是放到那个文件夹。就可以加载DSDT。要加载SSDT,就还需要参数。
DSDT是主板BIOS中ACPI的一个表。什么是ACPI呢,它是BIOS的一个高级功能模块。
它是The Differentiated System Description Table的简写。字面上就可以知道它是一个描述系统不同信息的表。
包含了所有除基本系统以外所有不同设备的信息,也就是每台计算机设备的基本系统是相同的,而不相同的设备用DSDT来描述。
DSDT表代码为ACPI Machine Language (AML)。
Mac OS X不完整支持ACPI规范,仅支持它的子集DSDT。
用户通过修改DSDT可以得到更好的硬件支持。最简单的理解就是DSDT是描述硬件的。mac的驱动是被动驱动,需要让系统知道存在这个硬件且知道硬件位置。
修改DSDT的主要目的就是让mac系统识别存在这个硬件并告诉mac系统你的硬件位置,以便让mac系统内置的驱动来驱动硬件工作。

H. QQ的离开状态判断用vc++如何实现

这个问题比较简单,有两种实现方法
第一种方法准确度非常高
但复杂,第二种方法
准确度稍微低,但简单
=========================第一种方法=============================
这种方法对于QQ2013比较复杂,我先说一下对于QQ2013的处理方法
QQ2013有QQProtect.sys驱动保护,但这个驱动也是白痴,很容易过的
新建一个sys驱动工程,驱动大致内容:获取SSDT表位置->>获取当前SSDT的NtOpenProcess位置(因为QQProtect.sys只是HOOK了SSDT,所以SSDT当前的函数地址就是QQProtect.sys的地址)->>获取系统真实的NtOpenProcess位置,假地址与系统真地址差异比较并计算出要jmp多少,修改QQProtect.sys前5个字节
jmp到系统真地址NtOpenProcess即可
编译驱动->>加载我们自己写的驱动~

5.
CE打开QQ.exe进程,

6.先把QQ改成在线状态,搜索【字节】未知内存数值模式

7.把QQ改成离开
搜索【变化的数值】,循环往复,不断搜变化的数值,最后得出几个地址

8.再双击地址,地址到CE下面的框框了,右键
查找什么改写此地址,

9.然后随便更改一下QQ状态(目的是触发CE),此时CE出现几句汇编指令

10.不要看其他指令,只看mov开头的,然后搜索那句mov的相对应寄存器值,循环往复(可能有多重偏移)
不断的
最后找到基址。
这种方法准确度相当高,不易受干扰,在你的VC++程序里面,加个时钟,每秒ReadProcessMemory(基址+偏移),读取内存,判断一下
是不是离开状态的数值
即可。
=======================第二种方法===============================
把QQ任务栏的图标移动到可见(针对Win7会自动隐藏托盘图标)
截取QQ任务栏图标的离开状态图片(注意
要截两张
一张男QQ
一张女QQ)例如
VC++工程里面,获取屏幕HDC,加个时钟,每秒在刚获取的HDC里面识图(找图、可模糊找图)【注意不可以把获取屏幕HDC代码加到时钟里面否则会耗尽系统资源】时钟把图找到了
就表示已经是在离开状态了,最后
记得释放屏幕的HDC
这种方法可能会受屏幕多方面干扰,如右下角弹广告窗等.但使用容易

I. QQ的离开状态判断用vc++如何实现

这个问题比较简单,有两种实现方法

第一种方法准确度非常高 但复杂,第二种方法 准确度稍微低,但简单

=========================第一种方法=============================

  1. 这种方法对于QQ2013比较复杂,我先说一下对于QQ2013的处理方法

  2. QQ2013有QQProtect.sys驱动保护,但这个驱动也是白痴,很容易过的

  3. 新建一个sys驱动工程,驱动大致内容:获取SSDT表位置->>获取当前SSDT的NtOpenProcess位置(因为QQProtect.sys只是HOOK了SSDT,所以SSDT当前的函数地址就是QQProtect.sys的地址)->>获取系统真实的NtOpenProcess位置,假地址与系统真地址差异比较并计算出要jmp多少,修改QQProtect.sys前5个字节 jmp到系统真地址NtOpenProcess即可

  4. 编译驱动->>加载我们自己写的驱动~

5. CE打开QQ.exe进程,

6.先把QQ改成在线状态,搜索【字节】未知内存数值模式

7.把QQ改成离开 搜索【变化的数值】,循环往复,不断搜变化的数值,最后得出几个地址

8.再双击地址,地址到CE下面的框框了,右键 查找什么改写此地址,

9.然后随便更改一下QQ状态(目的是触发CE),此时CE出现几句汇编指令

10.不要看其他指令,只看mov开头的,然后搜索那句mov的相对应寄存器值,循环往复(可能有多重偏移) 不断的 最后找到基址。


这种方法准确度相当高,不易受干扰,在你的VC++程序里面,加个时钟,每秒ReadProcessMemory(基址+偏移),读取内存,判断一下 是不是离开状态的数值 即可。

=======================第二种方法===============================

  1. 把QQ任务栏的图标移动到可见(针对Win7会自动隐藏托盘图标)

  2. 截取QQ任务栏图标的离开状态图片(注意 要截两张 一张男QQ 一张女QQ)例如

  3. VC++工程里面,获取屏幕HDC,加个时钟,每秒在刚获取的HDC里面识图(找图、可模糊找图)【注意不可以把获取屏幕HDC代码加到时钟里面否则会耗尽系统资源】时钟把图找到了 就表示已经是在离开状态了,最后 记得释放屏幕的HDC



这种方法可能会受屏幕多方面干扰,如右下角弹广告窗等.但使用容易

热点内容
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:336
编译原理课时设置 发布:2025-05-18 04:13:28 浏览:378
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:612
java用什么软件写 发布:2025-05-18 03:56:19 浏览:32
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:107
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:944
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:741
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:803
网卡访问 发布:2025-05-18 03:35:04 浏览:511
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:372