软件破解之成品软件添加按钮

【使用工具】: OD、Stub_PE、ResHacker

二、编写DLL

接下来我们编写DLL,我电脑上只有vs2013,所以我就用它了,你们也可以用其他编译器,只要可以编写Windows系统上的DLL就可以。
1.新建工程
选择win32项目,填写工程名,点击确定

选择DLL和空项目,点击完成,项目创建完成,然后添加main.cpp到工程

2.编写代码
首先编写DllMain函数

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH: //dll载入时执行
{
g_hModule = hModule; //保存句柄到全局变量
hhk = StartHook();
break;
}
case DLL_PROCESS_DETACH: //dll卸载时执行
{
EndHook();
break;
}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
}
return TRUE;
}
DllMain函数的ul_reason_for_call指明了函数被调用的原因,DLL_PROCESS_ATTACH指DLL被调用,DLL_PROCESS_DETACH指DLL被卸载,而case DLL_THREAD_ATTACH和case DLL_THREAD_DETACH分别表示线程被创建和销毁。我们在dll加载时调用StartHook函数,dll卸载时调用EndHook函数,下面我们看看这两个函数
HHOOK StartHook()
{
return SetWindowsHookEx(WH_CALLWNDPROC, HookProc, g_hModule, GetCurrentThreadId());//设置hook,类型为WH_CALLWNDPROC,过程函数为HookProc,hook当前线程
}

BOOL EndHook()
{
return UnhookWindowsHookEx(hhk); //结束hook
}
这两个函数只是很简单的封装了俩个API,重点在于SetWindowsHookEx的参数设置,由于我们hook的是WM_COMMAND消息,所以我们选择hook类型为WH_CALLWNDPROC,表明当窗口过程函数被调用时触发hook,并且我们是hook当前线程,hook过程函数在dll里,所以第三个参数填dll模块句柄或者NULL都行,第四个参赛则直接利用GetCurrentThreadId()获取当前线程id
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= 0)
{
CWPSTRUCT* cwps = (CWPSTRUCT*)lParam;

}
由于我们只需要添加按钮弹窗功能,所以我们只过滤WM_COMMAND消息,前面我们添加按钮资源的时候id填写的是1099,这里就派上用场了。
这里我调用了DialogBoxParam函数来弹出对话框,弹出对话框需要添加对话框资源,并且编写过程函数。
选择vs2013的菜单项->项目->添加资源->Dialog->新建
如果你用的也是vs2013,这里需要修改两个地方的设置,否则编译出来的dll在xp上不能运行。
VS2013菜单->项目->属性->配置属性->常规->平台工具集->Visual Studio 2013 – Windows XP (v120_xp)
VS2013菜单->项目->属性->配置属性->c/c+±>代码生成->运行库->多线程 (/MT)
在项目文件夹里找到HookMSG.dll,拷贝到Scylla目录下。

三、修改Scylla导入表
Stub_PE载入Scylla,选择“函数”选项卡,右键添加函数,选择HookMSG.dll,选择EmptyFunc函数,确定添加并保存。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年3月17日
下一篇 2019年3月17日

相关推荐