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

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 457|回复: 7
收起左侧

[求助] 要求用C++写个CrackMe

[复制链接]
冥界3大法王 发表于 2024-3-9 10:35
本帖最后由 冥界3大法王 于 2024-3-9 10:37 编辑

要求分别
调用(也就是判断一下是否存在)
英文名的.txt
中文名的.txt
阿拉伯语名.txt
并利用上CreateFile(来读取【反正就是一会能被x64dbg断下】
文件里的编码内容分别采用以为以下三种
ansi
utf8
utf16
里边字符串为英文、中文、特殊符号

存在就OutputDebugString
反之也OutputDebugString一下

用以测试条件断点实例。

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

 楼主| 冥界3大法王 发表于 2024-3-9 12:16

不会就不要来充数来了,会被扣分的。
20230713G001133 发表于 2024-3-9 16:03
本帖最后由 20230713G001133 于 2024-3-9 16:04 编辑
冥界3大法王 发表于 2024-3-9 12:16
不会就不要来充数来了,会被扣分的。

判断文件是否存在应该是这样的(fileExists)


但是我不知道怎么编写判断文本文档的编码类型
#include <fstream>
#include <iostream>

bool fileExists(const std::string& filename) {
    std::ifstream file(filename);
    return file.good();
}

int main() {
    std::string filename = "example.txt";

    if (fileExists(filename)) {
        std::cout << "文件存在\n";
    } else {
        std::cout << "文件不存在\n";
    }

    return 0;
}
你好,再见 发表于 2024-3-9 16:38
查了半天始终弄不好怎么输入阿拉伯字符,晕
只能单独把文件名填在代码里

蹲一个大佬

[C++] 纯文本查看 复制代码
//// Created by Michael on 2024/3/9.
//
#include <bits/stdc++.h>
#include <windows.h>

#define endl '\n'
using namespace std;

int main() {
    //SetConsoleCP(65001);
    //SetConsoleOutputCP(65001);
    //wstring FILENAME;
    //wcout << "Please enter the FILENAME:" << endl;
    //wcin >> FILENAME;
    //const WCHAR *pstr = FILENAME.c_str();

    HANDLE hFile = CreateFileW(L"&#1575;&#1604;&#1604;&#1594;&#1577; &#1575;&#1604;&#1593;&#1585;&#1576;&#1610;&#1577;.exe",
                               GENERIC_READ | GENERIC_WRITE,
                               0,
                               NULL,
                               OPEN_EXISTING,
                               FILE_ATTRIBUTE_NORMAL,
                               NULL);


    if (hFile == INVALID_HANDLE_VALUE) {
        DWORD error = GetLastError();
        if (error == ERROR_FILE_NOT_FOUND || error == ERROR_PATH_NOT_FOUND) {
            cout << "ERROR_FILE_NOT_FOUND" << endl;
        }
    } else {
        cout << "FILE_EXISTING" << endl;
        CloseHandle(hFile);
    }
    system("pause");
    return 0;
}
LXGZJ237 发表于 2024-3-9 18:43
本帖最后由 2370177068 于 2024-3-9 18:49 编辑

判断文件编码应该可以参考我的贴子,写的比较屎,但改改也能用:
https://www.52pojie.cn/thread-1722256-1-1.html
solly 发表于 2024-3-9 22:00
本帖最后由 solly 于 2024-3-9 22:16 编辑

是这样的吧,VS2019编译的x86模式:
[C++] 纯文本查看 复制代码
// crackme_mulng.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <fstream>
#include <string>
#include <codecvt>

#include <Windows.h>
using namespace std;

class GetFiles {

public:
    string engFile = "G:\\MyProjects\\vs2019\\crackme_mulng\\Debug\\english.txt";
    wstring chnFile = L"G:\\MyProjects\\vs2019\\crackme_mulng\\Debug\\中文.txt";
    wstring arbFile = L"G:\\MyProjects\\vs2019\\crackme_mulng\\Debug\\&#1593;&#1585;&#1576; ..txt";
    //string arbFile = "G:\\MyProjects\\vs2019\\crackme_mulng\\Debug\\arabic.txt";

    void crackme1(const char * fileName);
    void crackme2(const WCHAR * fileName);
    void crackme3(const WCHAR * fileName);
};

#define MAX_SIZE 256

int main(int argc, char * argv[])
{
    std::cout << "Hello World!\n";

    GetFiles get1;

    OutputDebugStringW(L"\n");

    get1.crackme1(get1.engFile.c_str());
    get1.crackme2(get1.chnFile.c_str());
    get1.crackme3(get1.arbFile.c_str());

    OutputDebugStringW(L"\n");
    OutputDebugStringW(L"\n");
}

void GetFiles::crackme1(const char * fileName) {
    char buff[MAX_SIZE];
    locale english("English");
    ifstream ifs1(fileName, ios::in);
 
    if (ifs1.good()) {
        ifs1.imbue(english);
        streambuf* pbuf = ifs1.rdbuf();
        streamsize size = pbuf->pubseekoff(0, ifs1.end);
        pbuf->pubseekoff(0, ifs1.beg);
        size = (size >= MAX_SIZE) ? (MAX_SIZE - 1) : size;
        streamsize n = pbuf->sgetn(buff, size);
        buff[n] = '\0';
        ifs1.close();
        //cout << buff << std::endl;
        OutputDebugStringA("\n");
        OutputDebugStringA("English = ");
        OutputDebugStringA(buff);
        OutputDebugStringA("\n");
    } else {
        OutputDebugString(L"\n文件不存在!!!!!\n\n");
    }
}

void GetFiles::crackme2(const WCHAR * fileName) {
    WCHAR buff[MAX_SIZE];
    //wstring buff;
    locale china("zh_CN.UTF-8");
    wifstream ifs2(fileName, ios::in);

    if (ifs2.good()) {
        ifs2.imbue(china);
        wstreambuf* pbuf = ifs2.rdbuf();
        streamsize size = pbuf->pubseekoff(0, ifs2.end);
        pbuf->pubseekoff(0, ifs2.beg);
        size = (size >= MAX_SIZE) ? (MAX_SIZE - 1) : size;
        streamsize n = pbuf->sgetn(buff, size);
        buff[n] = '\0';
        ifs2.close();
        //wcout << buff << std::endl;
        OutputDebugStringW(L"\n");
        OutputDebugStringW(L"中文 = ");
        OutputDebugStringW(buff);
        OutputDebugStringW(L"\n");
    }
    else {
        OutputDebugString(L"\n文件不存在!!!!!\n\n");
    }
}

void GetFiles::crackme3(const WCHAR * fileName) {
    WCHAR buff[MAX_SIZE];
    std::codecvt_utf16<wchar_t, 0x10ffff, std::little_endian>* codecvtToUnicode = new std::codecvt_utf16 < wchar_t, 0x10ffff, std::little_endian >;
    //locale arab("Arabic");
    wifstream ifs3(fileName, ios::binary);     //// &#1575;&#1604;&#1593;&#1585;&#1576;&#1610;&#1577;
    //wifstream ifs3(fileName, ios::in);     //// &#1575;&#1604;&#1593;&#1585;&#1576;&#1610;&#1577;
    if (ifs3.good()) {
        //ifs3.imbue(arab);
        ifs3.imbue(locale(ifs3.getloc(), codecvtToUnicode));
        wstreambuf* pbuf = ifs3.rdbuf();
        streamsize size = pbuf->pubseekoff(0, ifs3.end);
        pbuf->pubseekoff(0, ifs3.beg);
        size = (size >= MAX_SIZE) ? (MAX_SIZE - 1) : size;
        streamsize n = pbuf->sgetn(buff, size);
        buff[n] = L'\0';
        ifs3.close();
        //wcout.imbue(arab);
        //wcout << L"&#1575;&#1604;&#1593;&#1585;&#1576;&#1610;&#1577; = " << buff << std::endl;
        OutputDebugStringW(L"\n");
        OutputDebugStringW(L"&#1575;&#1604;&#1593;&#1585;&#1576;&#1610;&#1577; = ");
        OutputDebugStringW(buff);
        OutputDebugStringW(L"\n");
    }
    else {
        OutputDebugString(L"\n文件不存在!!!!!\n\n");
    }
}


上面代码中的阿拉伯文全部html转码了,看效果图吧:
文件名:
2024-03-09 (2).png
2024-03-09 (4).png
2024-03-09 (1).png

2024-03-09.png

免费评分

参与人数 2吾爱币 +4 热心值 +2 收起 理由
collinchen1218 + 1 + 1 solly老师厉害!
冥界3大法王 + 3 + 1 谢谢@Thanks!

查看全部评分

 楼主| 冥界3大法王 发表于 2024-3-10 09:20
@solly 还得帮忙编译成一个32位和一个64位的*.exe传上来,谢谢。
solly 发表于 2024-3-10 14:28
本帖最后由 solly 于 2024-3-10 20:57 编辑
冥界3大法王 发表于 2024-3-10 09:20
@solly 还得帮忙编译成一个32位和一个64位的*.exe传上来,谢谢。

见连接,ZIP 格式:
链接: https://pan.baidu.com/s/1oGqcWUzZOO4gVAw0KwVkdw?pwd=52pj
提取码: 52pj 复制这段内容后打开百度网盘手机App,操作更方便哦

图片隐写格式
链接: https://pan.baidu.com/s/19AJ23rOAzmbi_oipAw-rPg?pwd=52pj
提取码: 52pj 复制这段内容后打开百度网盘手机App,操作更方便哦

注意,有个今年的web题的wp帖子説过:图片不能用Edge当作图片下载。在百度中也要点“下载”按钮下载文件。
crackme_mulng_Release1.zip.jpg
您需要登录后才可以回帖 登录 | 注册[Register]

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

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

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

GMT+8, 2024-5-9 09:16

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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