吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3575|回复: 5
收起左侧

[CrackMe] qtcrackme之简单算法+qmessagebox研究+signal slots的深层研究

  [复制链接]
KaQqi 发表于 2017-11-12 15:28
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

要求,弹出信息框你成功了,并且你不能被尤里的核弹铁幕闪电风暴超时空基因突变心灵控制干死
满足上述条件的,+1热心
进阶要求
说出大致判断结构并有汇编图或IDA的图的证明的,2cb1热心
对signal slot研究更近一步的,3cb3热心

期中考试考好了,也没啥作业,就来发个帖。。
noi砸了。。。

下个cm就不再像这样三无了,要有很多反调试了。
有人投稿下个cm的算法么

http://pan.baidu.com/s/1i5u1NUX

点评

6666个CrackMe http://pan.baidu.com/s/1gfzpxrt 密码:5z05够楼主你玩的了!  发表于 2017-11-13 17:02

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
jaffa + 1 + 1 谢谢@Thanks!
废宅小五 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zbnysjwsnd8 发表于 2017-11-12 15:32
sure????????????????打钩

zycqryyh2h2h8k7n

免费评分

参与人数 1热心值 +1 收起 理由
KaQqi + 1 我很赞同!

查看全部评分

SeriousSnow 发表于 2017-11-12 16:45
[Asm] 纯文本查看 复制代码
int __thiscall sub_4010F0(QAbstractButton **this)
{
  int v1; // ecx
  int result; // eax
  int v3; // ecx
  int v4; // ecx
  int v5; // ecx
  int v6; // ecx
  int v7; // ecx
  int v8; // ecx
  int v9; // ecx
  int v10; // [esp-8h] [ebp-8Ch]
  int v11; // [esp-4h] [ebp-88h]
  int v12; // [esp+4h] [ebp-80h]
  int v13; // [esp+8h] [ebp-7Ch]
  QAbstractButton **v14; // [esp+Ch] [ebp-78h]
  char v15; // [esp+10h] [ebp-74h]
  char v16; // [esp+14h] [ebp-70h]
  int *v17; // [esp+18h] [ebp-6Ch]
  char v18; // [esp+1Ch] [ebp-68h]
  char v19; // [esp+20h] [ebp-64h]
  int *v20; // [esp+24h] [ebp-60h]
  char v21; // [esp+28h] [ebp-5Ch]
  char v22; // [esp+2Ch] [ebp-58h]
  int *v23; // [esp+30h] [ebp-54h]
  char v24; // [esp+34h] [ebp-50h]
  char v25; // [esp+38h] [ebp-4Ch]
  int *v26; // [esp+3Ch] [ebp-48h]
  char v27; // [esp+40h] [ebp-44h]
  char v28; // [esp+44h] [ebp-40h]
  int *v29; // [esp+48h] [ebp-3Ch]
  char v30; // [esp+4Ch] [ebp-38h]
  char v31; // [esp+50h] [ebp-34h]
  int *v32; // [esp+54h] [ebp-30h]
  char v33; // [esp+58h] [ebp-2Ch]
  char v34; // [esp+5Ch] [ebp-28h]
  int *v35; // [esp+60h] [ebp-24h]
  char v36; // [esp+64h] [ebp-20h]
  char v37; // [esp+6Bh] [ebp-19h]
  char v38; // [esp+6Ch] [ebp-18h]
  char v39; // [esp+70h] [ebp-14h]
  int *v40; // [esp+74h] [ebp-10h]
  int v41; // [esp+80h] [ebp-4h]

  v14 = this;
  if ( QAbstractButton::isChecked(this[9]) )    // 复选框勾了没
  {
    v13 = QLineEdit::text(v14[7], &v36, "zycqryyh2h2h8k7n");// v13 = zyc......
    v12 = v13;
    v41 = 2;
    v37 = QString::operator==(v13);             // 输入的和V13 == 比较  应该是有重载比较字符串内容,而不是地址
    v41 = -1;
    QString::~QString(&v36);
    if ( v37 )                                  // 如果字符串是zyc......
    {
      QString::QString(&v34, "you win");
      v41 = 3;
      QString::QString(&v33, "good job");
      LOBYTE(v41) = 4;
      v11 = 0;
      v10 = v3;
      v35 = &v10;
      unknown_libname_1(1024);
      QMessageBox::warning(v14, &v33, &v34);
      LOBYTE(v41) = 3;
      QString::~QString(&v33);
      v41 = -1;
      QString::~QString(&v34);
    }
    QString::QString(&v31, "Nuclear missile launched.");// .........................
    v41 = 5;
    QString::QString(&v30, "warning");
    LOBYTE(v41) = 6;
    v11 = 0;
    v10 = v4;
    v32 = &v10;
    unknown_libname_1(1024);
    QMessageBox::warning(v14, &v30, &v31);
    LOBYTE(v41) = 5;
    QString::~QString(&v30);
    v41 = -1;
    QString::~QString(&v31);
    QString::QString(&v28, "Iron Curtain Activated");
    v41 = 7;
    QString::QString(&v27, "warning");
    LOBYTE(v41) = 8;
    v11 = 0;
    v10 = v5;
    v29 = &v10;
    unknown_libname_1(1024);
    QMessageBox::warning(v14, &v27, &v28);
    LOBYTE(v41) = 7;
    QString::~QString(&v27);
    v41 = -1;
    QString::~QString(&v28);
    QString::QString(&v25, "Chronosphere Activated");
    v41 = 9;
    QString::QString(&v24, "warning");
    LOBYTE(v41) = 10;
    v11 = 0;
    v10 = v6;
    v26 = &v10;
    unknown_libname_1(1024);
    QMessageBox::warning(v14, &v24, &v25);
    LOBYTE(v41) = 9;
    QString::~QString(&v24);
    v41 = -1;
    QString::~QString(&v25);
    QString::QString(&v22, "Lightning Storm Created");
    v41 = 11;
    QString::QString(&v21, "warning");
    LOBYTE(v41) = 12;
    v11 = 0;
    v10 = v7;
    v23 = &v10;
    unknown_libname_1(1024);
    QMessageBox::warning(v14, &v21, &v22);
    LOBYTE(v41) = 11;
    QString::~QString(&v21);
    v41 = -1;
    QString::~QString(&v22);
    QString::QString(&v19, "Genetic Mutator Activated");
    v41 = 13;
    QString::QString(&v18, "warning");
    LOBYTE(v41) = 14;
    v11 = 0;
    v10 = v8;
    v20 = &v10;
    unknown_libname_1(1024);
    QMessageBox::warning(v14, &v18, &v19);
    LOBYTE(v41) = 13;
    QString::~QString(&v18);
    v41 = -1;
    QString::~QString(&v19);
    QString::QString(&v16, "Psychic Dominator Activated");
    v41 = 15;
    QString::QString(&v15, "warning");
    LOBYTE(v41) = 16;
    v11 = 0;
    v10 = v9;
    v17 = &v10;
    unknown_libname_1(1024);
    QMessageBox::warning(v14, &v15, &v16);
    LOBYTE(v41) = 15;
    QString::~QString(&v15);
    v41 = -1;
    QString::~QString(&v16);
    result = 0;
  }
  else
  {
    QString::QString(&v39, "you don't sure??if you don't sure,why you activated my crackme?");
    v41 = 0;
    QString::QString(&v38, "sure?");
    LOBYTE(v41) = 1;
    v11 = 0;
    v10 = v1;
    v40 = &v10;
    unknown_libname_1(1024);
    QMessageBox::warning(v14, &v38, &v39);
    LOBYTE(v41) = 0;
    QString::~QString(&v38);
    v41 = -1;
    QString::~QString(&v39);
    result = 0;
  }
  return result;
}

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
KaQqi + 2 + 1 很好

