160 - 14 bjanes.1

环境:

window xp sp3


工具:

ollydbg ,exeinfo pe


拿到程序后,查壳。显示是无壳的VB程序


用之前用的VB decompiler载入,没找到有用的东西,还是用回了OD。


OD载入,运行起来。输入“GNUBD”然后点击“”check it",弹出错误消息框,回到OD,F12暂停,Alt+F9回到用户领空,然后把错误消息框的“确定”点掉,然后就可以看到在OD中程序在哪里调用了MessageBox。

00403A4E   .  C785 58FFFFFF>mov dword ptr ss:[ebp-0xA8],bjanes_1.004>;  UNICODE "Wrong serial!"
00403A58   .  89BD 50FFFFFF mov dword ptr ss:[ebp-0xB0],edi
00403A5E   .  FFD6          call esi                                 ;  <&MSVBVM60.__vbaVarDup>
00403A60   .  8D95 60FFFFFF lea edx,dword ptr ss:[ebp-0xA0]
00403A66   .  8D4D C0       lea ecx,dword ptr ss:[ebp-0x40]
00403A69   .  C785 68FFFFFF>mov dword ptr ss:[ebp-0x98],bjanes_1.004>;  UNICODE "Sorry, try again!"
00403A73   .  89BD 60FFFFFF mov dword ptr ss:[ebp-0xA0],edi
00403A79   .  FFD6          call esi
00403A7B   .  8D45 90       lea eax,dword ptr ss:[ebp-0x70]
00403A7E   .  8D4D A0       lea ecx,dword ptr ss:[ebp-0x60]
00403A81   .  50            push eax
00403A82   .  8D55 B0       lea edx,dword ptr ss:[ebp-0x50]
00403A85   .  51            push ecx
00403A86   .  52            push edx
00403A87   .  8D45 C0       lea eax,dword ptr ss:[ebp-0x40]
00403A8A   .  53            push ebx
00403A8B   .  50            push eax
00403A8C   .  FF15 30104000 call dword ptr ds:[<&MSVBVM60.#595>]     ;  MSVBVM60.rtcMsgBox  
00403A92   .  8D4D 90       lea ecx,dword ptr ss:[ebp-0x70]	     ;  停在这里

往上可以看到是错误的信息,往下翻一翻可以看到:

00403A8C   .  FF15 30104000 call dword ptr ds:[<&MSVBVM60.#595>]     ;  MSVBVM60.rtcMsgBox
00403A92   .  8D4D 90       lea ecx,dword ptr ss:[ebp-0x70]	     ; 停在这里
00403A95   .  8D55 A0       lea edx,dword ptr ss:[ebp-0x60]
00403A98   .  51            push ecx
00403A99   .  8D45 B0       lea eax,dword ptr ss:[ebp-0x50]
00403A9C   .  52            push edx
00403A9D   .  8D4D C0       lea ecx,dword ptr ss:[ebp-0x40]
00403AA0   .  50            push eax
00403AA1   .  51            push ecx
00403AA2   .  EB 7E         jmp Xbjanes_1.00403B22
00403AA4   >  8B35 A4104000 mov esi,dword ptr ds:[<&MSVBVM60.__vbaVa>;  MSVBVM60.__vbaVarDup 有东西跳到这里来,往上翻看看是哪里跳转过来这里的
00403AAA   .  B9 04000280   mov ecx,0x80020004
00403AAF   .  894D 98       mov dword ptr ss:[ebp-0x68],ecx
00403AB2   .  B8 0A000000   mov eax,0xA
00403AB7   .  894D A8       mov dword ptr ss:[ebp-0x58],ecx
00403ABA   .  BF 08000000   mov edi,0x8
00403ABF   .  8D95 50FFFFFF lea edx,dword ptr ss:[ebp-0xB0]
00403AC5   .  8D4D B0       lea ecx,dword ptr ss:[ebp-0x50]
00403AC8   .  8945 90       mov dword ptr ss:[ebp-0x70],eax
00403ACB   .  8945 A0       mov dword ptr ss:[ebp-0x60],eax
00403ACE   .  C785 58FFFFFF>mov dword ptr ss:[ebp-0xA8],bjanes_1.004>;  UNICODE "Correct serial!"
00403AD8   .  89BD 50FFFFFF mov dword ptr ss:[ebp-0xB0],edi
00403ADE   .  FFD6          call esi                                 ;  <&MSVBVM60.__vbaVarDup>
00403AE0   .  8D95 60FFFFFF lea edx,dword ptr ss:[ebp-0xA0]
00403AE6   .  8D4D C0       lea ecx,dword ptr ss:[ebp-0x40]
00403AE9   .  C785 68FFFFFF>mov dword ptr ss:[ebp-0x98],bjanes_1.004>;  UNICODE "Good job, tell me how you do that!"
00403AF3   .  89BD 60FFFFFF mov dword ptr ss:[ebp-0xA0],edi
00403AF9   .  FFD6          call esi
00403AFB   .  8D55 90       lea edx,dword ptr ss:[ebp-0x70]
00403AFE   .  8D45 A0       lea eax,dword ptr ss:[ebp-0x60]
00403B01   .  52            push edx
00403B02   .  8D4D B0       lea ecx,dword ptr ss:[ebp-0x50]
00403B05   .  50            push eax
00403B06   .  51            push ecx
00403B07   .  8D55 C0       lea edx,dword ptr ss:[ebp-0x40]
00403B0A   .  53            push ebx
00403B0B   .  52            push edx
00403B0C   .  FF15 30104000 call dword ptr ds:[<&MSVBVM60.#595>]     ;  MSVBVM60.rtcMsgBox
00403B12   .  8D45 90       lea eax,dword ptr ss:[ebp-0x70]


下面就是显示正确的消息框。


0040375A   .  8985 14FFFFFF mov dword ptr ss:[ebp-0xEC],eax
00403760   .  C745 E8 01000>mov dword ptr ss:[ebp-0x18],0x1	     ; serial与这个有关
00403767   .  FF15 C0104000 call dword ptr ds:[<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStr
0040376D   .  8D4D D4       lea ecx,dword ptr ss:[ebp-0x2C]
00403770   .  FF15 C4104000 call dword ptr ds:[<&MSVBVM60.__vbaFreeO>;  MSVBVM60.__vbaFreeObj
00403776   .  8B35 AC104000 mov esi,dword ptr ds:[<&MSVBVM60.__vbaSt>;  MSVBVM60.__vbaStrMove
0040377C   >  66:8B8D 14FFF>mov cx,word ptr ss:[ebp-0xEC]            ;  这里是下面一个JMP回来的地方
00403783   .  66:394D E8    cmp word ptr ss:[ebp-0x18],cx	     ;  这里是比较次数,大于9次了就跳往成功
00403787   .  0F8F 17030000 jg bjanes_1.00403AA4                     ;  这里是跳到正确的消息框的窗口
0040378D   .  8B17          mov edx,dword ptr ds:[edi]
0040378F   .  57            push edi


在00403787 跳转 这个位置下一个断点,再来一次“check it”,发现没有OD停下来。往上找一找看看是什么情况:


004036DC   .  50            push eax                                 ; /String
004036DD   .  FF15 08104000 call dword ptr ds:[<&MSVBVM60.__vbaLenBs>; \__vbaLenBstr
004036E3   .  33C9          xor ecx,ecx
004036E5   .  83F8 09       cmp eax,0x9                              ;  输入的serial长度与0x9比较
004036E8   .  0F95C1        setne cl				     ; 如果eax 不等于 0x9,cl就等于赋值为1
004036EB   .  F7D9          neg ecx                                  ; ecx取反,如果ecx为0则不变,如果为1则变成0xFFFFFFFF
004036ED   .  8BF1          mov esi,ecx				     ; 赋值给esi到下面比较
004036EF   .  8D4D E4       lea ecx,dword ptr ss:[ebp-0x1C]
004036F2   .  FF15 C0104000 call dword ptr ds:[<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStr
004036F8   .  8D4D D4       lea ecx,dword ptr ss:[ebp-0x2C]
004036FB   .  FF15 C4104000 call dword ptr ds:[<&MSVBVM60.__vbaFreeO>;  MSVBVM60.__vbaFreeObj
00403701   .  66:3BF3       cmp si,bx				     ; ebx的值一直为0,所有要si的值也为0
00403704   .  0F85 1A030000 jnz bjanes_1.00403A24	             ; 这里跳到显示错误消息的地方
0040370A   .  8B17          mov edx,dword ptr ds:[edi]

输入的长度要9位

然后将“GNUBD”改为“GNUBD1234”,然后“check it”


这次可以看到断点断下来了。然后单步走,发现有几个比较,但是后面都没有跟跳转。


00403985   .  A8 0D         test al,0xD
00403987   .  0F85 1A020000 jnz bjanes_1.00403BA7
0040398D   .  8B45 D8       mov eax,dword ptr ss:[ebp-0x28]
00403990   .  C745 D8 00000>mov dword ptr ss:[ebp-0x28],0x0
00403997   .  8945 98       mov dword ptr ss:[ebp-0x68],eax
0040399A   .  8D45 80       lea eax,dword ptr ss:[ebp-0x80]
0040399D   .  50            push eax                                 ;  字符串位置
0040399E   .  C745 90 08000>mov dword ptr ss:[ebp-0x70],0x8
004039A5   .  FF15 B0104000 call dword ptr ds:[<&MSVBVM60.#619>]     ;  MSVBVM60.rtcRightCharVar
004039AB   .  8D8D 30FFFFFF lea ecx,dword ptr ss:[ebp-0xD0]          ;  0x8005
004039B1   .  8D55 80       lea edx,dword ptr ss:[ebp-0x80]          ;  0x8
004039B4   .  51            push ecx                                 ; /var18
004039B5   .  52            push edx                                 ; |var28
004039B6   .  FF15 A0104000 call dword ptr ds:[<&MSVBVM60.__vbaVarTs>; \__vbaVarTstNe
004039BC   .  8BF8          mov edi,eax                              ;  这里是上面两个位置比较
004039BE   .  8D45 D8       lea eax,dword ptr ss:[ebp-0x28]	     ; 这里是有点疑问的,两个位置的值是显然不一样的,为什么返回值eax为0xFFFFFFFF
004039C1   .  8D4D DC       lea ecx,dword ptr ss:[ebp-0x24]          ; 下面这些不用看
004039C4   .  50            push eax
004039C5   .  8D55 E0       lea edx,dword ptr ss:[ebp-0x20]
004039C8   .  51            push ecx
004039C9   .  8D45 E4       lea eax,dword ptr ss:[ebp-0x1C]
004039CC   .  52            push edx
004039CD   .  50            push eax
004039CE   .  6A 04         push 0x4
004039D0   .  FF15 90104000 call dword ptr ds:[<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStrList
004039D6   .  83C4 14       add esp,0x14
004039D9   .  8D4D D4       lea ecx,dword ptr ss:[ebp-0x2C]
004039DC   .  FF15 C4104000 call dword ptr ds:[<&MSVBVM60.__vbaFreeO>;  MSVBVM60.__vbaFreeObj
004039E2   .  8D4D 80       lea ecx,dword ptr ss:[ebp-0x80]
004039E5   .  8D55 90       lea edx,dword ptr ss:[ebp-0x70]
004039E8   .  51            push ecx
004039E9   .  8D45 A0       lea eax,dword ptr ss:[ebp-0x60]
004039EC   .  52            push edx
004039ED   .  8D4D B0       lea ecx,dword ptr ss:[ebp-0x50]
004039F0   .  50            push eax
004039F1   .  8D55 C0       lea edx,dword ptr ss:[ebp-0x40]
004039F4   .  51            push ecx
004039F5   .  52            push edx
004039F6   .  6A 05         push 0x5
004039F8   .  FF15 0C104000 call dword ptr ds:[<&MSVBVM60.__vbaFreeV>;  MSVBVM60.__vbaFreeVarList
004039FE   .  83C4 18       add esp,0x18			     ; 
00403A01   .  66:85FF       test di,di                               ;来到这里,测试di是否为0,不为0则跳
00403A04   .  75 1C         jnz Xbjanes_1.00403A22                   ;  这跳了就wrong serial
00403A06   .  8B7D 08       mov edi,dword ptr ss:[ebp+0x8]
00403A09   .  B8 01000000   mov eax,0x1                              ; eax赋值为1
00403A0E   .  66:0345 E8    add ax,word ptr ss:[ebp-0x18]            ;  将[ebp-0x18]的值加上去
00403A12   .  0F80 94010000 jo bjanes_1.00403BAC                     ;  
00403A18   .  8945 E8       mov dword ptr ss:[ebp-0x18],eax
00403A1B   .  33DB          xor ebx,ebx
00403A1D   .^ E9 5AFDFFFF   jmp bjanes_1.0040377C                    ; 这里是跳回去的,回到0040377C

于是就有个猜想,每次比较一个字符,比较9次,那么与serial比较的字符在哪里呢?

004038F1   > \66:8B45 E8    mov ax,word ptr ss:[ebp-0x18]	     ; 这里就是刚刚在403760位置赋值的地方,也可以在434A0E找到它
004038F5   .  8B1D 74104000 mov ebx,dword ptr ds:[<&MSVBVM60.#536>]  ;  MSVBVM60.rtcStrFromVar
004038FB   .  66:35 0200    xor ax,0x2				     ; 将取出来的值异或0x2,异或后的值就是serial
004038FF   .  8D4D A0       lea ecx,dword ptr ss:[ebp-0x60]
00403902   .  0F80 A4020000 jo bjanes_1.00403BAC
00403908   .  51            push ecx
00403909   .  66:8945 A8    mov word ptr ss:[ebp-0x58],ax
0040390D   .  C745 A0 02000>mov dword ptr ss:[ebp-0x60],0x2
00403914   .  FFD3          call ebx                                 ;  <&MSVBVM60.#536>
00403916   .  8BD0          mov edx,eax                              ;  值转为字符
00403918   .  8D4D D8       lea ecx,dword ptr ss:[ebp-0x28]
0040391B   .  FFD6          call esi                                 ;  将字符串移动到ecx的地址中
0040391D   .  8B45 E4       mov eax,dword ptr ss:[ebp-0x1C]
00403920   .  8D55 C0       lea edx,dword ptr ss:[ebp-0x40]
00403923   .  52            push edx
00403924   .  57            push edi
00403925   .  50            push eax
00403926   .  C745 C8 01000>mov dword ptr ss:[ebp-0x38],0x1
0040392D   .  C745 C0 02000>mov dword ptr ss:[ebp-0x40],0x2
00403934   .  FF15 44104000 call dword ptr ds:[<&MSVBVM60.#631>]     ;  MSVBVM60.rtcMidCharBstr
0040393A   .  8BD0          mov edx,eax                              ;  读取字符串eax第edi位的值
0040393C   .  8D4D E0       lea ecx,dword ptr ss:[ebp-0x20]
0040393F   .  FFD6          call esi
00403941   .  50            push eax                                 ; /String
00403942   .  FF15 1C104000 call dword ptr ds:[<&MSVBVM60.#516>]     ; \rtcAnsiValueBstr
00403948   .  8D4D B0       lea ecx,dword ptr ss:[ebp-0x50]
0040394B   .  66:8945 B8    mov word ptr ss:[ebp-0x48],ax
0040394F   .  51            push ecx
00403950   .  C745 B0 02000>mov dword ptr ss:[ebp-0x50],0x2          ;  这里将字符转为了数值,但是仍然用字符格式保存
00403957   .  FFD3          call ebx
00403959   .  8BD0          mov edx,eax                              ;  转成了十进制的数
0040395B   .  8D4D DC       lea ecx,dword ptr ss:[ebp-0x24]
0040395E   .  FFD6          call esi
00403960   .  50            push eax
00403961   .  FF15 84104000 call dword ptr ds:[<&MSVBVM60.__vbaR8Str>;  MSVBVM60.__vbaR8Str
00403967   .  DC25 D8104000 fsub qword ptr ds:[0x4010D8]             ;  转成double再减去48,'0'的字符编码为48
0040396D   .  8D55 90       lea edx,dword ptr ss:[ebp-0x70]          ;  
00403970   .  6A 01         push 0x1
00403972   .  52            push edx                                 ;  


显然可以看出[ebp-0x18]的值取出来eax,然后将异或0x2后的结果与输入的serial比较,相同就继续往下,又因为每次jmp之前[ebp-0x18]的值都会加1且[ebp-0x18]一开始就是1,所以结果就是:


for(int i = 1;i<=9;i++){printf("%d ",i^2);
}



会发现最后面的结果是10和11,又因为serial的长度为9位,所以不可能将10和11输入进去,再次载入的时候把前面7位输入正确“3016745”,后面两位随便来。在跟随一次。
还是没找到程序在哪里将输入的serial后面两位与10和11进行了比较,但是仍然可以从10和11的结果中猜出搭配来的。


最后的正确的serial是“301674501”


总结:
1.多留意一下那些运算的指令,可能运算结果就是serial 
2.对应对在对serial进行判断前有一个跳转回来的,可以猜测是对serial的循环判断。在跳回来之前会改变比较的对象,可以从中看出每一次是用谁来进行比较、


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小结C++中一些自带的好用东西

STL部分 <set>/<multiset> 支持插入一个元素&#xff0c;删除指定key值的元素&#xff0c;查找指定key值的元素&#xff0c;返回最大/小值&#xff0c;找前驱&#xff0c;找后继&#xff0c;返回指定key值的相同元素个数。 部分代替平衡树中一些操作。不能updata或…

160 - 15 blaster99.exe

环境&#xff1a; windows xp sp 3 工具&#xff1a; Ollydbg 和 exeinfo pe 查壳&#xff0c;还是无壳的vb程序。 打开&#xff0c;有一个nag窗口&#xff0c;点击”确认”的话才会弹出输入serial的窗口&#xff0c;点“取消”的话会关闭程序 OD载入&#xff0c;运行到弹出n…

Freemarker宏和函数的用法和区别

1.宏&#xff08;macro&#xff09;写法&#xff1a;<#macro page url page maskSize5> <#if (number pages)><li><a href"javascript:void(0);">下一页</a></li><li><a href"javascript:void(0);">尾…

聚类算法初探(八)数据尺度化问题

文中尺度化的一些具体公式可参见 http://blog.csdn.net/itplus/article/details/10088101 其他相关链接 引言 预备知识 直接聚类法 K-means DBSCAN OPTICS 聚类分析的效果评测 作者: peghoty 出处: http://blog.csdn.net/itplus/article/details/10484553 欢迎转载/分享, 但请…

160 - 16 bjanes.2

环境&#xff1a; windows xp sp3 工具&#xff1a; bjanes.2&#xff0c;HashCalc 这个和14题是一样的&#xff0c;看名字就发现都是2.0A&#xff0c;然后用HashCalc来计算一下MD5&#xff0c;发现它们的值是相同的。 如果没猜错&#xff0c;应该就是在14题是被放错题了。

HDU 1269

很水的TARJAN求强联通图的问题。 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm>using namespace std; const int N10010; const int M100010; int head[N],dfn[N],low[N],stack[N],st; struct Edge{int u,v;int nxt…

maven库文件所在目录

C:\Documents and Settings\jgzhang2\.m2\repository转载于:https://www.cnblogs.com/yipihema/p/3289140.html

imul和mul的计算

imul是把操作数符号也算上的&#xff1a; 设 AL 0B4H BL 11H 执行 imul BL 后&#xff1a;AL 0FAF4 原因&#xff1a; imul是把符号也算上的&#xff0c;所以AL是某个数的补码&#xff0c;故得AL -4C -76D&#xff0c;而BL 17D 是正数&#xff0c;相乘得-1292&#x…

【待完善】make: command not found,以及libtool.m4 and ltmain.sh have a version mismatch问题的解决方案...

之前为了使用一个库&#xff0c;都是去下载源码&#xff0c;然后根据开发者提供的README手动用GCC编译&#xff0c;一直不能使用Makefile感觉很蛋痛&#xff0c;比如最近使用的ZThread 还是怪自己以前过于依赖IDE 最近发现用Cygwin就可以使用诸如./configure, make这样的命令&a…

ubuntu 12.04 下安装 MySQL 5.5

参考&#xff1a;http://www.linuxidc.com/Linux/2011-12/48920.htm《Ubuntu 11.04 通过 apt 安装 MySQL 5.1 的全过程记录》 说明&#xff1a;在mysql官网下载ubuntu下的安装包进行安装&#xff0c;不是一件容易的事。这里不是指下载&#xff0c;而是指安装配置过程。 所以可以…

160 - 17 bjanes.3

环境&#xff1a; Wiondws XP sp3 工具&#xff1a; ollydbg&#xff0c;ExeInfo PE 查壳&#xff1a; 用Exeinfo PE 查壳&#xff0c;没有壳&#xff0c;是VB写的 过程&#xff1a; 一&#xff1a;随便输入一个serial&#xff0c;得到一个错误信息消息框&#xff0c;OD载入…

菜鸟nginx源码剖析

菜鸟nginx源码剖析 配置与部署篇&#xff08;一&#xff09; 手把手配置nginx “I love you” TCMalloc 对MYSQL 性能 优化的分析 菜鸟nginx源码剖析系列文章解读 Author&#xff1a;Echo Chen&#xff08;陈斌&#xff09; Email&#xff1a;chenb19870707gmail.com Blog&…

很有挫败感

总会时不时的怀疑自己是不是学编程的料&#xff0c;还是自己太笨&#xff1f; 自己读研前对编程可以说是一窍不通&#xff0c;虽然本科时学过C&#xff0c;但那时也只是应付考试&#xff0c;没学到什么真才实学。 幸好读研后&#xff0c;自己开始猛的补各种知识&#xff0c;开始…

160 - 18 Brad Soblesky.1

环境&#xff1a; windows xp sp3 工具&#xff1a; Ollydbg&#xff0c;exeinfope 用exeinfope查壳&#xff1a; 没有壳&#xff0c;vc编译的 运行后第一步&#xff0c;随便输入个”12345“&#xff0c;弹出一个错误消息框。 OD载入后直接搜索错误消息框的字符串&#xff0c…

汉字转拼音缩写

汉字转拼音缩写 /// 〈summary〉 /// 汉字转拼音缩写 /// Code By MuseStudiohotmail.com /// 2014-12-02 /// 〈/summary〉 /// 〈param name"str"〉要转换的汉字字符串〈/param〉 /// 〈returns〉拼音缩写〈/returns〉 public string GetPYString(string str) { s…

160 - 19 Brad Soblesky.2

环境&#xff1a; windows xp sp3 工具&#xff1a; OD&#xff0c;exeinfope 查壳&#xff1a; 用exeinfope查壳&#xff0c;发现没有壳而且是vc编译的 随便输入一个name和serial&#xff0c;name "12345" serial "678910" 弹出错误窗口&#xff0c…

微信公众平台开发(59)相册

微信公众平台开发 微信公众平台开发模式 企业微信公众平台 万能相册 3G相册作者&#xff1a;方倍工作室 地址&#xff1a;http://www.cnblogs.com/txw1958/p/weixin-59-albums.html 相册(Photo album)又称影集或照片集&#xff0c;是用来装放相片的物品。相册主要用来收藏和保…

BugFix系列---开篇介绍

这个系列的文章&#xff0c;主要目的在于积累总结实际开发中遇到的错误&#xff0c;记录下来自己的解决思路&#xff0c;用来提升自己。 不出意外&#xff0c;应该会持续不断的记录更新&#xff0c;在整个开发openstack的过程中&#xff0c;抓住机会吸取开源界大牛的有点经验&a…

160 - 20 BuLLeT.8

环境&#xff1a; Windows xp sp3 工具&#xff1a; exeinfope, ollydbg 查壳&#xff1a; 用exeinfope查壳&#xff0c;发现加了壳 -- WWPack32 ver 1.xx &#xff0c;用f8单步调试法&#xff0c;脱壳。 脱掉之后发现是delphi写的 运行之后发现界面整洁&#xff0c;目标明…

hadoop学习笔记:zookeeper学习(上)

在前面的文章里我多次提到zookeeper对于分布式系统开发的重要性&#xff0c;因此对zookeeper的学习是非常必要的。本篇博文主要是讲解zookeeper的安装和zookeeper的一些基本的应用&#xff0c;同时我还会教大家如何安装伪分布式&#xff0c;伪分布式不能在windows下实现&#x…