[原创]“不死鸟”号历险记(无厘头版),该如何解决

[原创]“不死鸟”号历险记(无厘头版)
“不死鸟”号历险记---和扫雷过不去篇(无厘头版)

  程序逆向初步之二:测试环境Windows XP SP3

(警告:本文情节纯属虚构搞笑,没有讽刺任何现实国家机构的意思哦)

(建议:在看以下文字时,最好头脑浮现鸟山明阿拉蕾中漫画人物的形象
以达到较好的YY效果。)

(还是那句老话,老鸟自行飘过。)

正义的hopy – 加菲

邪恶的hopy – 阿宝

xx年xx月xx日xx国的“不死鸟”号载人火箭直穿入云霄,使得正在云层中YY的鸟A与
鸟B受惊了…

鸟A:What东东…

鸟B:好大一根…

与此同时,在xx国 航天中心的指挥室中…

记者A与记者B(以下简称JA与JB)正准备采访指挥人员。

一位长相疑似章鱼的指挥人员报告,收到‘不死鸟’号宇航员发出的信号:“我们一切OK,
感觉很Hi!”

JA(一滴汗从后脑勺滴下):“连章鱼也…”。

JB开始采访:“请问章鱼大叔…哦,不是…请问‘章’工,现在飞船运行情况如何?”。

‘章鱼’(眼睛做闪亮状):“废话,当然一切正常,飞船性能没得说,更何况还有我国

最强的双胞胎宇航员牛爱加与牛思减同志…”

这时监控镜头切换到正在航天中心食堂拱猪的牛爱加与牛思减…

牛A+:“你倒是快拱啊!!!”。

牛C-:“急你个姥姥…我就不拱,你咬我”。

JA把采访话筒指向‘章鱼’大叔:“您说的是他们两位吗?”。

‘章鱼’:“好小子…太不像话了…拱猪也不叫上你老哥我…”。

JB(出汗状):“嗯?他们在地上…那在飞船上的是…”。

‘章鱼’:“这个…”。

此时在“不死鸟”飞船的船舱中,加菲与阿宝正经八百的坐在驾驶室座位上…

阿宝:“终于混上来了…上天的美梦成真喽!”。

加菲:“呵呵,到火星还有911天,好无聊哦,干嘛呢?”。

阿宝:“傻了吧!幸好偶事先下载了最新的微软超大作游戏---扫雷!”。

加菲(倒!)。

阿宝:“谁扫雷时间用的少,谁就赢吧”。

在加菲连输65536盘之后…

阿宝:“没意思,你太挫了!我去WC,你好好再练练吧…嘿嘿”。

阿宝哼着小调扭着大屁股闪进后舱WC中…

加菲:“我不信!我不信!凭偶的IQ搞不定扫雷!我要方展博,我要方展博,

我不要丁蟹,我不要丁蟹…”。

加菲悲愤地用IDA载入winmine.exe,熟练的下载符号文件,展开函数
表,他发现其中一个函数很有意思:



进入StartGame(),随即的代码让加菲眼前一亮:

Assembly code

.text:0100367A __stdcall StartGame() proc near         ; CODE XREF: FLocalButton(x)+CAp
.text:0100367A                                         ; DoPref()+33j
.text:0100367A                                         ; MainWndProc(x,x,x,x)+2CAp
.text:0100367A                                         ; MainWndProc(x,x,x,x):loc_1001EC8p
.text:0100367A                                         ; WinMain(x,x,x,x)+15Dp
.text:0100367A                 mov     eax, dword_10056AC
.text:0100367F                 mov     ecx, uValue
.text:01003685                 push    ebx
.text:01003686                 push    esi
.text:01003687                 push    edi
.text:01003688                 xor     edi, edi
.text:0100368A                 cmp     eax, _xBoxMac
.text:01003690                 mov     _fTimer, edi
.text:01003696                 jnz     short loc_10036A4
.text:01003696
.text:01003698                 cmp     ecx, _yBoxMac
.text:0100369E                 jnz     short loc_10036A4
.text:0100369E
.text:010036A0                 push    4
.text:010036A2                 jmp     short loc_10036A6
.text:010036A2
.text:010036A4 ; ---------------------------------------
.text:010036A4
.text:010036A4 loc_10036A4:                            ; CODE XREF: StartGame()+1Cj
.text:010036A4                                         ; StartGame()+24j
.text:010036A4                 push    6
.text:010036A4
.text:010036A6
.text:010036A6 loc_10036A6:                            ; CODE XREF: StartGame()+28j
.text:010036A6                 pop     ebx
.text:010036A7                 mov     _xBoxMac, eax
.text:010036AC                 mov     _yBoxMac, ecx
.text:010036B2                 call    ClearField()
.text:010036B2
.text:010036B7                 mov     eax, dword_10056A4
.text:010036BC                 mov     _iButtonCur, edi
.text:010036C2                 mov     _cBombStart, eax
.text:010036C2
.text:010036C7
.text:010036C7 loc_10036C7:                            ; CODE XREF: StartGame()+74j
.text:010036C7                                         ; StartGame()+89j
.text:010036C7                 push    _xBoxMac
.text:010036CD                 call    Rnd(x)
.text:010036CD
.text:010036D2                 push    _yBoxMac
.text:010036D8                 mov     esi, eax
.text:010036DA                 inc     esi
.text:010036DB                 call    Rnd(x)
.text:010036DB
.text:010036E0                 inc     eax
.text:010036E1                 mov     ecx, eax
.text:010036E3                 shl     ecx, 5
.text:010036E6                 test    byte ptr _rgBlk[ecx+esi], 80h
.text:010036EE                 jnz     short loc_10036C7
.text:010036EE
.text:010036F0                 shl     eax, 5
.text:010036F3                 lea     eax, _rgBlk[eax+esi]
.text:010036FA                 or      byte ptr [eax], 80h
.text:010036FD                 dec     _cBombStart
.text:01003703                 jnz     short loc_10036C7
.text:01003703
.text:01003705                 mov     ecx, _yBoxMac
.text:0100370B                 imul    ecx, _xBoxMac
.text:01003712                 mov     eax, dword_10056A4
.text:01003717                 sub     ecx, eax        ; int
.text:01003719                 push    edi
.text:0100371A                 mov     _cSec, edi
.text:01003720                 mov     _cBombStart, eax
.text:01003725                 mov     _cBombLeft, eax
.text:0100372A                 mov     _cBoxVisit, edi
.text:01003730                 mov     _cBoxVisitMac, ecx
.text:01003736                 mov     _fStatus, 1
.text:01003740                 call    UpdateBombCount(x)
.text:01003740
.text:01003745                 push    ebx             ; int
.text:01003746                 call    AdjustWindow(x)
.text:01003746
.text:0100374B                 pop     edi
.text:0100374C                 pop     esi
.text:0100374D                 pop     ebx
.text:0100374E                 retn
.text:0100374E
.text:0100374E __stdcall StartGame() endp