5#define ENTROPY_DATA_TRESHOLD 3.0
6#define ENTROPY_CODE_TRESHOLD ENTROPY_DATA_TRESHOLD
7#define ENTROPY_ENC_TRESHOLD 6.0
8#define ENTROPY_STRONG_ENC_TRESHOLD 7.0
10#define CHARSET_SIZE 0xFF
18 auto val_itr = stats.currArea.histogram.find(
val);
20 if (
val_itr != stats.currArea.histogram.end()) {
29 if (!stats.currArea.size)
return 0;
31 for (
auto itr = stats.currArea.histogram.begin();
itr != stats.currArea.histogram.end(); ++
itr) {
33 size_t size =
itr->second;
51 std::cout <<
"[+] OK " << std::hex << (
UINT)
val << std::dec <<
" : " <<
currRatio <<
"\n";
62 if (!stats.currArea.foundStrings.size()) {
69 if (
found == stats.currArea.foundStrings.end()) {
82 if (!currArea.size)
return 0;
85 size_t peakVal = currArea.frequencies.rbegin()->first;
87 for (
auto itr1 = currArea.frequencies.rbegin();
itr1 != currArea.frequencies.rend(); ++
itr1, ++
i) {
102 for (
auto itr1 = currArea.frequencies.rbegin();
itr1 != currArea.frequencies.rend(); ++
itr1) {
120 const size_t patterns_count = 8;
121 char *patterns[patterns_count] = {
131 for (
size_t i = 0; i != patterns_count; ++i) {
132 codeStrings.insert(patterns[i]);
134 return codeStrings.size();
153 double entropy = stats.currArea.entropy;
157 std::cout <<
"FOUND strings: " << stats.currArea.foundStrings.size() <<
"\n";
159 for (
auto itr = stats.currArea.foundStrings.begin();
itr != stats.currArea.foundStrings.end(); ++
itr)
162 size_t count =
itr->second;
163 std::cout <<
"---->>> FOUND Str " <<
codeStr <<
" count: " << count <<
"\n";
171 std::cout <<
"---->>> STR points: " <<
strPoints <<
"\n";
178 std::map<BYTE, double>
ratios;
189 std::cout <<
"---->>> CODE points: " <<
ratiosPoints <<
"\n";
215 double entropy = stats.currArea.entropy;
227 const double mean =
dev.getMean();
242 double stDev =
dev.calcSampleStandardDeviation();
264 std::cout <<
"All peaks: \n";
266 std::cout << std::hex << (
UINT)*
itr <<
" ";
283 double entropy = stats.currArea.entropy;
287 if (stats.currArea.frequencies.size() > 1) {
288 auto fItr = stats.currArea.frequencies.begin();
289 auto eItr = stats.currArea.frequencies.rbegin();
339 if (!stats.isFilled()) {
340 std::cout <<
"Stat not filled!\n";
348 if (
m->isMatching(stats)) {
349 info.matchedRules.push_back(
m->name);
virtual bool _isMatching(IN const AreaMultiStats &stats)
virtual bool _isMatching(IN const AreaMultiStats &stats)
virtual bool _isMatching(IN const AreaMultiStats &stats)
virtual bool _isMatching(IN const AreaMultiStats &stats)
size_t valuesNotBelowMean(IN const ChunkStats &currArea, double mean)
double getPrintableRatio(IN const AreaMultiStats &stats)
size_t fillCodeStrings(OUT std::set< std::string > &codeStrings)
size_t fetchPeakValues(IN const ChunkStats &currArea, IN double stdDev, int devCount, OUT std::set< BYTE > &peaks)
double getValRatio(IN const AreaMultiStats &stats, BYTE val)
size_t checkRatios(IN const AreaMultiStats &stats, IN std::map< BYTE, double > &ratios)
size_t fill_iat(BYTE *vBuf, size_t vBufSize, IN const peconv::ExportsMapper *exportsMap, IN OUT IATBlock &iat, IN ThunkFoundCallback *callback)
std::string info()
The string with the basic information about the scanner.
size_t countFoundStrings(IN const AreaMultiStats &stats, IN std::set< std::string > neededStrings, IN size_t minOccurrence)
#define ENTROPY_DATA_TRESHOLD
#define ENTROPY_CODE_TRESHOLD
#define ENTROPY_STRONG_ENC_TRESHOLD
#define ENTROPY_ENC_TRESHOLD
Statistics from a block of data.
void initRules(DWORD ruleTypes)
size_t findMatches(IN const AreaMultiStats &stats, OUT AreaInfo &info)
std::vector< RuleMatcher * > matchers