前言:
在平安夜的夜晚,我在網上閑逛,偶爾看到壹個叫“電腦消磁大師”的軟件,是壹家公司開發的(公司是什麽我就不說了,免得打擾)。根據軟件中的描述,“這個系統已經在國外市場銷售,效果很好。最近該系統被翻譯成中文,免費提供給國內朋友。”至於軟件的功能,有如下解釋:“本系統非常適合長時間在電腦前工作的人,能有效去除電腦產生的電磁波,對工作人員起到保健作用。這個系統根據電腦產生的電磁波,自動產生磁熔波,中和電腦產生的電磁波。因為電腦在不斷釋放電磁波,建議妳每小時消磁壹次。”聽起來很吸引人,我就下去找點樂子。最新版本好像是6。版本3(已升級多次)。
試用:
我下載的是壓縮包,解包後只有壹個可執行文件。運行它,先彈出壹個瀏覽器窗口,連接壹個網站(可能是軟件公司的網站),隨意關閉。軟件的主界面非常簡單,最重要的是“開始消磁”按鈕。點擊它,會出現壹個進度條,同時會出現提示文字,即“系統正在準備消磁……”,“系統正在從電腦中收集電磁波……”,“系統正在釋放電磁波……”以及“系統正在做最後的消磁工作……”。如此神秘的儀式後,彈出壹個對話框,提示“磁融成功,電腦周圍的磁場已經被成功中和?”壹瞬間,我對作者的敬佩之情如滔滔江水。這是巨牛X技術,只靠軟件就能消磁,而且還是電腦周圍的電磁波。我想知道作者是否申請了專利。懷著對作者極大的崇敬和神秘感,我迅速將軟件肢解:)
分析:
妳看看,是用Delphi寫的,沒有外殼。用DeDe加載後,反編譯“開始消磁”按鈕點擊事件對應的代碼,復制如下:
0047FF28 53推動ebx
0047FF29 8BD8 mov ebx,eax
0047FF2B 33D2 xor edx,edx
*對控件TFrmRamMain的引用。面板2:t面板
|
0047FF2D 8B83FC020000 mov eax,[ebx+$02FC]
*參考:控制。t control . set visible(t control;布爾);
|
0047FF33 E80CA6FAFF電話0042A544
0047FF38 B201 mov dl,$01
*對控件TFrmRamMain的引用。Panel1 : TPanel
|
0047FF3A 8B83F0020000 mov eax,[ebx+$02F0]
*參考:控制。t control . set visible(t control;布爾);
|
0047FF40 E8FFA5FAFF電話0042A544
*可能的字符串引用:“系統正在準備消磁...”;提示文本,就緒
|
0047FF45 BA7C014800 mov edx,$0048017C
*對控件TFrmRamMain的引用。標簽3:標簽
|
0047FF4A 8B83F4020000 mov eax,[ebx+$02F4]
*參考:控制。t control . SetText(t control;t caption);
|
0047FF50 E807A7FAFF電話0042A65C
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar;進度條開始移動。
|
0047FF55 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
0047FF5B E80489FDFF電話00458864
0047FF60 8BC3 mov eax,ebx
*參考:TFrmRamMain。delay();核心代碼?~~~~~!!!!!!牛X,原來妳能“中和電腦周圍的磁場”,佩服佩服~ ~ ~ ~ ~
|
0047FF62 E8D1020000致電00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar;進度條繼續移動
|
0047FF67 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
0047FF6D E8F288FDFF電話00458864
0047FF72 8BC3 mov eax,ebx
*參考:TFrmRamMain。delay();休息壹下,不知道神聖在哪裏給我們消磁:)
|
0047FF74 E8BF020000電話00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar;保持前進
|
0047FF79 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
0047FF7F E8E088FDFF電話00458864
0047FF84 8BC3 mov eax,ebx
*參考:TFrmRamMain。延遲()
|
0047FF86 E8AD020000電話00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
0047FF8B 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
0047FF91 E8CE88FDFF電話00458864
0047FF96 8BC3 mov eax,ebx
*參考:TFrmRamMain。延遲()
|
0047FF98 E89B020000電話00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
0047FF9D 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
0047FFA3 E8BC88FDFF電話00458864
*可能的字符串引用:“系統正在從計算機收集電磁波...”
|
0047 fffa 8 baa 0014800 mov EDX,$004801A0
*對控件TFrmRamMain的引用。標簽3:標簽
|
0047FFAD 8B83F4020000 mov eax,[ebx+$02F4]
*參考:控制。t control . SetText(t control;t caption);
|
0047FFB3 E8A4A6FAFF電話0042A65C
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
0047FFB8 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
0047FFBE E8A188FDFF電話00458864
0047FFC3 8BC3 mov eax,ebx
*參考:TFrmRamMain。delay();根據提示,這句話應該是采集電磁波的代碼。
|
0047FFC5 E86E020000電話00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
0047FFCA 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
0047FFD0 E88F88FDFF電話00458864
0047FFD5 8BC3 mov eax,ebx
*參考:TFrmRamMain。延遲()
|
0047FFD7 E85C020000電話00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
0047FFDC 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
0047FFE2 E87D88FDFF電話00458864
0047FFE7 8BC3 mov eax,ebx
*參考:TFrmRamMain。延遲()
|
0047FFE9 E84A020000電話00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
0047FFEE 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
0047FFF4 E86B88FDFF電話00458864
0047FFF9 8BC3 mov eax,ebx
*參考:TFrmRamMain。延遲()
|
0047FFFB E838020000致電00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
00480000 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
00480006 E85988FDFF電話00458864
*可能的字符串引用:“系統正在釋放磁波...”
|
0048000B BAC4014800 mov edx,$004801C4
*對控件TFrmRamMain的引用。標簽3:標簽
|
00480010 8 b83f 4020000 mov eax,[ebx+$02F4]
*參考:控制。t control . SetText(t control;t caption);
|
00480016 E841A6FAFF電話0042A65C
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
0048001B 8b83f 8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
00480021 E83E88FDFF電話00458864
00480026 8BC3 mov eax,ebx
*參考:TFrmRamMain。delay();消磁的核心代碼,這個技術大家要記住,不能亂用。可能作者已經申請專利了:)
|
00480028 E80B020000電話00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
0048002D 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
00480033 E82C88FDFF電話00458864
00480038 8BC3 mov eax,ebx
*參考:TFrmRamMain。延遲()
|
0048003A E8F9010000電話00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
0048003F 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
00480045 E81A88FDFF電話00458864
0048004A 8BC3 mov eax,ebx
*參考:TFrmRamMain。延遲()
|
0048004C E8E7010000致電00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
00480051 8b 83 f 8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
00480057 E80888FDFF電話00458864
0048005C 8BC3 mov eax,ebx
*參考:TFrmRamMain。延遲()
|
0048005E E8D5010000電話00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
00480063 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
00480069 E8F687FDFF電話00458864
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
0048006E 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
00480074 E8EB87FDFF電話00458864
00480079 8BC3 mov eax,ebx
*參考:TFrmRamMain。延遲()
|
0048007B E8B8010000電話00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
00480080 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
00480086 E8D987FDFF電話00458864
0048008B 8BC3 mov eax,ebx
*參考:TFrmRamMain。延遲()
|
0048008D E8A6010000電話00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
00480092 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
00480098 E8C787FDFF電話00458864
0048009D 8BC3 mov eax,ebx
*參考:TFrmRamMain。延遲()
|
0048009F E894010000致電00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
004800A4 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
004800AA E8B587FDFF電話00458864
004800AF 8BC3 mov eax,ebx
*參考:TFrmRamMain。延遲()
|
004800B1 E882010000電話00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
004800B6 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
004800BC E8A387FDFF電話00458864
*可能的字符串引用:“系統正在進行最後的消磁工作...”
|
004800 c 1 BAE 4014800 mov EDX,$004801E4
*對控件TFrmRamMain的引用。標簽3:標簽
|
004800C6 8B83F4020000 mov eax,[ebx+$02F4]
*參考:控制。t control . SetText(t control;t caption);
|
004800CC E88BA5FAFF電話0042A65C
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
004800d 1 8b 83 f 8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
004800D7 E88887FDFF電話00458864
004800DC 8BC3 mov eax,ebx
*參考:TFrmRamMain。delay();我什麽都不說了:)
|
004800DE E855010000致電00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
004800E3 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
004800E9 E87687FDFF電話00458864
004800EE 8BC3 mov eax,ebx
*參考:TFrmRamMain。延遲()
|
004800F0 E843010000致電00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
004800F5 8B83F8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
004800FB E86487FDFF電話00458864
00480100 8BC3 mov eax,ebx
*參考:TFrmRamMain。延遲()
|
00480102 e 831010000致電00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
00480107 8 b83f 8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
0048010D E85287FDFF電話00458864
00480112 8BC3 mov eax,ebx
*參考:TFrmRamMain。延遲()
|
00480114e 81f 010000電話00480238
*對控件TFrmRamMain的引用。progress bar 1:tprogress bar
|
00480119 8b 83 f 8020000 mov eax,[ebx+$02F8]
*參考:comctrls。TProgressBar . StepIt(TProgressBar);
|
0048011F E84087FDFF電話00458864
00480124 B8E8030000 mov eax,$000003E8
*參考:系統。@ RandInt
|
00480129 E86629F8FF電話00402A94
0048012E 85C0測試eax,eax
00480130 6A40推送40美元
*可能的字符串引用:“計算機消磁主機”
|
00480132 B900024800 mov ecx,00480200美元
*可能的字符串引用為:‘磁融成功,計算機周圍的磁場已經被成功中和?
| ?
|
00480137 ba 10024800 mov EDX,$00480210
*對TApplication實例的引用
|
0048013C a 148284800 mov eax,dword ptr [$00482848]
00480141 8B00 mov eax,[eax]
*參考:表格。t application . MessageBox(t application;PCharPCharLongint):整數;
|
00480143 E89895FCFF電話004496E0妳完了!消磁成功!!!
00480148 33D2 xor edx,edx
*對控件TFrmRamMain的引用。Panel1 : TPanel
|
0048014A 8b83f 0020000 mov eax,[ebx+$02F0]
*參考:控制。t control . set visible(t control;布爾);
|
00480150 E8EFA3FAFF電話0042A544
00480155 B201 mov dl,$01
*對控件TFrmRamMain的引用。面板2:t面板
|
00480157 8b 83 fc 020000 mov eax,[ebx+$02FC]
*參考:控制。t control . set visible(t control;布爾);
|
0048015D E8E2A3FAFF電話0042A544
*對TFrmAbout實例的引用
|
00480162 a 148264800 mov eax,dword ptr [$00482648]
00480167 8B00 mov eax,[eax]
00480169 8B10 mov edx,[eax]
*對TFrmAbout方法的引用。ShowModal()
|
0048016B FF92D8000000調用dword ptr[EDX+$ 00d 8];大約窗口露出壹張小臉,是介紹公司的。沒看到這麽高深技術下蛋的雞就可惜了:)
00480171 5B pop ebx
00480172 C3 ret
以上是消磁大師的核心代碼。我對逆轉如此重要的代碼感到非常不安。軟件開發公司壹定不能起訴我!但是我已經看過了。多看看也無妨。誰知不要緊,還找到了軟件作者的體貼。請看下面的代碼,它是與表單創建事件相對應的代碼:
004802F8 55推送ebp
004802F9 8BEC mov ebp,esp
004802FB 33C9 xor ecx,ecx
004802FD 51推送ecx
004802FE 51推送ecx
004802FF 51推送ecx
00480300 51推送ecx
00480301 51推送ecx
00480302 51推送ecx
00480303 51推送ecx
00480304 33C0 xor eax,eax
00480306 55推送ebp
*可能的字符串引用:“0?]?
|
00480307 6808044800推送$00480408
*****試試
|
0048030 c 64ff 30 push dword ptr fs:[eax]
0048030F 648920 mov fs:[eax],esp
00480312 8D55F0 lea edx,[ebp-$10]
*對TApplication實例的引用
|
00480315 a 148284800 mov eax,dword ptr [$00482848]
0048031A 8B00 mov eax,[eax]
*參考:表格。t application . get exename(t application):an istring;
|
0048031C E82F97FCFF電話00449A50我是誰?
00480321 8B45F0 mov eax,[ebp-$10]
00480324 8D55F4 lea edx,[ebp-$0C]
*參考:Unit_00406FD0。Proc_00408110
|
00480327 E8E47DF8FF電話00408110
0048032C 8B45F4 mov eax,[ebp-$0C]
0048032F 50推eax
00480330 8D55E8 lea edx,[ebp-$18]
*對TApplication實例的引用
|
00480333 A148284800 mov eax,dword ptr [$00482848]
00480338 8B00 mov eax,[eax]
*參考:表格。t application . get exename(t application):an istring;
|
0048033A E81197FCFF電話00449A50
0048033F 8B45E8 mov eax,[ebp-$18]
00480342 8D55EC lea edx,[ebp-$14]
*參考:Unit_00406FD0。Proc_004080DC
|
00480345 E8927DF8FF電話004080DC
0048034A 8B55EC mov edx,[ebp-$14]
0048034D 8D45FC lea eax,[ebp-$04]
00480350 59 pop ecx
*參考:系統。@ LStrCat3
|
00480351 E8CA39F8FF電話00403D20
00480356 B201 mov dl,$01
*引用類註冊表
|
00480358 a 174 f 14700 mov eax,dword ptr [$0047F174]
*參考:Unit_0047F114。Proc_0047F274
|
0048035D E812EFFFFF電話0047F274
00480362 8945F8 mov [ebp-$08],eax
00480365 33C0 xor eax,eax
00480367 55推送ebp
00480368 68DE034800推送$004803DE
*****試試
|
0048036d 64ff 30 push dword ptr fs:[eax]
00480370 648920 mov fs:[eax],esp
00480373 BA02000080 mov edx,80000002美元
00480378 8B45F8 mov eax,[ebp-$08]
*參考:Unit_0047F114。Proc_0047F314
|
0048037B E894EFFFFF電話0047F314
00480380 B101 mov cl,$01
*可能的字符串引用:“\ SOFTWARE \ Microsoft \ Windows \ Current;這個地方太熟悉了。為什麽我的毒霸不報警?)
|版本\運行\ '
|
00480382 BA1C044800 mov edx,$0048041C
00480387 8B45F8 mov eax,[ebp-$08]
*參考:Unit_0047F114。Proc_0047F378
|
0048038A E8E9EFFFFF電話0047F378
0048038F 84C0測試鋁鋁
00480391 7435 jz 004803C8
00480393 8D4DE4 lea ecx,[ebp-$1C]
*可能的字符串引用:“JrRClean”
|
00480396 BA54044800 mov edx,00480454美元
0048039B 8B45F8 mov eax,[ebp-$08]
*參考:Unit_0047F114。Proc_0047F540
|
0048039E E89DF1FFFF電話0047F540
004803A3 8B45E4 mov eax,[ebp-$1C]
004803A6 8B55FC mov edx,[ebp-$04]
*參考:系統。@ LStrCmp
|
004803A9 E8363AF8FF電話00403DE4
004803AE 7410 jz 004803C0
004803B0 8B4DFC mov ecx,[ebp-$04]
*可能的字符串引用:“JrRClean”
|
004803B3 BA54044800 mov edx,00480454美元
004803B8 8B45F8 mov eax,[ebp-$08]
*參考:Unit_0047F114。Proc_0047F514
|
004803BB E854F1FFFF電話0047F514
004803C0 8B45F8 mov eax,[ebp-$08]
*參考:Unit_0047F114。Proc_0047F2E4
|
004803 C3 e 81 ceffffff電話0047F2E4
004803C8 33C0 xor eax,eax
004803CA 5A pop edx
004803CB 59 pop ecx
004803CC 59 pop ecx
004803 CD 648910 mov fs:[eax],edx
******終於
|
004803D0 68E5034800推送$004803E5
004803D5 8B45F8 mov eax,[ebp-$08]
*參考:系統。to bject . Free(to bject);
|
004803D8 E8EF29F8FF電話00402DCC
C3 ret
*參考:系統。@ HandleFinally
|
004803 de e 90931F8FF jmp 004034 EC
004803E3 EBF0 jmp 004803D5
******結束
|
004803E5 33C0 xor eax,eax
004803E7 5A pop edx
004803E8 59 pop ecx
004803E9 59 pop ecx
004803 ea 648910 mov fs:[eax],edx
******終於
|
*可能的字符串引用:“否”?
|
004803 ed 680 f 044800 push $ 0048040 f
004803F2 8D45E4 lea eax,[ebp-$1C]
004803F5 BA05000000 mov edx,0000005美元
*參考:系統。@ LStrArrayClr
|
004803FA E87936F8FF電話00403A78
004803FF 8D45FC lea eax,[ebp-$04]
*參考:系統。@ lstr clr(String;字符串);
|
00480402 E84D36F8FF電話00403A54
00480407 C3
*參考:系統。@ HandleFinally
|
00480408 E9DF30F8FF jmp 004034EC
0048040D EBE3 jmp 004803F2
******結束
|
0048040F 8BE5 mov esp,ebp
00480411 5D流行樂ebp
C3 ret
上面的代碼不用我解釋吧?要知道電腦開機時電磁輻射是最強的,所以體貼的作者在啟動項中加入了“消磁大師”,讓它每次開機都能自動消磁,真是“人性化”了~ ~ ~ ~ ~當然除了“消磁大師”,還有宣傳網站:)
就是苦。我又要清理啟動項了。為什麽98註冊表編輯器不能保存上次打開的位置?
結論:
以上大部分都是廢話。看到這個地方為大家辛苦了,真的很抱歉。
也許這只是壹個開玩笑的程序,或者有壹些深刻的東西我沒有理解。沒別的意思,就是無聊。也希望作者沒有別的意思,也希望作者在下壹個版本升級的時候增加“取消開機”的選項。
就笑笑,呵呵~ ~ ~ ~ ~ ~ ~ ~ ~