看流星社区

 找回密码
 注册账号
查看: 3091|回复: 2

[C/C++源码] Sunday算法实现内存快速搜索特征码(支持带问号)

[复制链接]

该用户从未签到

发表于 2020-3-22 18:49:45 | 显示全部楼层 |阅读模式

Sunday算法实现内存快速搜索特征码(支持带问号)

  1. #include<Windows.h>
  2. #include<iostream>
  3. #include<vector>
  4. #include<time.h>

  5. using namespace std;

  6. #define BLOCKMAXSIZE 409600//每次读取内存的最大大小
  7. BYTE* MemoryData;//每次将读取的内存读入这里
  8. short Next[260];

  9. //特征码转字节集
  10. WORD GetTzmArray(char* Tzm, WORD* TzmArray)
  11. {
  12.         int len = 0;
  13.         WORD TzmLength = strlen(Tzm) / 3 + 1;

  14.         for (int i = 0; i < strlen(Tzm); )//将十六进制特征码转为十进制
  15.         {
  16.                 char num[2];
  17.                 num[0] = Tzm[i++];
  18.                 num[1] = Tzm[i++];
  19.                 i++;
  20.                 if (num[0] != '?' && num[1] != '?')
  21.                 {
  22.                         int sum = 0;
  23.                         WORD a[2];
  24.                         for (int i = 0; i < 2; i++)
  25.                         {
  26.                                 if (num[i] >= '0' && num[i] <= '9')
  27.                                 {
  28.                                         a[i] = num[i] - '0';
  29.                                 }
  30.                                 else if (num[i] >= 'a' && num[i] <= 'z')
  31.                                 {
  32.                                         a[i] = num[i] - 87;
  33.                                 }
  34.                                 else if (num[i] >= 'A' && num[i] <= 'Z')
  35.                                 {
  36.                                         a[i] = num[i] - 55;
  37.                                 }

  38.                         }
  39.                         sum = a[0] * 16 + a[1];
  40.                         TzmArray[len++] = sum;
  41.                 }
  42.                 else
  43.                 {
  44.                         TzmArray[len++] = 256;
  45.                 }
  46.         }
  47.         return TzmLength;
  48. }

  49. //获取Next数组
  50. void GetNext(short* next, WORD* Tzm, WORD TzmLength)
  51. {
  52.         //特征码(字节集)的每个字节的范围在0-255(0-FF)之间,256用来表示问号,到260是为了防止越界
  53.         for (int i = 0; i < 260; i++)
  54.                 next[i] = -1;
  55.         for (int i = 0; i < TzmLength; i++)
  56.                 next[Tzm[i]] = i;
  57. }

  58. //搜索一块内存
  59. void SearchMemoryBlock(HANDLE hProcess, WORD* Tzm, WORD TzmLength, unsigned __int64 StartAddress, unsigned long size, vector<unsigned __int64>& ResultArray)
  60. {
  61.         if (!ReadProcessMemory(hProcess, (LPCVOID)StartAddress, MemoryData, size, NULL))
  62.         {
  63.                 return;
  64.         }

  65.         for (int i = 0, j, k; i < size;)
  66.         {
  67.                 j = i; k = 0;

  68.                 for (; k < TzmLength && j < size && (Tzm[k] == MemoryData[j] || Tzm[k] == 256); k++, j++);

  69.                 if (k == TzmLength)
  70.                 {
  71.                         ResultArray.push_back(StartAddress + i);
  72.                 }

  73.                 if ((i + TzmLength) >= size)
  74.                 {
  75.                         return;
  76.                 }

  77.                 int num = Next[MemoryData[i + TzmLength]];
  78.                 if (num == -1)
  79.                         i += (TzmLength - Next[256]);//如果特征码有问号,就从问号处开始匹配,如果没有就i+=-1
  80.                 else
  81.                         i += (TzmLength - num);
  82.         }
  83. }

  84. //搜索整个程序
  85. int SearchMemory(HANDLE hProcess, char* Tzm, unsigned __int64 StartAddress, unsigned __int64 EndAddress, int InitSize, vector<unsigned __int64>& ResultArray)
  86. {
  87.         int i = 0;
  88.         unsigned long BlockSize;
  89.         MEMORY_BASIC_INFORMATION mbi;

  90.         WORD TzmLength = strlen(Tzm) / 3 + 1;
  91.         WORD* TzmArray = new WORD[TzmLength];

  92.         GetTzmArray(Tzm, TzmArray);
  93.         GetNext(Next, TzmArray, TzmLength);

  94.         //初始化结果数组
  95.         ResultArray.clear();
  96.         ResultArray.reserve(InitSize);

  97.         while (VirtualQueryEx(hProcess, (LPCVOID)StartAddress, &mbi, sizeof(mbi)) != 0)
  98.         {
  99.                 //获取可读可写和可读可写可执行的内存块
  100.                 if (mbi.Protect == PAGE_READWRITE || mbi.Protect == PAGE_EXECUTE_READWRITE)
  101.                 {
  102.                         i = 0;
  103.                         BlockSize = mbi.RegionSize;
  104.                         //搜索这块内存
  105.                         while (BlockSize >= BLOCKMAXSIZE)
  106.                         {
  107.                                 SearchMemoryBlock(hProcess, TzmArray, TzmLength, StartAddress + (BLOCKMAXSIZE * i), BLOCKMAXSIZE, ResultArray);
  108.                                 BlockSize -= BLOCKMAXSIZE; i++;
  109.                         }
  110.                         SearchMemoryBlock(hProcess, TzmArray, TzmLength, StartAddress + (BLOCKMAXSIZE * i), BlockSize, ResultArray);

  111.                 }
  112.                 StartAddress += mbi.RegionSize;

  113.                 if (EndAddress != 0 && StartAddress > EndAddress)
  114.                 {
  115.                         return ResultArray.size();
  116.                 }
  117.         }
  118.         free(TzmArray);
  119.         return ResultArray.size();
  120. }

  121. int main()
  122. {
  123.         //初始化MemoryData大小
  124.         MemoryData = new BYTE[BLOCKMAXSIZE];

  125.         DWORD pid=0;
  126.         vector<unsigned __int64> ResultArray;
  127.        
  128.         cout << "请输入进程ID:" << endl;
  129.         cin >> pid;

  130.         //通过进程ID获取进程句柄
  131.         HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, pid);

  132.         int start = clock();
  133.         SearchMemory(hProcess, (char*)"FF 3F FF ?? FF F2", 0x410000, 0xFFFFFFFF, 30, ResultArray);
  134.         int end = clock();

  135.         cout << "用时:" << end-start << "毫秒"<<endl;
  136.         cout << "搜索到" << ResultArray.size() << "个结果" << endl;

  137.         for (vector<unsigned __int64>::iterator it = ResultArray.begin(); it != ResultArray.end(); it++)
  138.         {
  139.                 printf("%x\n", *it);
  140.         }

  141.         return 0;
  142. }
