首页
社区
课程
招聘
91
[原创] 简单的内存特征码暴力搜索支持 ?? F? ?F
发表于: 2024-11-16 15:29 10434

[原创] 简单的内存特征码暴力搜索支持 ?? F? ?F

2024-11-16 15:29
10434

①通过掩码的方式使其支持 前、中、后通配符 及半字节;
②通过SSE2指令集找到特征码字节序列中的第一个不为'??'的元素后,后续的字节只比较不是'??'的特征字节,优化比较字节数。

#include <iostream>
#include <windows.h>
 
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[i] = 0xFF;
        }
        else  // 不是"??"的特征字符
        {
            if ('?' == tmpStr[0]) // 左半字节为'?'
            {
                tmpStr[0] = 'F';
                pWildcard[i] = (0xF << 4);
            }
            else if ('?' == tmpStr[1]) // 右半字节为'?'
            {
                tmpStr[1] = 'F';
                pWildcard[i] = 0xF;
            }
            else
            {
                pWildcard[i] = 0x0;
            }
            if (nFirstMatch == len) nFirstMatch = i;
        }
 
        pMarkCode[i] = 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;
}
#include <iostream>
#include <windows.h>
 
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[i] = 0xFF;
        }
        else  // 不是"??"的特征字符
        {
            if ('?' == tmpStr[0]) // 左半字节为'?'
            {
                tmpStr[0] = 'F';
                pWildcard[i] = (0xF << 4);
            }
            else if ('?' == tmpStr[1]) // 右半字节为'?'

[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

收藏
免费 91
支持
分享
赞赏记录
参与人
雪币
留言
时间
mb_qoxhpevt
你的分享对大家帮助很大,非常感谢!
3天前
DawnDawnDawn
期待更多优质内容的分享,论坛有你更精彩!
3天前
sh3ll0ck
为你点赞!
5天前
_Fish
感谢你分享这么好的资源!
5天前
_DriverEntry
你的分享对大家帮助很大,非常感谢!
6天前
x_req
你的分享对大家帮助很大,非常感谢!
6天前
mb_qnxaollu
谢谢你的细致分析,受益匪浅!
2025-2-15 21:15
于金怡
非常支持你的观点!
2025-2-15 00:16
Oday小斯
谢谢你的细致分析,受益匪浅!
2025-2-13 10:42
mb_hmgdlxyh
感谢你的贡献,论坛因你而更加精彩!
2025-2-11 21:23
考拉
为你点赞!
2025-2-7 09:33
Eeeekbaby
为你点赞!
2025-2-6 10:39
gyfhgyfh
谢谢你的细致分析,受益匪浅!
2025-2-4 15:39
秋雨02
这个讨论对我很有帮助,谢谢!
2025-1-27 12:30
sice
谢谢你的细致分析,受益匪浅!
2025-1-26 23:55
雪很冷1
+1
为你点赞!
2025-1-26 00:10
mb_rzebdfxg
非常支持你的观点!
2025-1-23 17:30
ZSYL
这个讨论对我很有帮助,谢谢!
2025-1-22 17:36
Amun
感谢你的积极参与,期待更多精彩内容!
2025-1-22 16:49
lixupeng
+1
这个讨论对我很有帮助,谢谢!
2025-1-13 19:43
freecat
+1
非常支持你的观点!
2025-1-11 22:02
mb_tlnfzrue
你的帖子非常有用,感谢分享!
2025-1-8 16:52
mb_brlsaqkk
非常支持你的观点!
2025-1-2 14:02
与你共舞2009
+1
为你点赞!
2025-1-1 10:58
jz小编
为你点赞!
2024-12-27 23:24
AunCss
为你点赞!
2024-12-25 21:44
mb_ttbudove
你的帖子非常有用,感谢分享!
2024-12-25 08:29
一个菜鸟Andy
你的帖子非常有用,感谢分享!
2024-12-23 13:45
mb_fjmsnatp
为你点赞!
2024-12-22 10:48
风青扬
谢谢你的细致分析,受益匪浅!
2024-12-13 13:30
mb_mqnixitq
谢谢你的细致分析,受益匪浅!
2024-12-9 13:25
bmax
你的帖子非常有用,感谢分享!
2024-12-9 10:53
mb_ckfmrnqa
感谢你分享这么好的资源!
2024-12-9 10:37
youxiaxy
+1
这个讨论对我很有帮助,谢谢!
2024-12-9 07:59
稳拿第一
+2
期待更多优质内容的分享,论坛有你更精彩!
2024-12-3 10:41
wx_漾
为你点赞!
2024-12-2 11:34
uvbs
感谢你的积极参与,期待更多精彩内容!
2024-12-1 19:30
ldljlzw
+1
你的分享对大家帮助很大,非常感谢!
2024-12-1 10:49
mb_eekppvie
为你点赞!
2024-11-27 16:19
珈蓝夜雨
为你点赞!
2024-11-27 12:13
guotouck
为你点赞!
2024-11-26 15:59
moo1
你的分享对大家帮助很大,非常感谢!
2024-11-26 14:29
Hades一KXXY
非常支持你的观点!
2024-11-25 09:59
mb_rwumrjoa
你的帖子非常有用,感谢分享!
2024-11-24 18:31
TkBinary
感谢你分享这么好的资源!
2024-11-23 10:24
mb_awlrcyuc
你的分享对大家帮助很大,非常感谢!
2024-11-23 01:58
DFY12138
谢谢你的细致分析,受益匪浅!
2024-11-22 17:43
iporus
你的分享对大家帮助很大,非常感谢!
2024-11-22 14:47
mb_owaabxox
谢谢你的细致分析,受益匪浅!
2024-11-21 17:47
心里某个地方
感谢你的积极参与,期待更多精彩内容!
2024-11-21 13:34
Y6blNU1L
你的帖子非常有用,感谢分享!
2024-11-21 09:10
北门观雪
+1
你的帖子非常有用,感谢分享!
2024-11-21 08:14
江南小虫虫
为你点赞!
2024-11-20 19:13
palkiver
谢谢你的细致分析,受益匪浅!
2024-11-20 10:34
情未央丶
感谢你的积极参与,期待更多精彩内容!
2024-11-20 10:25
btmanbtman
为你点赞!
2024-11-20 09:49
rooky2000
感谢你的贡献,论坛因你而更加精彩!
2024-11-20 08:30
mb_yfioexda
非常支持你的观点!
2024-11-20 00:59
暴走的莎莉酱
这个讨论对我很有帮助,谢谢!
2024-11-20 00:28
非白即黑
感谢你分享这么好的资源!
2024-11-19 16:13
kishou_yusa
为你点赞!
2024-11-19 15:37
sanyoo
这个讨论对我很有帮助,谢谢!
2024-11-19 10:53
沉迷于
为你点赞!
2024-11-19 10:10
nekaxi
+1
非常支持你的观点!
2024-11-19 06:06
黑手鱼
+3
感谢你分享这么好的资源!
2024-11-18 17:29
wonghouleong
感谢你分享这么好的资源!
2024-11-18 16:29
大嘴巴巴
期待更多优质内容的分享,论坛有你更精彩!
2024-11-18 15:55
yuzhouheike
为你点赞!
2024-11-18 14:02
mb_zvpgudpv
你的分享对大家帮助很大,非常感谢!
2024-11-18 13:45
张德学
+2
感谢你的贡献,论坛因你而更加精彩!
2024-11-18 11:37
养只猫不好么
+2
感谢你的贡献,论坛因你而更加精彩!
2024-11-18 10:15
wowocock
这个讨论对我很有帮助,谢谢!
2024-11-18 10:12
asd
这个讨论对我很有帮助,谢谢!
2024-11-18 09:59
wenxuqi
你的分享对大家帮助很大,非常感谢!
2024-11-18 09:42
Susan0
你的帖子非常有用,感谢分享!
2024-11-17 22:58
天地豪迈
+1
感谢你的贡献,论坛因你而更加精彩!
2024-11-17 22:55
UnicornMaker
期待更多优质内容的分享,论坛有你更精彩!
2024-11-17 22:25
mb_dtidoewd
这个讨论对我很有帮助,谢谢!
2024-11-17 19:18
tank小王子
+6
这个讨论对我很有帮助,谢谢!
2024-11-17 17:26
superlover
+10
感谢你分享这么好的资源!
2024-11-17 17:03
绿雪羚羊
感谢你的积极参与,期待更多精彩内容!
2024-11-17 15:33
piaoyi587
谢谢你的细致分析,受益匪浅!
2024-11-17 12:25
渗透
你的帖子非常有用,感谢分享!
2024-11-17 11:55
Gagma
感谢你的积极参与,期待更多精彩内容!
2024-11-17 11:34
墨穹呢
为你点赞!
2024-11-17 10:47
ylp1332
非常支持你的观点!
2024-11-17 09:14
hahayzl
你的帖子非常有用,感谢分享!
2024-11-16 23:27
huangyalei
谢谢你的细致分析,受益匪浅!
2024-11-16 22:55
奶思兔
这个讨论对我很有帮助,谢谢!
2024-11-16 19:23
木志本柯
+3
为你点赞!
2024-11-16 18:20
wuli鸭蛋君
感谢你的积极参与,期待更多精彩内容!
2024-11-16 18:06
最新回复 (81)
雪    币: 4061
活跃值: (4432)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错,学习了。
2024-11-17 09:56
1
雪    币: 0
活跃值: (470)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不错,学习学习
2024-11-17 09:59
0
雪    币: 2607
活跃值: (3587)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
感谢分享
2024-11-17 10:47
0
雪    币: 105
活跃值: (4935)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
66666666666
2024-11-17 11:03
0
雪    币: 0
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习学习
2024-11-17 12:48
0
雪    币: 2945
活跃值: (2942)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
学习学习,有收获
2024-11-17 13:51
0
雪    币: 77
活跃值: (774)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
66666666666
2024-11-17 14:14
0
雪    币: 248
活跃值: (1121)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
索要"点赞"或"防沉底",何不让它烂在肚里酿成美酒,自己享用?
2024-11-17 15:35
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
66666666666
2024-11-17 17:10
0
雪    币: 3270
活跃值: (2879)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
很好。学习了一种方法了。
2024-11-18 09:23
0
雪    币: 4438
活跃值: (3651)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
来看看,顶一个。
2024-11-18 09:33
0
雪    币: 7621
活跃值: (4353)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
看看算法怎么样
2024-11-18 09:55
0
雪    币: 4308
活跃值: (1102)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
2024-11-18 10:09
0
雪    币: 1442
活跃值: (3235)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
感谢分享
2024-11-18 10:15
0
雪    币: 2448
活跃值: (4054)
能力值: ( LV6,RANK:81 )
在线值:
发帖
回帖
粉丝
16
好好好
2024-11-18 10:27
0
雪    币: 2549
活跃值: (7018)
能力值: ( LV7,RANK:102 )
在线值:
发帖
回帖
粉丝
17
我认为搜索这种F?半字节格式的特征码是伪需求,所有F?的搜索需求应该都可以通过转换为搜索单字节特征码来实现,所以就没处理这种。
2024-11-18 11:02
1
雪    币: 100
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
666
2024-11-18 13:59
0
雪    币: 161
活跃值: (1764)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
感谢分享
2024-11-18 14:01
0
雪    币: 9514
活跃值: (6760)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
20
思路打开,不需要效率的情况下,把内存字节转换成hex字符串就能很好处理这些问题。
还有就着这种特征搜索也就x86体系有效。arm体系没什么作用
2024-11-18 14:04
0
雪    币: 867
活跃值: (1496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
21
mudebug 思路打开,不需要效率的情况下,把内存字节转换成hex字符串就能很好处理这些问题。 还有就着这种特征搜索也就x86体系有效。arm体系没什么作用

这篇帖子不知道为什么,我无法再次编辑!

最后于 2024-11-26 14:57 被wtujoxk编辑 ,原因:
2024-11-18 20:55
0
雪    币: 120
活跃值: (921)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
学习了
2024-11-19 09:58
0
雪    币: 4977
活跃值: (3952)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
支持下 虽然暂时用不到
2024-11-19 10:10
0
雪    币: 9
活跃值: (1429)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
不错,学习了
2024-11-19 10:50
0
雪    币: 6
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
25
不错,学习了
2024-11-19 13:12
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册