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

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

2024-11-16 15:29
15489
收藏
免费 141
支持
分享
最新回复 (122)
雪    币: 1
活跃值: (506)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
101
支持下
2025-3-20 10:21
0
雪    币: 213
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
102
真有点意思
2025-3-20 11:40
0
雪    币: 192
活跃值: (240)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
103
可以可以 ,学习学了,嘻嘻嘻
2025-3-20 11:53
0
雪    币: 23
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
104
学习学习
2025-3-20 12:14
0
雪    币: 5409
活跃值: (4634)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
105
感谢分享
2025-3-20 21:13
0
雪    币: 565
活跃值: (607)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
106
不错,学习了。
2025-3-21 12:48
0
雪    币: 144
活跃值: (2004)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
107
不错,学习了
2025-3-22 23:45
0
雪    币: 146
活跃值: (1075)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
108
感谢分享
2025-3-23 07:49
0
雪    币: 12002
活跃值: (18849)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
109
优化比较字节数
2025-3-23 11:35
0
雪    币: 9
活跃值: (544)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
110
look
2025-3-27 13:11
0
雪    币: 9
活跃值: (544)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
111
package main

import (
       "fmt"
       "iter"
       "slices"
       "strings"
)

type Pattern struct {
       Bytes    []byte   // 特征码字节(已处理通配符)
       Masks    []byte   // 通配符掩码(0xFF 表示全通配)
       FirstIdx int      // 第一个非通配符位置
}

func ParsePattern(pattern string) *Pattern {
       clean := strings.ReplaceAll(pattern, " ", "")
       length := len(clean) / 2
       p := &Pattern{
               Bytes:    make([]byte, length),
               Masks:    make([]byte, length),
               FirstIdx: length,
       }

       for i := 0; i < length; i++ {
               chunk := clean[i*2 : (i+1)*2]
               var mask, value byte

               switch {
               case chunk == "??":
                       mask, value = 0xFF, 0x00
               case chunk[0] == '?':
                       mask = 0xF0
                       value = parseHex(chunk[1])
               case chunk[1] == '?':
                       mask = 0x0F
                       value = parseHex(chunk[0]) << 4
               default:
                       mask = 0x00
                       value = (parseHex(chunk[0]) << 4) | parseHex(chunk[1])
               }

               if mask != 0xFF && p.FirstIdx == length {
                       p.FirstIdx = i
               }

               p.Bytes[i] = value
               p.Masks[i] = mask
       }

       return p
}

func parseHex(c byte) byte {
       if c >= '0' && c <= '9' {
               return c - '0'
       }
       return c - 'A' + 10
}

// 分块内存搜索(核心优化)
func SearchMemoryChunked(mem []byte, pattern *Pattern, chunkSize int) iter.Seq[int] {
       return func(yield func(int) bool) {
               chunks := slices.Chunk(mem, chunkSize) // 分块处理

               for _, chunk := range chunks {
                       // 为每个块生成独立的迭代器
                       iter := searchChunk(chunk, pattern)
                       for offset := range iter {
                               // 计算全局偏移(当前块起始位置 + 块内偏移)
                               globalOffset := (slices.Index(chunks, chunk) * chunkSize) + offset
                               if !yield(globalOffset) {
                                       return
                               }
                       }
               }
       }
}

// 单块内存搜索逻辑
func searchChunk(chunk []byte, pattern *Pattern) iter.Seq[int] {
       length := len(pattern.Bytes)
       return func(yield func(int) bool) {
               for i := 0; i <= len(chunk)-length; i++ {
                       // 检查第一个非通配符位置
                       firstCheck := i + pattern.FirstIdx
                       if firstCheck >= len(chunk) {
                               break
                       }

                       masked := chunk[firstCheck] | pattern.Masks[pattern.FirstIdx]
                       if masked != pattern.Bytes[pattern.FirstIdx] {
                               continue
                       }

                       // 匹配后续字节
                       match := true
                       for j := pattern.FirstIdx; j < len(pattern.Bytes); j++ {
                               pos := i + j
                               if pos >= len(chunk) {
                                       match = false
                                       break
                               }

                               if pattern.Masks[j] == 0xFF {
                                       continue
                               }

                               if (chunk[pos] | pattern.Masks[j]) != pattern.Bytes[j] {
                                       match = false
                                       break
                               }
                       }

                       if match && !yield(i) {
                               return
                       }
               }
       }
}

func main() {
       memData := []byte{
               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,
       }

       pattern := ParsePattern("?9 ?? 0? ?? 67") // 特征码解析

       // 使用分块迭代器搜索内存(块大小=16)
       iter := SearchMemoryChunked(memData, pattern, 16)

       // 收集匹配结果
       var matches []int
       for offset := range iter {
               matches = append(matches, offset)
       }

       fmt.Printf("Matches found at offsets: %v\n", matches)
}
2025-3-27 13:21
0
雪    币: 61
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
112
不错,学习了
2025-4-8 16:36
0
雪    币: 14
活跃值: (2000)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
113
支持下
2025-4-8 19:46
0
雪    币: 227
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
114
学习一下看看
2025-4-22 12:57
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
115
学习学习
2025-4-22 13:41
0
雪    币: 1028
活跃值: (974)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
116
要好好学习一下
2025-5-15 11:05
0
雪    币: 207
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
117
good
2025-5-24 17:08
0
雪    币: 4102
活跃值: (4894)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
118
看看内容
2025-5-24 18:30
0
雪    币: 3559
活跃值: (6290)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
119
学习了。
2025-5-26 01:43
0
雪    币: 4
活跃值: (618)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
120
学习
2天前
0
雪    币: 33
活跃值: (817)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
121
不错,学习了
1天前
0
雪    币: 5049
活跃值: (7720)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
122
可以可以学习了
1天前
0
雪    币: 586
活跃值: (1309)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
123
1111111111
1天前
0
游客
登录 | 注册 方可回帖
返回