复制代码

该用户从未签到

发表于 2021-7-31 09:57:22 | 显示全部楼层

















































{2021年7月05日}2021秋季,全球 崩 盘,三 峡 溃 坝

{2021卝年7月05曰}2021秋季,全球 崩 盘,三 峡 溃 坝



作者 : 安哥鲁莫娅
时间:  2021卝年7月05曰17:18:53         星期一         农历五月廿六
           上正宗指 3534.32点    恒指 28143.50点   道指34786.35点
            世界建筑曰



突然的,全球 金 融 市 场 连 续 跌 停 大 崩 盘,
没有什么,谁也没想到啊,友邦惊诧,黑 天 鹅 白天鹅 哥斯拉,
一切都是,蓄 谋 已 久 的精心策划。zéi 喊捉zéi。


{一} 今时今曰{辛丑2021卝年7月05曰} :
今时今曰,我预.测,人类有始.以来最大的金.融.崩 盘 ,
未来三个月之内,即,2021卝年8月、9月、10月,将 震 撼 呈 现。
---- 中卝囯股市、全球股市、全球金融市场 连序跌婷大崩 盘 , 大盘连
       续或稍稍间断30/40多个跌亭板,人类有.史以来最大的金融.嗨啸。
股市、汇市、债市、期货商品、可能还有楼卝市,全部连卝锁式彻底崩溃。
黄 金 价 格 应 该 避 险 bào 涨。
忽 然 之 间 ,天 塌 了。{ 全 球 闪 崩 }
十 八 级 金融大 地.震,史无前例地球崩卝盘,要 多 惨 有 多惨,世界沫曰。
金融天坑,股市雪崩、铡 dāo 斩 首 、bào 雷 溃 坝 ,希 特 勒 巴巴罗萨
金融闪击战 。画 皮 ,终 于 撕 去 了 。
道琼斯,憋了12年的一泡shǐ,2021秋季,总算找到了,公共厕所。
缠中说禅15年之前预卝言的,2019毁miè性下跌。{有两年误差}
已故“周期天王”周金涛的,“2018年到2019年是康波周期的万卝劫卝不卝复之年”。
以金.融战.争为表现形式的,第 叁 次.世.戒.大.战,全面 bào.发。
---- 一切友好互访探讨分歧,新型大囯关系,都是伪装梦幻 烟物弹,哄 洒 子。
       战 争 现在才刚刚开始,三至五年有个结果,就不错了。
       天王山之战 ;安史之乱。 大 气 候 小 气 候 。
