首页
社区
课程
招聘
[原创]返朴归真 Nooby 的 CM02 希望高手来
2007-4-15 17:28 7652

[原创]返朴归真 Nooby 的 CM02 希望高手来

2007-4-15 17:28
7652
[文件名]    cm02.exe
[难度]      7 (0-9)
[语言]      VC++(序列号n个1)
[系统]      Windows 98/ME/2000/XP/VISTA
[比较方式]  明码
[验证方式]  固定注册码,成功有提示
[目标]      找到注册码

希望大家玩的快活~

小提示:
刚才用OD调了一下,发现。。。不知不觉顺手做了反调试。。。所以提高难度等级。
给大家留个门,直接ue打开,字符串会比较明显哦~

[培训]科锐软件逆向50期预科班报名即将截止,速来!!! 50期正式班报名火爆招生中!!!

上传的附件:
收藏
免费 0
打赏
分享
最新回复 (12)
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
Nooby 5 2007-4-15 19:14
2
0
已更新
雪    币: 319
活跃值: (2359)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2007-4-15 20:17
3
0
This had better be worth it.

构思还不错:)
雪    币: 333
活跃值: (116)
能力值: ( LV9,RANK:570 )
在线值:
发帖
回帖
粉丝
acafeel 14 2007-4-15 21:28
4
0
这个,楼主的东东不会很难吧
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
Nooby 5 2007-4-16 08:48
5
0
csjwaman不错,写个流程
雪    币: 333
活跃值: (116)
能力值: ( LV9,RANK:570 )
在线值:
发帖
回帖
粉丝
acafeel 14 2007-4-16 10:39
6
0
被楼主弄的很是郁闷 
看到后面,稀里糊涂的  暴了先!
那位达人分析出来了,给个思路呀!当然,更期待Nooby达人的公布!嘿嘿!


cm02破解: cm02cr.rar

经过 40 分钟的奋战,才发现,原来用自己的爆破版本来分析是很容易的呀,呵呵!



eax=0040303D (cm02.0040303D), ASCII "Tuvwxyz`.~!@#$%^&*()_+|\=-></?':;}{[ ]",LF
eax=00403031 (cm02.00403031), ASCII "hijklmnopqrsTuvwxyz`.~!@#$%^&*()_+|\=-></?':;}{[ ]",LF
eax=00403032 (cm02.00403032), ASCII "ijklmnopqrsTuvwxyz`.~!@#$%^&*()_+|\=-></?':;}{[ ]",LF
eax=0040303C (cm02.0040303C), ASCII "sTuvwxyz`.~!@#$%^&*()_+|\=-></?':;}{[ ]",LF
eax=00403061 (cm02.00403061), ASCII " ]",LF
eax=00403031 (cm02.00403031), ASCII "hijklmnopqrsTuvwxyz`.~!@#$%^&*()_+|\=-></?':;}{[ ]",LF
eax=0040302A (cm02.0040302A), ASCII "abdcefghijklmnopqrsTuvwxyz`.~!@#$%^&*()_+|\=-></?':;}{[ ]",LF
eax=0040302C (cm02.0040302C), ASCII "dcefghijklmnopqrsTuvwxyz`.~!@#$%^&*()_+|\=-></?':;}{[ ]",LF
堆栈 ss:[0012F7A8]=00403061 (cm02.00403061), ASCII " ]",LF
堆栈 ss:[0012F7D0]=0040302B (cm02.0040302B), ASCII "bdcefghijklmnopqrsTuvwxyz`.~!@#$%^&*()_+|\=-></?':;}{[ ]",LF

堆栈地址=0012F792, (ASCII "etter be worth it.")

加起来就是:This had better be worth it.
上传的附件:
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
Nooby 5 2007-4-16 11:29
7
0
这个暴的可以的!

// cmDlg.cpp : implementation file
//

#include "stdafx.h"
#include "cm.h"
#include "cmDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
char txtBuf[] = "\x1f\nABCDEFGHabdcefghijklmnopqrsTuvwxyz`.~!@#$%^&*()_+|\\=-></?':;}{[ ]\n";
char txtBuf2[] = "\x1f\nabcdefghABCDEFGHIJKLMNOPQRStUVWXYZ`.~!@#$%^&*()_+|\\=-></?':;}{[ ]\n";
bool failed = false;
/////////////////////////////////////////////////////////////////////////////
// CCmDlg dialog

