【逆向知识】反调试-除0异常-编程与逆向

1、简介

重温编程和反调试的知识。

2、编程知识

整体界面长这个样子,然后拖控件,按钮点击事件。

549050-20180113225826316-1332946948.png

按钮点击事件的函数编写

获取用户名与密码的值,然后取出用户名的最后一位判断是不是0,如果是0就进入判断函数内,否则就输出注册失败的提示。

void CSehDlg::OnReg() 
{
    // TODO: Add your control notification handler code here
    CString strName;
    CString strCode;
    GetDlgItemText(IDC_EDT_USERNAME, strName);  //获取用户名
    GetDlgItemText(IDC_EDT_USERCODE, strCode);  //获取密码


    TCHAR chFlag = strName.GetAt(strName.GetLength()-1);
    if (chFlag == '0')
    {
        FirstLevelSeh(chFlag);   //异常判断函数
    }
    else
    {
        RegFail();  //注册失败的函数
    }
}

异常函数编写

判断最后一位数为0,然后0除以0会触发一个结果未定义的异常,然后进入异常处理的部分。

void FirstLevelSeh(char chFlag)

{
    
        __try
        {
            INT a = chFlag;  // 现在的值是0
            int b = a/0;     // 0除以0会发生异常,未定义结果触发异常
        }
        //定义异常处理模块
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
            HWND hDlgWnd = AfxGetApp()->GetMainWnd()->m_hWnd;
            HWND hWnd = ::GetDlgItem(hDlgWnd, IDC_STC_TIP);
            ::SetWindowText(hWnd, "Success!!");
        }
}

提示失函数编写

非常简单,获取文本控件的值,然后显示文本提示失败。


void CSehDlg::RegFail()
{
    HWND hDlgWnd = AfxGetApp()->GetMainWnd()->m_hWnd;
    HWND hWnd = ::GetDlgItem(hDlgWnd, IDC_STC_TIP);
    ::SetWindowText(hWnd, "Failed!!");
}

3、逆向实践

IDA中的结构图

最右边是捕获到异常后处理的位置,提示成功的函数被独立。那么只要在那个分支处进行断点即可。

549050-20180114201258410-1706732464.png

在【0043706F 040 mov esp, [ebp+ms_exc.old_esp]】处下断点,即可进入异常处理部分

549050-20180114203950222-996237057.png

4、参考

SEH反调试的实现与调试-文章

http://blog.csdn.net/xiaocaiju/article/details/25995495

SEH反调试的实现与调试 -代码

http://download.csdn.net/download/xiaocaiju/7357721

转载于:https://www.cnblogs.com/17bdw/p/8280650.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值