查看全部评分

 楼主| KaQqi 发表于 2017-11-12 16:58
本帖最后由 cqr2287 于 2017-11-12 17:01 编辑

ida对于qt的分析十分准确,已经精确到上一层基类了,大结构是完全符合的。现在开源

[C++] 纯文本查看 复制代码
#ifndef CRACKME1_3A_H
#define CRACKME1_3A_H

#include <QtGui/QMainWindow>
#include "ui_crackme1_3a.h"
#include <QMessageBox>

class CrackMe1_3A : public QMainWindow
{
	Q_OBJECT

public:
	CrackMe1_3A(QWidget *parent = 0, Qt::WFlags flags = 0);
	~CrackMe1_3A();

	int checkBox_noCheck();
	int checkBox_check();

private slots:
	int judge_register();



private:
	Ui::CrackMe1_3AClass ui;

	int flag;
};

#endif // CRACKME1_3A_H


[C++] 纯文本查看 复制代码
#include "crackme1_3a.h"

CrackMe1_3A::CrackMe1_3A(QWidget *parent, Qt::WFlags flags)
	: QMainWindow(parent, flags)
{
	flag = 0;
	ui.setupUi(this);


	connect(ui.pushButtonCheck,SIGNAL(clicked(bool)),this,SLOT(judge_register()));
}

CrackMe1_3A::~CrackMe1_3A()
{

}

//1 is check, 0 is not check


int CrackMe1_3A::judge_register()
{

	if(!ui.checkBoxSure->isChecked()) //not check
	{
		QMessageBox::warning(this,"sure?","you don't sure??if you don't sure,why you activated my crackme?");

		
		return 0;
			
	}

	if(ui.m_lineEdit->text() == "zycqryyh2h2h8k7n")
	{
		QMessageBox::warning(this,"good job","you win");
	}
	QMessageBox::warning(this,"warning","Nuclear missile launched.");
	QMessageBox::warning(this,"warning","Iron Curtain Activated");
	QMessageBox::warning(this,"warning","Chronosphere Activated");
	QMessageBox::warning(this,"warning","Lightning Storm Created");
	QMessageBox::warning(this,"warning","Genetic Mutator Activated");
	QMessageBox::warning(this,"warning","Psychic Dominator Activated");


	return 0;
}