CCmDlg::CCmDlg(CWnd* pParent /*=NULL*/)
        : CDialog(CCmDlg::IDD, pParent)
{
        //{{AFX_DATA_INIT(CCmDlg)
                // NOTE: the ClassWizard will add member initialization here
        //}}AFX_DATA_INIT
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CCmDlg::DoDataExchange(CDataExchange* pDX)
{
        CDialog::DoDataExchange(pDX);
        //{{AFX_DATA_MAP(CCmDlg)
                // NOTE: the ClassWizard will add DDX and DDV calls here
        //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CCmDlg, CDialog)
        //{{AFX_MSG_MAP(CCmDlg)
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCmDlg message handlers

BOOL CCmDlg::OnInitDialog()
{
        CDialog::OnInitDialog();

        SetIcon(m_hIcon, TRUE);                        // Set big icon
        SetIcon(m_hIcon, FALSE);                // Set small icon
       
        // TODO: Add extra initialization here
       
        return TRUE;  // return TRUE  unless you set the focus to a control
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CCmDlg::OnPaint()
{
        if (IsIconic())
        {
                CPaintDC dc(this); // device context for painting

                SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

                // Center icon in client rectangle
                int cxIcon = GetSystemMetrics(SM_CXICON);
                int cyIcon = GetSystemMetrics(SM_CYICON);
                CRect rect;
                GetClientRect(&rect);
                int x = (rect.Width() - cxIcon + 1) / 2;
                int y = (rect.Height() - cyIcon + 1) / 2;

                // Draw the icon
                dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
                CDialog::OnPaint();
        }
}

HCURSOR CCmDlg::OnQueryDragIcon()
{
        return (HCURSOR) m_hIcon;
}

void CCmDlg::OnOK()
{
        if (!failed)
        {
        char tmpBuf[30] = "";
        int sizemagic = sizeof(tmpBuf);
        this->GetDlgItemText(IDC_EDIT1, tmpBuf, sizemagic);
        int i = 0;
        __try
        {
                RaiseException(1, 0, 0, NULL);
        }
        __except(1)
        {
                __try
                {
                        RaiseException(1, 0, 0, NULL);
                }
                __except(1)
                {
                        char joke[] = "\x0不能到这里,再继续么意义鸟~~\n";  //这句话release不包含。
                        long ptr = (long)txtBuf;
                        long ptr2;
                        ptr+=20;
                        ptr*=10;
                        ptr-=100;
                        ptr/=5;
                        ptr-=20;
                        ptr/=2;
                        ptr--;
                        if(memcmp((char*)(ptr2=ptr+sizemagic),&tmpBuf[i],1)==0)
                        {
                                __try
                                {
                                        i++;
                                        ptr*=2;
                                        ptr+=36;
                                        ptr/=2;

                                        ptr+=20;
                                        ptr*=10;
                                        ptr-=100;
                                        ptr/=5;
                                        ptr-=20;
                                        ptr/=2;
                                        i = IDC_EDIT1 / memcmp((char*)ptr,&tmpBuf[i],1);
                                }
                                __except(1)
                                {
                                        __try
                                        {
                                                i++;
                                                ptr++;
                                                ptr*=2;
                                                ptr/=2;

                                                ptr+=20;
                                                ptr*=10;
                                                ptr-=100;
                                                ptr/=5;
                                                ptr-=20;
                                                ptr/=2;
                                                i = IDC_EDIT1 / memcmp((char*)ptr,&tmpBuf[i],1);
                                        }
                                        __except(1)
                                        {
                                                __try
                                                {
                                                        i++;
                                                        ptr2+=20;
                                                        ptr2*=10;
                                                        ptr2-=100;
                                                        ptr2/=5;
                                                        ptr2-=20;
                                                        ptr2/=2;
                                                        i = IDC_EDIT1 / memcmp((char*)--ptr2,&tmpBuf[i],1);
                                                }
                                                __except(1)
                                                {
                                                        __try
                                                        {
                                                                i++;
                                                                ptr2+=30;
                                                                ptr2*=2;
                                                                ptr2+=16;
                                                                ptr2/=2;
                                                                i = IDC_EDIT1 / memcmp((char*)--ptr2,&tmpBuf[i],1);
                                                        }
                                                        __except(1)
                                                        {
                                                                __try
                                                                {
                                                                        i++;
                                                                        ptr+=20;
                                                                        ptr*=10;
                                                                        ptr-=100;
                                                                        ptr/=5;
                                                                        ptr-=20;
                                                                        ptr/=2;
                                                                        i = IDC_EDIT1 / memcmp((char*)--ptr,&tmpBuf[i],1);
                                                                }
                                                                __except(1)
                                                                {
                                                                        __try
                                                                        {
                                                                                i++;
                                                                                ptr-=7;
                                                                                ptr+=20;
                                                                                ptr*=10;
                                                                                ptr-=100;
                                                                                ptr/=5;
                                                                                ptr-=20;
                                                                                ptr/=2;
                                                                                i = IDC_EDIT1 / memcmp((char*)ptr,&tmpBuf[i],1);
                                                                        }
                                                                        __except(1)
                                                                        {
                                                                                __try
                                                                                {
                                                                                        i++;
                                                                                        ptr+=2;
                                                                                        ptr+=20;
                                                                                        ptr*=10;
                                                                                        ptr-=100;
                                                                                        ptr/=5;
                                                                                        ptr-=20;
                                                                                        ptr/=2;
                                                                                        i = IDC_EDIT1 / memcmp((char*)ptr,&tmpBuf[i],1);
                                                                                }
                                                                                __except(1)
                                                                                {
                                                                                        __try
                                                                                        {
                                                                                                i++;
                                                                                                ptr+=20;
                                                                                                ptr*=10;
                                                                                                ptr-=100;
                                                                                                ptr/=5;
                                                                                                ptr-=20;
                                                                                                ptr/=2;
                                                                                                i = IDC_EDIT1 / memcmp((char*)ptr2,&tmpBuf[i],1);
                                                                                        }
                                                                                        __except(1)
                                                                                        {
                                                                                                __try
                                                                                                {
                                                                                                        i++;
                                                                                                        ptr2+=20;
                                                                                                        ptr2*=10;
                                                                                                        ptr2-=100;
                                                                                                        ptr2/=5;
                                                                                                        ptr2-=20;
                                                                                                        ptr2/=2;
                                                                                                        i = IDC_EDIT1 / memcmp((char*)--ptr,&tmpBuf[i],1);
                                                                                                }
                                                                                                __except(1)
                                                                                                {
                                                                                                        char final[] = "\x1f\netter be worth it.";
                                                                                                        i++;
                                                                                                        if(memcmp(&tmpBuf[i],&final[2],sizeof(&final)-2)==0)
                                                                                                        {
                                                                                                                char greeting[] = "\x1f\n恭喜你!";
                                                                                                                char greeting2[] = "\x1f\n成功";
                                                                                                                ::MessageBox(NULL,&greeting[2],&greeting2[2],0);
                                                                                                                CDialog::OnOK();
                                                                                                        }
                                                                                                }
                                                                                        }
                                                                                }
                                                                        }
                                                                }
                                                        }
                                                }
                                                }
                                                }
                                                }
                                                }
                                                }
                                        long ptr3 = (long)txtBuf2;
                                        ptr3+=2;
                                        if(strncmp((char*)ptr3,tmpBuf,8)== 0)
                                        {
                                                char greeting3[] = "\x1f\n这个素假的。。偶耍你的:)";
                                                char greeting4[] = "\x1f\n失败";
                                                ::MessageBox(NULL,&greeting3[2],&greeting4[2],0);
                                        }
                                        failed = true;
                                        }
                                        }
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
Nooby 5 2007-4-16 11:37
8
0
用SEH跳转来执行代码,OD跟飞的原因:上了调试器,一步步跟,会跑到调试器的SEH链里去。不会返回程序正常处理异常
代码比较小,直接找SEH入口下断可能好点
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
Nooby 5 2007-4-16 11:38
9
0
连续2个空的RaiseException,给大家足够的提示了吧~
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
zcg 2007-4-16 11:45
10
0
acafeel 厉害呀!
原来密码就是:This had better be worth it.
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
Nooby 5 2007-4-16 11:49
11
0
acafeel的cm比较猛
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
壹只老虎 7 2007-4-16 11:54
12
0
郁闷哦!
昨天追出的注册玛就少了个句号!
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
Nooby 5 2007-4-16 11:56
13
0
句子么。。总有个句号咯。。输错一次要重来ctrl+f2了~

acafeel来个破文吧,源码在一边参考
游客
登录 | 注册 方可回帖
返回