吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 705|回复: 7
上一主题 下一主题
收起左侧

[求助] 用C++ Builder 12 编译之后控制台输出个C9

[复制链接]
跳转到指定楼层
楼主
冥界3大法王 发表于 2024-12-9 08:57 回帖奖励
https://bbs.kanxue.com/thread-284451.htm


这就完了,使用场合何在?

#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <windows.h>
using namespace std;


int main()
{
    //模拟内存中的字节数据
    BYTE MemByte[] = { 0x33, 0xC9, 0x89, 0x0D, 0xB4, 0x67, 0x92, 0x77, 0x89, 0x0D, 0xB8, 0x67, 0x92, 0x77, 0x88, 0x08, 0x38, 0x48, 0x02, 0x74, 0x05, 0xE8, 0x94, 0xFF, 0xFF, 0xFF, 0x33, 0xC0, 0xC3, 0x8B, 0xFF, 0x55, 0x8B, 0xEC, 0x83, 0xE4, 0xF8 };


    //特征码为:?9 ?? 0? ?? 67
    //会处理成:F9 FF 0F FF 67 进行匹配
    std::string pattern = "?9 ?? 0? ?? 67";
    int index = 0;
    while ((index = pattern.find(' ', index)) >= 0) pattern.erase(index, 1); //去除特征码所有空格
    size_t len = pattern.length() / 2; //计算特征码长度
    size_t nFirstMatch = len;  // 跳过头部??,记录第一次匹配的位置半字符或非??,用于优化搜索
    BYTE* pMarkCode = new BYTE[len];  // 存储转换后的特征码字节
    BYTE* pWildcard = new BYTE[len];  // 存储特征字符串中??、?(??=FF、?=F、非?=0) 通配符


    //处理特征码字符串,转换成字节数组
    for (size_t i = 0; i < len; i++)
    {
        std::string tmpStr = pattern.substr(i * 2, 2);
        if ("??" == tmpStr) // 是"??"的特征字符
        {
            tmpStr = "FF";
            pWildcard = 0xFF;
        }
        else  // 不是"??"的特征字符
        {
            if ('?' == tmpStr[0]) // 左半字节为'?'
            {
                tmpStr[0] = 'F';
                pWildcard = (0xF << 4);
            }
            else if ('?' == tmpStr[1]) // 右半字节为'?'
            {
                tmpStr[1] = 'F';
                pWildcard = 0xF;
            }
            else
            {
                pWildcard = 0x0;
            }
            if (nFirstMatch == len) nFirstMatch = i;
        }


        pMarkCode = strtoul(tmpStr.c_str(), nullptr, 16);
    }


    //搜索内存,匹配特征码算法
    for (size_t m = 0; m < sizeof(MemByte); ++m)
    {
        if (!((MemByte[m] | pWildcard[nFirstMatch]) ^ pMarkCode[nFirstMatch])) //匹配上第一个字节
        {
            size_t offset = m - nFirstMatch; //记录偏移量
            for (size_t n = nFirstMatch; n < len; ++n) //匹配后续字节
            {
                if (offset > sizeof(MemByte) - len) break; //超出内存范围
                if (pWildcard[n] != 0xFF)  //后续字节是"??"的通配符,跳过,这句代码可以优化搜索
                    if ((MemByte[offset + n] | pWildcard[n]) ^ pMarkCode[n]) break; //匹配失败
                if (n + 1 == len) //匹配成功
                {
                    printf("%Ix\n", MemByte[m - nFirstMatch]);
                }
            }
        }
    }
    system("pause");
    return 0;
}

免费评分

参与人数 2吾爱币 +1 热心值 +1 收起 理由
lyrong2008 + 1 用心讨论,共获提升!
jiangsongyi + 1 谢谢@Thanks!

查看全部评分

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

沙发
深爱成瘾 发表于 2024-12-9 09:12
c++builder和radstudio什么区别?
3#
sunsjw 发表于 2024-12-9 09:21
4#
firstrose 发表于 2024-12-9 09:43
lz你在明知故问是吧?字节流模式匹配用途很多,比如杀毒软件什么的。
5#
 楼主| 冥界3大法王 发表于 2024-12-9 10:08 |楼主
深爱成瘾 发表于 2024-12-9 09:12
c++builder和radstudio什么区别?

安装上radstudio
就会有快捷方式
一个来启动delphi
另一个。。。C++Builder
只是启动参数不一样
IDE都是一套。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
深爱成瘾 + 1 + 1 用心讨论,共获提升!

查看全部评分

6#
苏紫方璇 发表于 2024-12-9 10:30
这个大佬在论坛也发了
内存特征码暴力搜索算法支持 ?? F? ?F
https://www.52pojie.cn/thread-1982500-1-1.html
(出处: 吾爱破解论坛)

用途就是搜特征码啥的,和od的ctrl+b是一样的
7#
zhangjs73 发表于 2024-12-10 11:11
楼主有没有关于CB编译链接那些设置的文档啊,好多看不懂。
8#
 楼主| 冥界3大法王 发表于 2024-12-10 17:10 |楼主
zhangjs73 发表于 2024-12-10 11:11
楼主有没有关于CB编译链接那些设置的文档啊,好多看不懂。

@zhangjs73
这玩意的文档大部分在官方网页和国外的网站中
视频也在油管中
天国九成九的PDF和内容都是20年前的
不少网民的看法也都是以前的
所以欲看新的最好能FQ
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2025-3-9 16:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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