最近想要使用Autohotkey找多色,用ahk实现了个不过效率实在太低,想着用现成的大漠插件来搞定,所以琢磨了下。
前文
大漠插件网上能比较容易找到的一般就两个版本:
- 3.1.1233 (直接可以使用)
- 5.1413 (需要破解注册)
本机上3.1.1233直接被ESET杀了,所以使用5.1413,但是需要注册。
网上的破解补丁都是易语言或者按键精灵的,观察了一下按键精灵的补丁插件发现是COM实现的,所以尝试用Autohotkey来直接调用该插件,结果失败。
网上找到个帖子说了破解方法,就直接用C++实现了个:
lzq91514 发表于 2016-12-8 19:35
内存.写整数 (进程_取自进程ID (), 十六转十进制 (读模块基址 (进程_取自进程ID (), “dm.dll”)) + 十六转十进制 (“1063D0”), 1, )
破解补丁
编译成dll放置到dm.dll同目录下,搞定这些之后就可以在Autohotkey中使用大漠插件了:
相关问题
在Initialize标签中ComObjCreate出来的对象可以在其他标签中使用但是无法在函数中使用,得加Global dm。
其次看大漠插件的手册,其中有一些带变参指针函数,如果直接使用无法得到返回值,得使用ComVar(ComVar以及相关函数可以从参考链接中获取)来传递引用:
xpos := ComVar(), ypos := ComVar()
xpos[] := 0, ypos[] := 0
ret := dm.GetCursorPos(xpos.ref, ypos.ref)
OutputDebug % ret "," xpos[] "," ypos[]
Autohotkey调试
使用OutputDebug输出信息然后使用DebugView工具插件输出内容。如果想单步调试的话可以用AutoGUI,它有个Variables功能可以看到所有变量以及类型,十分方便。
参考链接:
https://www.52pojie.cn/thread-562114-1-1.html
https://autohotkey.com/boards/viewtopic.php?t=4827
https://ahkcn.github.io/docs/commands/ComObjActive.htm
28 条评论:
请问一下,编译出来的dmcrack.exe 无法在windows 10 系统上执行,要如何解决呢
编译出来是dmcrack.dll,是需要用Autohotkey调用的,不是直接执行的。
谢谢答复,那看起来编译出exe 是我的编译方式出了问题呢
你是用什么编译的,如果是msvc的话可以用cl /LD dmcrack.cpp编译成dll。
啊哈哈哈,我是照着一些教程用vs-code编译的,谢谢你的指引。
你好,请问一下
我编译出来的可以在自己这台电脑上使用,换电脑就不能识别和运行了
电脑需要安装什么依赖吗
你说的不能识别和运行是指什么,有可能你是以Debug模式编译的,换成Release试试。
是,我在笔记本上编译了dll,参考写了测试脚本,在笔记本上能够正常运行,ahk的dllcall返回数值是0,运行正常
但是放到另一个笔记本上使用的时候,dllcall返回的是空,应该是ahk调用失败
你是怎么编译的,如果用vs编译的话改成Release试试,如果你用的是vs2019的话,尝试在电脑上装vc2019运行库。
T^T 我重新编译了一下,之前是debug模式,我一直没注意
现在改成release,可以放其他电脑使用了,谢谢大佬提醒
这种方法,如果免注册调用的话,是不能进行破解吗
你说的免注册调用是指什么,理论上,你只要确保版本符合:
dm := ComObjCreate("dm.dmsoft")
ret := DllCall("dmCrack\patch")
这两句顺序一致就可以破解。
IfNotExist, %A_MyDocuments%\DM2
FileCreateDir, %A_MyDocuments%\DM2
FileInstall, .\dm5\dm.dll, %A_MyDocuments%\DM2\dm_test.dll, 1
FileInstall, .\dm5\DmReg.dll, %A_MyDocuments%\DM2\DmReg.dll, 1
FileInstall, .\dm5\dmCrack.dll, %A_MyDocuments%\DM2\dmCrack.dll, 1
;========�ע�����===========
;iPath := A_ahkpath . "\AHKdm\dm.dll"
;WhichButton := DllCall("AHKdm\DmReg.dll\SetDllPathW", "Str", iPath, "Int", 0)
;MsgBox % WhichButton
;dm := ComObjCreate("dm.dmsoft")
;ver := dm.Ver()
;=========================�ע���ܣ�
Global dm
iPath := A_MyDocuments . "\DM2\dm_test.dll"
WhichButton := DllCall("DmReg.dll\SetDllPathW", "Str", iPath, "Int", 0)
dm := ComObjCreate("dm.dmsoft")
ret := DllCall("dmCrack\patch")
ver := dm.Ver()
OutputDebug, %ver%
dm.CreateFolder("E:\123")
dm.MoveTo(652,320)
if (ver = "") {
msgbox, "register failed"
return
}
OutputDebug, "register succeed"
F12::
;;����
hwnd := dm.GetMousePointWindow()
if (hwnd > 0){
ret := dm.BindWindow(hwnd,"normal","windows","windows",0)
Sleep, 2000
if (ret > 0){
OutputDebug, "Bind successed"
}else{
msgbox, "can't bind"
ExitApp
}
}else{
MsgBox, "hwnd < 0"
ExitApp
}
dm.MoveTo(652,320)
Sleep, 10000
代码是这样,debug的时候
输出
5.1423
"reguster succeed"
然后快捷键绑定窗口的时候,无效
能打印版本号应该就注册成功了,如果绑定窗口无效你可以dm.GetLastError()查看具体错误信息,另外绑定窗口失败也可能是部分窗口原因,尝试更换参数,我记得有什么dx,dx2之类的。
返回值是
-1 : 表示你使用了绑定里的收费功能,但是没注册,无法使用.
你可以把文件打包传到网盘里,我这边看看。
链接: https://pan.baidu.com/s/1PC_wBW6qBoJD6xwK4-wPJQ 提取码: hxvq
谢谢大佬
我试了下,https://gist.github.com/bstaint/13dee878f890ac305e85c6f49989d30e,可以正常绑定,首先打开记事本窗口,然后执行代码,另外就是你最好用一些专业的编辑器写代码,不然如果有中文字符会有文件编码问题。
我重新试了一下,是因为,我修改了dm.dll 的名字,所以失败了吗
应该,GetModuleHandle这里的dm.dll要跟你文件名一致。
如果我需要修改名字,只能release更多的crack吗,这个编译可以带参数,支持修改名字吗
可以改,像这样,另外头文件函数签名也得改下:
https://gist.github.com/bstaint/2e2cb3374cdad3369ba1752fce13625c
请问,头文件要怎样修改啊
--------
#ifndef DMCRACK_H
#define DMCRACK_H
#ifdef __cplusplus
extern "C" {
#endif
__declspec(dllexport) int patch(const TCHAR* module);
#ifdef __cplusplus
}
#endif
#endif // DMCRACK_H
------
这样子是不对的嘛
修改后,调用的时候, ret := DllCall("dmCrack\patch", "Str", "dm.dll")
最后的"dm.dll"这里可以更换dm.dll的重命名是吗
尝试了几次都是不行的,请大佬解惑
dmcrack.h:
https://gist.github.com/bstaint/5c2ffbae3b972c7bd373cc030aae803f
dmcrack.cpp:
https://gist.github.com/bstaint/2e2cb3374cdad3369ba1752fce13625c
FileInstall, .\dm5\dm.dll, %A_WorkingDir%\dm.dll, 1
FileInstall, .\dm5\DmReg.dll, %A_WorkingDir%\DmReg.dll, 1
FileInstall, .\dm5\dm5.dll, %A_WorkingDir%\dmCrack.dll, 1
Global dm
iPath := A_WorkingDir . "\dm.dll"
WhichButton := DllCall("DmReg.dll\SetDllPathW", "Str", iPath, "Int", 0)
dm := ComObjCreate("dm.dmsoft")
ret := DllCall("dmCrack\patch", "Str", "dm.dll")
OutputDebug, ret is %ret%
ver := dm.Ver()
OutputDebug, %ver%
dm.CreateFolder("E:\123")
dm.MoveTo(652,320)
err := dm.GetLastError()
OutputDebug, %err%
if (ver = "") {
msgbox, "register failed"
return
}
OutputDebug, "register succeed"
;
-------------
我编译出来,测试的时候,crack是失败的?
我更新了下测试代码:
https://gist.github.com/bstaint/13dee878f890ac305e85c6f49989d30e
另外注意编译的时候要用:
cl /D UNICODE /D _UNICODE dmcrack.cpp
这样编译出来是UNICODE版本,你的Autohotkey也得确保是UNICODE版本,AutoHotkeyU32.exe,如果你还是有问题就运行测试代码看看哪个MsgBox没有内容。
发表评论