吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 976|回复: 8

添加资源表文件被提取的疑问

[复制链接]
狼巢 发表于 2025-10-13 09:13 | 显示全部楼层 |阅读模式

本站严厉禁止求脱求破行为(包含无自我分析直接求思路),如发现此类求助主题请点击“举报”,让我们共同维护优质的学习环境!


50HB
如题 一个EXE程序添加了图片资源表   会被提取出来  加壳了会被脱假壳提取出来   听说可以修改pe头 来防止提取 具体怎么操作的  有教程吗大佬们

最佳答案

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
沐泽 发表于 2025-10-13 09:13 | 显示全部楼层

最佳答案本应属于楼主私有,因此限制查看

您还有0次查看次数,点此查看答案

点此购买查看次数
也可以兑换VIP特权或加入解密专家,每日可免费查看5次最佳答案!

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
我的爱是你 发表于 2025-10-13 11:22 | 显示全部楼层

将图片进行简单加密,如进行二进制异或,使用时在进行异或解密。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 狼巢 发表于 2025-10-13 12:17 | 显示全部楼层

我的爱是你 发表于 2025-10-13 11:22
将图片进行简单加密,如进行二进制异或,使用时在进行异或解密。

有教程吗大佬
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
温酒书生 发表于 2025-10-13 14:44 | 显示全部楼层

直接压缩数据 然后压缩完的放到图片里面 写到文件里面加上解压数据即可
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
A18285528128 发表于 2025-10-14 01:22 | 显示全部楼层


这样真有用吗?大佬!希望你照此方法编译一个文件出来悬赏给我们菜鸟提取练手啊?
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 狼巢 发表于 2025-10-14 08:47 | 显示全部楼层


不想写出来 容易被弄 内存中运行 怎么写呢
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 狼巢 发表于 2025-10-14 08:58 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
我的爱是你 发表于 2025-10-14 12:11 | 显示全部楼层


[C++] 纯文本查看 复制代码
#include <stdio.h>
#include <easyx.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <gdiplus.h>
#pragma comment(lib, "gdiplus.lib")

using namespace Gdiplus;

// 初始化GDI
void InitGDIPlus(ULONG_PTR* token)
{
    GdiplusStartupInput input;
    GdiplusStartup(token, &input, NULL);
}

// 释放GDI
void ShutdownGDIPlus(ULONG_PTR token)
{
    GdiplusShutdown(token);
}

// XOR加密并保存至本地
void encryptImage(const char* srcFile, const char* dstFile, unsigned char key)
{
    FILE* src = NULL;
    FILE* dst = NULL;
    fopen_s(&src, srcFile, "rb");
    fopen_s(&dst, dstFile, "wb");

    if (!src || !dst)
    {
        printf("文件打开失败!\n");
        if (src) fclose(src);
        if (dst) fclose(dst);
        return;
    }

    fseek(src, 0, SEEK_END);
    long fileSize = ftell(src);
    fseek(src, 0, SEEK_SET);

    unsigned char* buffer = (unsigned char*)malloc(fileSize);
    fread(buffer, 1, fileSize, src);

    for (long i = 0; i < fileSize; i++)
        buffer[i] ^= key;

    fwrite(buffer, 1, fileSize, dst);

    free(buffer);
    fclose(src);
    fclose(dst);

    printf("图片加密完成,保存为: %s\n", dstFile);
}

//从内存加载图片GDI,因为EasyX的loadimage函数不支持从内存加载图片
IMAGE* loadImageFromMemory(const unsigned char* buffer, DWORD size)
{
    HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, size);
    if (!hMem) return NULL;

    void* pMem = GlobalLock(hMem);
    memcpy(pMem, buffer, size);
    GlobalUnlock(hMem);

    IStream* pStream = NULL;
    if (CreateStreamOnHGlobal(hMem, TRUE, &pStream) != S_OK)
    {
        GlobalFree(hMem);
        return NULL;
    }

    Gdiplus::Image* gdipImage = Gdiplus::Image::FromStream(pStream);
    if (!gdipImage || gdipImage->GetLastStatus() != Gdiplus::Ok)
    {
        pStream->Release();
        GlobalFree(hMem);
        delete gdipImage;
        return NULL;
    }

    int width = gdipImage->GetWidth();
    int height = gdipImage->GetHeight();

    IMAGE* img = new IMAGE(width, height);
    HDC hdc = GetImageHDC(img);

    Graphics graphics(hdc);
    graphics.DrawImage(gdipImage, 0, 0, width, height);

    delete gdipImage;
    pStream->Release();
    GlobalFree(hMem);

    return img;
}


// 异或解密内存加载函数
IMAGE* decryptImageInMemory(const char* encFile, unsigned char key)
{
    FILE* file = NULL;
    fopen_s(&file, encFile, "rb");
    if (!file)
    {
        printf("加密文件打开失败: %s\n", encFile);
        return NULL;
    }

    fseek(file, 0, SEEK_END);
    DWORD fileSize = ftell(file);
    fseek(file, 0, SEEK_SET);

    unsigned char* buffer = (unsigned char*)malloc(fileSize);
    fread(buffer, 1, fileSize, file);
    fclose(file);

    for (DWORD i = 0; i < fileSize; i++)
        buffer[i] ^= key;

    IMAGE* img = loadImageFromMemory(buffer, fileSize);
    free(buffer);

    if (img)
        printf("图片解密成功!\n");
    else
        printf("图片解密失败!\n");

    return img;
}


int main()
{
    // 初始化 EasyX
    initgraph(800, 600, EX_SHOWCONSOLE);
    setbkcolor(WHITE);
    cleardevice();

    // 初始化 GDI+
    ULONG_PTR gdipToken;
    InitGDIPlus(&gdipToken);

    unsigned char key = 0xAA;

    //将当前目录下1.png 异或加密0xAA并保存为1_xor.dat
    encryptImage("1.png", "1_xor.dat", key);

    //从当前目录读取 1_xor.dat 进行异或0xAA解密并加载图片
    IMAGE* img = decryptImageInMemory("1_xor.dat", key);
    if (img)
    {
        putimage(0, 0, img);
        delete img;
    }
    else
    {
        printf("加载图片失败!\n");
    }

    system("pause");

    // 释放 GDI+
    ShutdownGDIPlus(gdipToken);
    closegraph();
    return 0;
}

68edcc5f63ba3.png 68edcc60aa660.png
二进制异或就是二进制读文件,然后挨个字节异或,基本没啥能讲的。
上面代码长不过是为了直观显示,用了GDI显示图片。加密解密本身代码很少也很简单。

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

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