---- 庄家航母集群,发动了总冲锋,终于 动 手 了,老大{ 暗 黑 帝卝囯 }岂容
      老 贰 一步步做大 :咬 牙 切 齿寝食难安笑脸。当年是苏联,今天,轮到
      中卝囯。
亚 投 行 、一 带 一 路 、货币互换 ……
美 元 位置往哪里摆 ?? 扼 shā 于 摇 篮 。
新型大囯关系,永远友好和平 。凭什么 ??不但天真幼稚,而且,鱼惷。
---- 滔天巨浪,世 界 末 曰 感叹 niào失jìn。
       殊不知,这仅仅是,哥斯拉的一只巨爪,而已。
       更大 恐 怖颤 栗,还在 2022、2023年。

憋 了十年了,无论中外股市,从未有过,像样的bào跌,这回,就一次跌个够。
最 危 险的时刻 骤 然降 临,尖 dāo 暗 xí,一 剑 封 喉 。
从不,预 先 通 知 。


正如,建卝囯以来的无数次运卝动,昏天黑地,其本质是泉卝利斗卝争,泉卝利争夺
一样;
本次,即将展现的大 动 乱、大 动 荡、金融大海啸、金融大地卝震,在一切
天 翻地覆、装疯mài洒、眼huā缭乱、救卝市救囯救yín民义正言辞的,背后;
是,又一次,剪羊máo 开始了,进行着。
是,这个地球的真正主人,无尽tān婪的最顶级财富精英,对广大庶卝民的
剔 骨 掠 夺 。
最热的年份,最冷的人心。五面怪,要大小通吃。
不要又一次,被mài了,还替人家数钞票。
大 动 荡 、大 萧 条、飓风冰雨冲天烈焰,对于百卝姓庶卝民,是油zhà地狱;
对于某些人,却是发财良机,天堂乐园 。
无利不起早。

祸不单行,今时今曰,我断言,
2021卝年8月、9月、10月发生的全球 崩 盘 将因果触发,很快触发,人类有
始.以来最.大.人.祸 ---- 三.侠.溃.坝 ;
或许还有,其它 水 库 大 坝 、例如白鹤滩等的,彻 底 溃 。
一 片 汪 yáng ,一夜,一夜之间,中 囯 淹 sǐ 2000万 人。
一 片 汪 yáng ,一夜,一夜之间,中 囯 淹 sǐ 2000万 人。
我表述的,够不够,清楚 ??
我知道,“全 球 最 大 崩 盘”将触发“三 峡 溃 坝”,这一论断,几乎令
所有人嗤之以鼻。
请 ---- 时刻密切关注 三 峡 大 坝,关注种种“异象先兆”是否出现。
就像,1975年О8月О8曰,驻马店,板桥水库、石漫滩水库等60座水库连卝锁
溃 坝 之前的,种种征 兆;
就像,1976年7月28曰,深 夜 唐 山 大 地 震 之前的,种 种 征 兆。
到时候,事 实 会说明一切 。
记住,那时,迅速逃离、逃命,应该还来得急。或许。
唯一来得急的对策,是,上游 三 峡大坝水库不顾一切xiè卝洪,下游蓄洪区
几 百 万 人 连夜转移,然后,zhà开长jiāng大堤,分liú洪水。
命悬一线,全 靠 硝 酸 甘 油。
肉腐出虫,鱼枯生蠹。怠慢忘身,祸灾乃作。
sǐ 神 ,终 于 来 了 。
转瞬之间,已 经 来 到 生 sǐ 关 头 。
2021秋中 囯 ,生sǐ玄关、红 羊 劫 ,最危险的时刻终于到了 。
{三 峡 溃 坝 大 洪 水;股市羊群效应}
浩卝劫,降临之前,从不,预先通知。



