2011-04-19 5 views
2

문제는 실행 파일을 검사하고 분석을 위해 문자열을 찾아야하며 sysinternals의 strings.exe을 사용해야합니다. 그러나 의미있는 문자열과 사소한 문자열을 구별하는 방법,이 문제를 해결할 수있는 알고리즘이나 생각이 있습니까 (통계? 확률?).문자열을 판단하는 알고리즘이 있습니까?

예를 들어

: strings.exe에서 추출 문자열 (모든 문자열의 일부) 경험적 판단에서

S`A 
waA 
RmA 
>rA 
5xA 
GetModuleHandleA 
LocalFree 
LoadLibraryA 
LocalAlloc 
GetCommandLineW 

지난 5 문자열을 의미하고, 처음 5 사람은 없습니다. 이 문제를 해결하려면 블랙리스트 또는 화이트리스트와 같은 사전을 사용하지 마십시오.

+0

또는 적어도이 예를 들어 문자 – Andrey

+0

의 나쁜 N-gramms와 함께 몇 가지 사전을 사용합니다 'strings -n4'는 또한 차별화 역할을합니다. 좀 더 복잡하면 digram 또는 trigram 테이블을 채우고 영어 digram 또는 trigram 테이블과 더 일치하는 단어를 선택할 수 있습니다. – sarnold

답변

5

간단한 알고리즘 : 후보 문자열을 첫 번째 대문자/공백/숫자의 단어로 분리 한 다음 단어를 사전과 비교합니다.

0

의미있는 단어에 대한 확실한 규칙이 있습니까? 아니면 그들이 사전에있는 단어입니까? 사전의 단어 인 경우 trie's

다음 문자가 대문자로 표기 될 때까지 단어를 검색 할 수 있습니다. 대문자로 시작하면 트라이의 시작부터 시작하여 다음 단어를 찾습니다.

그냥 2 센트입니다.

  • 바르
2

사용 N-그램 N-그램은 그 단어가 meaningfull 수있는 확률이 무엇인지를 알려줍니다. 마크로프 사슬과 n-grams (http://en.wikipedia.org/wiki/N-gram)에 대해 읽어보십시오. 각 편지를 주로서 다루고 의미 있고 무의미한 말을 취하십시오. 예를 들어 :

의미없는 단어 B^^@, #AT

일반 단어 : BOOK, CAT

그들을 위해 두 개의 언어 모델을 생성 (괘 최선을 될 것입니다) http://en.wikipedia.org/wiki/Language_model

을하고 지금은 확인할 수있는 모델 단어 아마도 생성되어 다른 언어보다 더 큰 확률로 언어 모델을 취합니다. 이것은

당신은 의미없는 단어의 집합 필요가 없다는 것을 기억하여 조건 충족 (내가 약 1,000 괜찮을 것이라고 생각)하지 의미

관련 문제