[C++] 纯文本查看 复制代码

#ifndef UI_CRACKME1_3A_H
#define UI_CRACKME1_3A_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QCheckBox>
#include <QtGui/QHBoxLayout>
#include <QtGui/QHeaderView>
#include <QtGui/QLineEdit>
#include <QtGui/QMainWindow>
#include <QtGui/QMenuBar>
#include <QtGui/QPushButton>
#include <QtGui/QStatusBar>
#include <QtGui/QToolBar>
#include <QtGui/QVBoxLayout>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_CrackMe1_3AClass
{
public:
    QWidget *centralWidget;
    QVBoxLayout *verticalLayout;
    QLineEdit *m_lineEdit;
    QHBoxLayout *horizontalLayout;
    QCheckBox *checkBoxSure;
    QPushButton *pushButtonCheck;
    QMenuBar *menuBar;
    QToolBar *mainToolBar;
    QStatusBar *statusBar;

    void setupUi(QMainWindow *CrackMe1_3AClass)
    {
        if (CrackMe1_3AClass->objectName().isEmpty())
            CrackMe1_3AClass->setObjectName(QString::fromUtf8("CrackMe1_3AClass"));
        CrackMe1_3AClass->resize(557, 268);
        centralWidget = new QWidget(CrackMe1_3AClass);
        centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
        verticalLayout = new QVBoxLayout(centralWidget);
        verticalLayout->setSpacing(6);
        verticalLayout->setContentsMargins(11, 11, 11, 11);
        verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
        m_lineEdit = new QLineEdit(centralWidget);
        m_lineEdit->setObjectName(QString::fromUtf8("m_lineEdit"));

        verticalLayout->addWidget(m_lineEdit);

        horizontalLayout = new QHBoxLayout();
        horizontalLayout->setSpacing(6);
        horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
        checkBoxSure = new QCheckBox(centralWidget);
        checkBoxSure->setObjectName(QString::fromUtf8("checkBoxSure"));

        horizontalLayout->addWidget(checkBoxSure);

        pushButtonCheck = new QPushButton(centralWidget);
        pushButtonCheck->setObjectName(QString::fromUtf8("pushButtonCheck"));

        horizontalLayout->addWidget(pushButtonCheck);


        verticalLayout->addLayout(horizontalLayout);

        CrackMe1_3AClass->setCentralWidget(centralWidget);
        menuBar = new QMenuBar(CrackMe1_3AClass);
        menuBar->setObjectName(QString::fromUtf8("menuBar"));
        menuBar->setGeometry(QRect(0, 0, 557, 23));
        CrackMe1_3AClass->setMenuBar(menuBar);
        mainToolBar = new QToolBar(CrackMe1_3AClass);
        mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));
        CrackMe1_3AClass->addToolBar(Qt::TopToolBarArea, mainToolBar);
        statusBar = new QStatusBar(CrackMe1_3AClass);
        statusBar->setObjectName(QString::fromUtf8("statusBar"));
        CrackMe1_3AClass->setStatusBar(statusBar);

        retranslateUi(CrackMe1_3AClass);

        QMetaObject::connectSlotsByName(CrackMe1_3AClass);
    } // setupUi

    void retranslateUi(QMainWindow *CrackMe1_3AClass)
    {
        CrackMe1_3AClass->setWindowTitle(QApplication::translate("CrackMe1_3AClass", "CrackMe1_3A", 0, QApplication::UnicodeUTF8));
        checkBoxSure->setText(QApplication::translate("CrackMe1_3AClass", "sure????????????????", 0, QApplication::UnicodeUTF8));
        pushButtonCheck->setText(QApplication::translate("CrackMe1_3AClass", "check", 0, QApplication::UnicodeUTF8));
    } // retranslateUi

};

namespace Ui {
    class CrackMe1_3AClass: public Ui_CrackMe1_3AClass {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_CRACKME1_3A_H
小宇宙i 发表于 2017-11-13 11:12
666长见识
 楼主| KaQqi 发表于 2017-11-18 16:21
本帖最后由 cqr2287 于 2017-11-18 16:25 编辑
SeriousSnow 发表于 2017-11-12 16:45
[mw_shl_code=asm,true]int __thiscall sub_4010F0(QAbstractButton **this)
{
  int v1; // ecx

怎么找到这个函数的呢?我倒推全是signal slot的函数
我是说从汇编中,而不是去ida的函数里挨个看
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-26 07:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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