好友
阅读权限40
听众
最后登录1970-1-1
|
300吾爱币
本帖最后由 朱朱你堕落了 于 2024-4-3 11:41 编辑
某一软件,很老版本的时候研究过,心跳包验证在线程里,找到这个线程函数,ret掉即可。
但是后来发现新版本用这种方法不行了,验证还是在线程函数里,这一点是没变的,但是若还像
以前一样ret掉,程序就崩溃了,应该是作者做了防ret处理,类似于易语言的防push窗体吧。
所以想到编程中是如何实现的,写个类似代码吧:
#include "stdafx.h"
#include <Windows.h>
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
MessageBoxA(NULL, _T("from ThreadProc"), _T("Test"), 0);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
printf("from _tmain...\n");
printf("ThreadProc addr = 0x%08X\n", (DWORD)ThreadProc);
CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
system("pause");
return 0;
}
ThreadProc的地址为00401000(这里我设置了固定基址),现在retn 0x4,保存成功,
运行后程序不弹窗了,程序也正常运行。
OK,请大佬们发挥比较好的创意想法,添加一些代码,如果还是把00401000这个地址ret 0x4,程序崩溃无法
正常运行,就是说,这个线程必须存在,而且不能被ret 0x4掉程序才正常运行,如果ret 0x4掉那么程序崩溃。
如何实现这个功能? |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|