[原创]“不死鸟”号历险记(无厘头版)

大熊猫侯佩
iOS开发领域优质创作者
博客专家认证
2009-09-03 03:16:48
加精
“不死鸟”号历险记---和扫雷过不去篇(无厘头版)

程序逆向初步之二:测试环境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(),随即的代码让加菲眼前一亮:


.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


通过简单的大脑分析,加菲很快得出了扫雷的硬性参数限定:

初级 9 * 9 共 10 个雷
中级 16 * 16 共 40 个雷
高级 30 * 16 共 99 个雷
自定义 x * y 共 z 个雷 (最大不超过30 * 24 , 667个雷,
最小不小于9 * 9,10个雷)


再经过一番思索,并不十分擅长动脑子的加菲也渐渐理出
StartGame()中各个变量的大致意思:


_rbBlk(0x1005340)
一个字节全局数组,存放的是每个box的内部表示。
如果字节最高位置1则表示其中有一个雷哦(or 0x80)
bomb(x,y) =_rbBlk[x + y * 32]。x和y下标从1开始,
最大值上面给出了,由于rnd返回的数下标从0开始,故
使用前要加1。

_cSec(0x100579C)
已过时间(秒)

_cBombStart(0x1005330)
总雷数

_cBombLeft(0x1005194)
剩下未扫的雷数

_cBoxVisit(0x10057A4)
已揭开的box数

_cBoxVisitMac(0x10057A0)
总box数 - 藏有雷的box数


...全文
2890 146 打赏 收藏 转发到动态 举报
写回复
用AI写文章
146 条回复
切换为时间正序
请发表友善的回复…
发表回复
nuclear2011 2012-05-24
  • 打赏
  • 举报
回复
写的很有意思啊 有点看小说的感觉
比起那种理论书好多了 支持
jorien 2010-06-27
  • 打赏
  • 举报
回复
mark
sikinzen 2010-01-19
  • 打赏
  • 举报
回复
终于相信:中国还是有人才的。。。
coolx-w 2009-12-25
  • 打赏
  • 举报
回复
我也来点分,``穷人啊!
keflying 2009-12-11
  • 打赏
  • 举报
回复
强人,不多说了。
like3389 2009-12-05
  • 打赏
  • 举报
回复
│去│便│就│记│就│产│多│来│,│我│
│把│帮│复│事│把│都│比│发│基│也│
│我│L│制│本│这│比│我│现│本│是│
│变│Z│粘│里│段│我│注│这│上│每│
│成│把│贴│,│文│多│册│样│不│天│
│元│帖│一│每│字│,│晚│很│回│看│
│老│子│次│看│保│于│的│傻│帖│帖│
│。│顶│。│一│存│是│人│,│。│无│
│ │上│顺│帖│在│我│财│很│后│数│


seglex 2009-12-03
  • 打赏
  • 举报
回复
还是菜鸟!!不懂~有待发展
seglex 2009-12-03
  • 打赏
  • 举报
回复
还是菜鸟!!不懂~有待发展
shiweifu 2009-11-26
  • 打赏
  • 举报
回复
学习了。。。
ytysj3nb 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kings_zqz 的回复:]
我受精了,火前留名-
[/Quote]我顶!!!!!
lzh3ng 2009-11-16
  • 打赏
  • 举报
回复
飘过。。。。。。。。。。。。
oxgen350 2009-11-04
  • 打赏
  • 举报
回复
牛人啊 牛人
  • 打赏
  • 举报
回复
我悲剧了!
fangjm2009 2009-11-03
  • 打赏
  • 举报
回复
是很长
lnuyasha_hrb 2009-09-30
  • 打赏
  • 举报
回复
楼主很好,很强大……
lsea_2006 2009-09-15
  • 打赏
  • 举报
回复
nb
feather013 2009-09-15
  • 打赏
  • 举报
回复
占个座
慢慢看
TTandMQ 2009-09-13
  • 打赏
  • 举报
回复

│去│便│就│记│就│产│多│来│,│我│
│把│帮│复│事│把│都│比│发│基│也│
│我│L│制│本│这│比│我│现│本│是│
│变│Z│粘│里│段│我│注│这│上│每│
│成│把│贴│,│文│多│册│样│不│天│
│元│帖│一│每│字│,│晚│很│回│看│
│老│子│次│看│保│于│的│傻│帖│帖│
│。│顶│。│一│存│是│人│,│。│无│
│ │上│顺│帖│在│我│财│很│后│数│

哦 原来分是这样加的啊~~~~~~~ 深思。。。。。
fal2009 2009-09-12
  • 打赏
  • 举报
回复
学习
rularys 2009-09-12
  • 打赏
  • 举报
回复
顶~
加载更多回复(122)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