能力值:
( LV12,RANK:779 )
|
-
-
2 楼
你这个情况,直接比较快一些。不必转为可打印的hex比较。
只要一个int 型的mask即可。更长一点的定义mask字符串。
int mask = 0xFF0000FF;
int val = 0x900000EB;
找到 data & mask == val 即可。
一个类似的。 下面这个是找是否存在的pat的。不能直接套用。
int search_pattern_mask(unsigned char *pxx, unsigned char *pat, unsigned char *smask, int slen)
{
int j;
for(j = 0; j < slen; j++) {
if(smask[j] == 0)
continue;
if((pxx[j] & smask[j]) != (pat[j] & smask[j]))
break;
}
return ((j == slen) ? 1 : 0);
}
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
readyu 大侠,不是我要找那串哦,只是打了一下简单的比方。因为想知道OllyDbg里面 的 Ctrl+B的功能是怎么实现的。
所以特上来一问~~~ 好像还是不明白。。。
readyu 大大很热心的帮助我,很感谢哦~ 祝您有个好心情·不要介意偶很笨哈。。。
|
能力值:
( LV12,RANK:779 )
|
-
-
4 楼
我用的是比较简单的想法, 掩码比较。
没了解过OllyDbg的实现。
pattern是特征的串,
data是目的,
你根据pattern构造一个它的特征mask。
然后这样比较:
(mask串“与上”pattern)比较 (mask串“与上”当前data)
比如base256,就是我们所说的hex模式:
任意的byte,用0x00去掩码,比较的时候跳过。
确定的byte,用0xFF去掩码
如果是半个字节呢?
比如
?? C0 0F 8? ?? ?? ?? 0?
这样的,就用掩码
00 FF FF F0 00 00 00 F0
3? ?? ?8 4?
F0 00 0F F0
实际上,这样的mask可以对付bit流的模糊匹配。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
偶还是先去撞会儿墙再来谢谢readyu大大
|
|
|