吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1329|回复: 6
收起左侧

[讨论] 277人下载却无人解出的CrackMe的源代码

[复制链接]
qzhsjz 发表于 2020-7-31 08:53
本帖最后由 qzhsjz 于 2020-7-31 09:23 编辑

原帖:https://www.52pojie.cn/thread-1233355-1-1.html
我是这个帖的楼主。

没人能做出来的原因我也大概能理解,因为这个程序所有的绘图都是直通显卡的,事件机制都是内部实现的,一点系统控件都没用,所以没法找系统控件的断点,也没法找系统事件的断点。
如果找绘图或者最外层窗口事件的断点再跟进去,又太多太烦,虽然无壳无花,但是由于库很重,整个exe有18M,静态分析也不太现实。
虽然算法很简单,或者说根本就没有算法,只是一个字符串判等。但过于简单的算法和过于庞大的库之间就形成了掩护,在没有很多人分析过这个库的情况下,想通过特征来找算法也很难。其实这也就是我设计这个CrackMe的初衷。
那么,如果我们现实中遇到了像这样的程序(比如一些使用DirectUI技术的程序或者游戏),我们应该如何入手分析呢?我想听听各位大佬的意见。
附上程序源代码:(界面库使用了轮子哥的GacUI:https://github.com/vczh-libraries/GacUI)
[C++] 纯文本查看 复制代码
#define GAC_HEADER_USE_NAMESPACE
#include <GacUI.h>

void GuiMain()
{
        auto window = new GuiWindow(theme::ThemeName::Window);
        window->SetText(L"SimpleCrackMe");
        window->SetClientSize(Size(480, 320));
        window->GetBoundsComposition()->SetPreferredMinSize(Size(480, 320));
        window->MoveToScreenCenter();

        auto StackLayOut = new GuiStackComposition();
        StackLayOut->SetDirection(GuiStackComposition::Vertical);
        StackLayOut->SetExtraMargin([&]() { ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(10); __vwsn_temp__.top = static_cast<::vl::vint>(10); __vwsn_temp__.right = static_cast<::vl::vint>(10); __vwsn_temp__.bottom = static_cast<::vl::vint>(10); return __vwsn_temp__; }());
        StackLayOut->SetPadding(static_cast<::vl::vint>(5));
        StackLayOut->SetAlignmentToParent([&]() { ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }());
        
        auto label = new GuiLabel(theme::ThemeName::Label);
        label->SetText(L"验证结果:");
        {
                FontProperties font;
                font.fontFamily = L"Segoe UI";
                font.size = 32;
                font.antialias = true;
                label->SetFont(font);
        }
        auto labelitem = new GuiStackItemComposition();
        labelitem->AddChild(label->GetBoundsComposition());
        StackLayOut->AddChild(labelitem);

        auto textbox = new GuiSinglelineTextBox(theme::ThemeName::SinglelineTextBox);
        auto textboxitem = new GuiStackItemComposition();
        auto textboxbound = textbox->GetBoundsComposition();
        textboxbound->SetPreferredMinSize([&]() { ::vl::presentation::Size __vwsn_temp__; __vwsn_temp__.x = static_cast<::vl::vint>(40); __vwsn_temp__.y = static_cast<::vl::vint>(40); return __vwsn_temp__; }());
        textboxbound->SetAlignmentToParent([&]() { ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }());
        textboxitem->AddChild(textboxbound);
        StackLayOut->AddChild(textboxitem);
        
        auto btnValidate = new GuiButton(theme::ThemeName::Button);
        btnValidate->SetText(L"执行验证");
        btnValidate->Clicked.AttachLambda([=](auto, auto) {
                const wchar_t TruePassword[] = "这里是这个CrackMe的密码,我先不公布,以防有人还要玩";
                const wchar_t* result = nullptr;
                if (textbox->GetText() == TruePassword)
                {
                        const wchar_t a[] = {L'验', L'证', L'结', L'果', L':', L'验', L'证', L'通', L'过', 0};
                        result = a;
                }
                else
                {
                        const wchar_t a[] = { L'验', L'证', L'结', L'果', L':', L'验', L'证', L'不', L'通', L'过', 0};
                        result = a;
                }
                label->SetText(result);
                });
        auto btnValidatebound = btnValidate->GetBoundsComposition();
        auto btnValidateitem = new GuiStackItemComposition();
        btnValidatebound->SetPreferredMinSize([&]() { ::vl::presentation::Size __vwsn_temp__; __vwsn_temp__.x = static_cast<::vl::vint>(40); __vwsn_temp__.y = static_cast<::vl::vint>(40); return __vwsn_temp__; }());
        btnValidatebound->SetAlignmentToParent([&]() { ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }());
        btnValidateitem->AddChild(btnValidatebound);
        StackLayOut->AddChild(btnValidateitem);
        
        window->GetContainerComposition()->AddChild(StackLayOut);
        GetApplication()->Run(window);
        delete window;
}

是的,只有这一点,剩下全是库,甚至连main函数都是库里的,库经过一个初始化过程以后才调用我的GuiMain函数。

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

jy04468108 发表于 2020-7-31 12:37
深受启发!我用x64dbg试了一下,连暂停都停不下来,就直接放弃了
viply 发表于 2020-7-31 09:29
原贴两天前不是有人已经解出来了吗,怎么到了你这变成无人解出
 楼主| qzhsjz 发表于 2020-7-31 09:30
viply 发表于 2020-7-31 09:29
原贴两天前不是有人已经解出来了吗,怎么到了你这变成无人解出

那个是我朋友,我把密码告诉他了……然后他凑不要脸发了个帖……
bjxiaoyao 发表于 2020-7-31 10:18
那个是我朋友,我把密码告诉他了……然后他凑不要脸发了个帖……
哈哈哈哈,看到这个笑了
 楼主| qzhsjz 发表于 2020-7-31 10:25
bjxiaoyao 发表于 2020-7-31 10:18
那个是我朋友,我把密码告诉他了……然后他凑不要脸发了个帖……
哈哈哈哈,看到这个笑了

那我能怎么办嘛
是不是因为他发了那个帖然后导致大神们都以为破了就不来玩了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 15:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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