飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2965|回复: 11

[C/C++] Int3断点设置与移除函数

[复制链接]
  • TA的每日心情
    开心
    2024-12-31 00:26
  • 签到天数: 77 天

    [LV.6]常住居民II

    发表于 2023-10-2 21:20:59 | 显示全部楼层 |阅读模式
    学习in3断点之余,感觉封装为函数调用有点方便。小白手记,大神飘过

    [C++] 纯文本查看 复制代码
    void SetInt3Breakpoint(HANDLE hProcess, DWORD SetInt3address)
    {
    	DWORD oldProtect;
    	VirtualProtect((LPVOID)SetInt3address, sizeof(BYTE), PAGE_EXECUTE_READWRITE, &oldProtect);
    	originalByte = *(BYTE*)SetInt3address;
    	BOOL VirtualProtectResult = VirtualProtect((LPVOID)SetInt3address, sizeof(BYTE), PAGE_EXECUTE_READWRITE, &oldProtect);
    	if (VirtualProtectResult)
    	{
    		MessageBox(NULL, TEXT("SetInt3_VirtualProtect操作成功"), TEXT("提示"), NULL);
    	}
    	else
    	{
    		MessageBox(NULL, TEXT("SetInt3_VirtualProtect操作失败"), TEXT("提示"), NULL);
    		DWORD dwError = GetLastError();
    		VirtualProtectEx(hProcess, (LPVOID)SetInt3address, sizeof(BYTE), PAGE_EXECUTE_READWRITE, &oldProtect);
    		BOOL VirtualProtectExResult = VirtualProtectEx(hProcess, (LPVOID)SetInt3address, sizeof(BYTE), PAGE_EXECUTE_READWRITE, &oldProtect);
    		if (VirtualProtectExResult)
    		{
    			MessageBox(NULL, TEXT("SetInt3_VirtualProtectEx操作成功"), TEXT("提示"), NULL);
    		}
    		else
    		{
    			MessageBox(NULL, TEXT("SetInt3_VirtualProtectEx操作失败"), TEXT("提示"), NULL);
    			DWORD dwError = GetLastError();
    		}
    	}
    	//WriteProcessMemory(hProcess, (LPVOID)SetInt3address, &KeyInfo, 0x1, NULL);
    	memcpy((LPVOID)SetInt3address, KeyInfo, sizeof(KeyInfo));
    	//BOOL writeResult = WriteProcessMemory(hProcess, (LPVOID)SetInt3address, &KeyInfo, 0x1, NULL);
    	//if (writeResult)
    	//{
    	//	MessageBox(NULL, TEXT("SetInt3_address Int3写入成功"), TEXT("提示"), NULL);
    
    	//}
    	//else
    	//{
    	//	MessageBox(NULL, TEXT("SetInt3_address Int3写入失败"), TEXT("提示"), NULL);
    	//	DWORD dwError = GetLastError();
    
    	//}
    
    	VirtualProtect((LPVOID)SetInt3address, sizeof(BYTE), oldProtect, &oldProtect);
    	wsprintf(szBuffer, TEXT("Int3设置完成 *(BYTE*)SetInt3address= %#I32x"), *(BYTE*)SetInt3address);
    	OutputDebugString(szBuffer);
    	if (*(BYTE*)SetInt3address == 0xCC)
    	{
    		MessageBox(NULL, TEXT("Int3设置成功"), TEXT("提示"), NULL);
    	}
    }
    
    void RemoveInt3Breakpoint(HANDLE hProcess, DWORD RemoveInt3address)
    {
    	DWORD oldProtect;
    	VirtualProtect((LPVOID)RemoveInt3address, sizeof(BYTE), PAGE_EXECUTE_READWRITE, &oldProtect);
    	BOOL VirtualProtectResult = VirtualProtect((LPVOID)RemoveInt3address, sizeof(BYTE), PAGE_EXECUTE_READWRITE, &oldProtect);
    	if (VirtualProtectResult)
    	{
    		MessageBox(NULL, TEXT("Remove_VirtualProtect操作成功"), TEXT("提示"), NULL);
    	}
        else
        {
            MessageBox(NULL, TEXT("Remove_VirtualProtect操作失败"), TEXT("提示"), NULL);
            DWORD dwError = GetLastError();
        
    		VirtualProtectEx(hProcess, (LPVOID)RemoveInt3address, sizeof(BYTE), PAGE_EXECUTE_READWRITE, &oldProtect);
    		BOOL VirtualProtectExResult = VirtualProtectEx(hProcess, (LPVOID)RemoveInt3address, sizeof(BYTE), PAGE_EXECUTE_READWRITE, &oldProtect);
    		if (VirtualProtectExResult)
    		{
    			MessageBox(NULL, TEXT("Remove_VirtualProtectEx操作成功"), TEXT("提示"), NULL);
    		}
    		else
    		{
    			MessageBox(NULL, TEXT("Remove_VirtualProtectEx操作失败"), TEXT("提示"), NULL);
    			DWORD dwError = GetLastError();
    		}
        }
            memcpy((LPVOID)RemoveInt3address, &originalByte, sizeof(originalByte));
    		//WriteProcessMemory(hProcess, (LPVOID)RemoveInt3address, &originalByte, sizeof(BYTE), NULL);
    /*		BOOL writeResult = WriteProcessMemory(hProcess, (LPVOID)RemoveInt3address, &originalByte, sizeof(BYTE), NULL);
    		if (writeResult)
    		{
    			MessageBox(NULL, TEXT("SetInt3address Int3还原成功"), TEXT("提示"), NULL);
    
    		}
    		else
    		{
    			MessageBox(NULL, TEXT("SetInt3address Int3还原失败"), TEXT("提示"), NULL);
    			DWORD dwError = GetLastError();
    
    		}*/
    		VirtualProtect((LPVOID)RemoveInt3address, sizeof(BYTE), oldProtect, &oldProtect);
    	wsprintf(szBuffer, TEXT("Int3执行完成 *(BYTE*)RemoveInt3address= %#I32x"), *(BYTE*)RemoveInt3address);
    	OutputDebugString(szBuffer);
    }

    评分

    参与人数 3威望 +5 飘云币 +5 收起 理由
    风轻云淡 + 2 + 2 国庆节你在家偷偷学习
    desaiapi999 + 1 + 1 PYG有你更精彩!
    不破不立 + 2 + 2 感谢发布原创作品,PYG有你更精彩!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2025-1-14 08:31
  • 签到天数: 2449 天

    [LV.Master]伴坛终老

    发表于 2023-10-2 21:23:50 | 显示全部楼层
    谢谢分享学习心得
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-1-14 08:50
  • 签到天数: 865 天

    [LV.10]以坛为家III

    发表于 2023-10-2 21:27:42 | 显示全部楼层
    谢谢分享学习心得
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2025-1-14 09:43
  • 签到天数: 694 天

    [LV.9]以坛为家II

    发表于 2023-10-3 05:39:27 | 显示全部楼层
    谢谢分享,学习
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-1-3 13:18
  • 签到天数: 388 天

    [LV.9]以坛为家II

    发表于 2023-10-3 08:12:36 | 显示全部楼层

    谢谢分享学习心得
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-1-14 20:11
  • 签到天数: 311 天

    [LV.8]以坛为家I

    发表于 2023-10-3 09:46:28 | 显示全部楼层
    谢谢分享学习心得,我也学习下
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-1-1 12:45
  • 签到天数: 1591 天

    [LV.Master]伴坛终老

    发表于 2023-10-3 10:35:54 | 显示全部楼层
    不可能 根本不可能学会
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2025-1-10 08:55
  • 签到天数: 661 天

    [LV.9]以坛为家II

    发表于 2023-10-3 10:44:04 | 显示全部楼层
    过来学习,多谢分享
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-5-4 16:30
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2023-10-3 13:24:27 | 显示全部楼层

    谢谢分享学习心得
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表