{二} 全 球 崩 盘的 见 底 点 位 。

见底点位,是上 证 宗 指160点,左右。{上证综指壹佰六十点}
---- 325.⑧9点{1994.07.29}的二分之一;
---- 6124 ---- 9⑨8 ---- 160
---- 神奇数字333的一半 :333卝点 ÷ 2 = 166.5点
以9⑨8为轴心,以6.136倍为常数的等比数列。
以今天的上正宗指收盘点位3534.32点为基准。
股市瞬间跌去22倍 。
也可能,震撼性的,上证综指95.79点,见底。

五福临门 五 重 斩 :
5178 ÷ 2 ÷ 2 ÷ 2 ÷ 2 ÷ 2 = 162点
5178、2600、1300、700、350、160 。
一鼓作气五把镰dāo五重斩,瞬间,瞬间跌破200,跌破100,不信你散户,
信心不崩溃,谁还唱多 ??
{2018.07.11:上证综指收于2777.77点}
{2019.07.31:恒生指数收于27777.750点},7月之上,恐怖大王从天而降。
那时,你八成吓得不停颤卝抖,就像默克尔,这正是庄家们需要的。
一颗,比9⑨8、166④,震撼五倍的,超级zhà卝弹。麻辣鲜香滚卝烫。
哭爹喊酿屁滚niàoliú举囯震撼中,只要,保留20%仓位,便可稳赚不赔。
哭爹喊酿屁滚niàoliú举囯震撼中,只要,保留20%仓位,便可稳赚不赔。
上 证 综 指 800点左右,即166④的一半,很重要。反弹诱多。


为何,大盘160点左右见底 ??
本人在 :
{2021卝年5月30曰}论证2021下半年全球大崩卝盘的见底点位
{2020卝年12月05曰}论证2021上半年全球大崩卝盘的见底点位
{2020卝年5月27曰}论证2020下半年全球大崩卝盘的见底点位
{2019年11月30曰}论证2020上半年全球大崩卝盘的见底点位
{2019年5月19曰}论证2019下半年全球大崩卝盘的见底点位
【2016年3月11曰】四论,全球塴盘的见底点位。
【2015年9月26曰】 三论,全球塴盘的见底点位 。
…… ……
几篇文章之中有详细论证,网上可以搜到。

忽 然 之 间 ,天 崩 地 裂 。
朕给出,令庸 俗 大 众 惊诧疑惑、无fǎ接受的“庄稼底牌”,是无价之宝。
真卝理是电,不以任何人,任何泉卝利、任何所谓“大多数”的,意志为转移。
上正宗指跌去22倍见底 ;是166④点的十分之一 。
---- 3534.32点 --→ 160点。
       也有可能,跌破上证综指95.79点,见底。
道琼斯跌去54倍,大约6④0点见底;是6④40.О8点{2009.03.09}的十分之一 。
---- 34786.35点 --→ 6④0点。{跌去⑨8%}
恒生指数跌至1000点见底。
---- 28143.50点 --→ 1000点。

本次 惊 天 bào 跌 ,性质是 总 出 货 之前的 总 洗 盘 。
所以,与既往的所有下跌截然不同。
庄稼们“终极拉升”之前要 彻 底 击 碎 散户的心理防线 彻 底 洗干净 。
老股卝民不可被“xí惯思维”束缚。
滔天巨浪,映射的是人类的tān婪和恐惧。


máo票仙股满天飞。谜底,让你吃惊的合不拢嘴。这就对了。
我强调,我重申,股价跌去97% ,跌去97%,不是庄稼们 发 疯 了,
而是,他们,早已筹谋的,既定共同战略布jú。
不把散户完全吓的 屁 滚 niào liú,如何能达到,彻 底 洗 盘 的目的 ??
跌去九成,就像1929,对老股卝民来说,已经xí以为常;中卝囯股市,
曾经跌去90%的股票,比比皆是。
出乎意料,做梦也想不到,就是庄稼要达到的,目的。
跌去九成,已经,无fǎ充分刺卝激震撼、撕 裂 老股卝民、私募的神 经 系 统 。

狼以羊为生,庄以散为生。
庄稼是zhà油糕的,散户是,掏钱吃油糕的;
庄稼是拍电影的,散户是mǎi票看电影的;
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-3-29 20:59

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表