首页
社区
课程
招聘
[原创]超简单的特征码搜索算法以及DEMO.更新:加入对DUMP文件的支持
发表于: 2014-12-29 21:34 23646

[原创]超简单的特征码搜索算法以及DEMO.更新:加入对DUMP文件的支持

2014-12-29 21:34
23646
1.1
针对有保护的游戏.无法OPENPROCESS的情况.加入对DUMP文件的支持.
我就偷个懒了.DUMP文件自行使用XT获取...
感谢kuty的提示.

打开进程搜索耗时:


DUMP耗时:




DEMO在附件.
DEMO里最后显示的偏移是 CALL的地址-主模块的地址.现在游戏不少是动态的.不是固定的00400000
使用时自行配置特征码.例子在配置文件里.

格式:
名字\类型\偏移\特征码
类型是CALL就取指针.是数据就取指针的值.
支持带??的模糊搜索.

以下都是废话.拿了工具赶紧去祸害吧...

一般些特征码搜索算法,比如我要匹配这段

子串 A
53 56 57 89 65


文本 B
54 4F D3 02 70 56 FA 0A C8 53 56 57 89 65 EC C7 45 F0 AD 76 16 A4 33


无脑的做法就是
A[I] <> B[I]
B++
然后接着来.

总体来说特征码匹配大致都差不多.网上大把的KMP BM等算法最大的差别其他就是 '移动量' 的区别.也就是B++;

实际中搜索特征码.不可能把读取一大堆内存数据,然后转为字符串.
频繁访问内存太影响效率.
我们匹配时.一般读取与特征码等长的字段减少对内存的访问.

53 56 57 89 65
54 4F D3 02 70

第一个字节就已经不相等了.
A的第一个的字节是53.我们发现B与A等长的字串里面并没有53,
这时候我们可以B=B+lenght(子串 A);

也就是说.第二次的对比.将从
56 FA 0A C8 53 56 57 89 65 EC C7 45 F0 AD 76 16 A4 33

这里开始

这时候特征码越长.搜索的时间越短!

OK,算法很简单的优化了.接下来看搜索范围.
难道暴搜整片内存?00400000-7FFFFFFF
当然不了.参考OD的内存映射.获取代码段真让人愉悦.
然后GetModuleHandle来获取基址.
使用VirtualQueryEx函数来查询.用BaseAddress成员来对比下OK.

推荐一篇文件:http://blog.csdn.net/v_july_v/article/details/7041827

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (30)
雪    币: 45
活跃值: (396)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
支持 (??) 搜索吗?
2014-12-29 22:15
0
雪    币: 1088
活跃值: (30)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
支持.就跟OD一样
2014-12-29 22:16
0
雪    币: 114
活跃值: (180)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
标题错了吧~
2014-12-29 22:23
0
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
5
DEMO不是DOME。。
2014-12-29 22:46
0
雪    币: 773
活跃值: (442)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
6
lz应该发在资源下载区
2014-12-29 23:47
0
雪    币: 9560
活跃值: (2391)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7

53 56 57 89 65
C8 53 56 57 89 65 EC C7 45 F0 AD 76 16 A4 33

这样能搜到吗?
2014-12-30 00:09
0
雪    币: 52
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
给你个提示
你这种程序对付有保护的就一无四处了
有一种东西叫DUMP
很多内核工具都支持这玩意
DUMP出来的文件用脚本或者自己写代码去搜索吧,少年
2014-12-30 01:25
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
好东西 刚好需要这个 谢谢楼主分享
2014-12-30 01:53
0
雪    币: 240
活跃值: (388)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
这种加长度的搜索方法不对的
2014-12-30 09:22
0
雪    币: 517
活跃值: (84)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
11
KMP算法呗~
2014-12-30 10:46
0
雪    币: 931
活跃值: (199)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
自己写KMP,不用转成字符串,直接搜字符,效率更高。
2014-12-30 10:50
0
雪    币: 102
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
同问?这种算法无问题吗?
2014-12-30 13:11
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
关键是在不等的时候搜索算法怎么处理,还不如用现成的算法
2015-1-9 11:59
0
雪    币: 1042
活跃值: (470)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
skin挺好看的.
2015-1-10 17:45
0
雪    币: 376
活跃值: (92)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
楼主可否开源
2015-1-10 19:02
0
雪    币: 20
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
要是需要的数据,正好在代码中间怎么办?

要搜索的代码:0A 2B 3A 4A 5A 7B 10
完整代码:00 90 20 33 0A 2B 3A 4A 5A 7B 10 00 30 30 30 90 90 90
2015-2-13 15:14
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
楼主不是说了,移动量么?首字符配到0x0A才开始配第二个,我现在就用这种方法,感觉效率不高呢。愁。有啥好算法,知道的大牛给讲讲倍。
2015-2-15 14:27
0
雪    币: 1905
活跃值: (1537)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
19


Sunday 算法。谁用谁知道。
2015-2-15 16:57
0
雪    币: 608
活跃值: (91)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
愚钝了。。没有看出来有什么错误啊。
很好~~
2015-3-17 22:13
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
逗比   你不认识我   你不认识我    你不认识我!!!
2015-3-22 22:33
0
雪    币: 69
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
不错值得关注~!
2015-3-25 14:37
0
雪    币: 1602
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
还行,不错的东西
2015-5-24 10:54
0
雪    币: 10910
活跃值: (3279)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
24
这种东西没什么算法比得过汇编代码编的比较。
2015-5-24 11:13
0
雪    币: 144
活跃值: (335)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
marky一下
2015-5-24 11:24
0
游客
登录 | 注册 方可回帖
返回
//