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.pswp.cn/news/376456.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376456.shtml
英文地址,請注明出處:http://en.pswp.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…