聖誕到了,發一個緣分測試軟體的分析。
聖誕閒來無聊,拿個緣分測試軟體測試了自己與女孩子的緣分,結果竟然有98分,評語是“千年等一回”,真的有這麼神嗎?於是產生了看看它計算過程的衝動。
軟體名稱:緣分測試
下載地址:http://www.skycn.net/soft/21402.html 天空軟體的東西,可以放心的。
除錯工具:OD
開工。首先用OD外掛Ultra String Reference查詢“千年等一回”,在
0040195A push 200401.00429068 “千年等一回”
在該過程的起始處401780下斷,開始除錯。
00401780 push -1
00401782 push 200401.00420E18
00401787 mov eax,dword ptr fs:[0]
0040178D push eax
0040178E mov dword ptr fs:[0],esp
00401795 sub esp,0C
00401798 push ebx
00401799 push ebp
0040179A push esi
0040179B push edi
0040179C mov esi,ecx
0040179E push 1
004017A0 call <jmp.&MFC42.#6334>
004017A5 mov edx,dword ptr ds:[esi+60]
004017A8 xor edi,edi
004017AA xor ebx,ebx
004017AC xor eax,eax
004017AE mov ecx,dword ptr ds:[edx-8]
004017B1 mov dword ptr ss:[esp+14],edi
004017B5 test ecx,ecx
004017B7 mov dword ptr ss:[esp+18],ebx
004017BB jle short 200401.004017CC
004017BD movsx ebp,byte ptr ds:[edx+eax] ; 迴圈計算boy name
004017C1 add edi,ebp ; 累和
004017C3 inc eax ; 計數器
004017C4 cmp eax,ecx
004017C6 jl short 200401.004017BD ; 迴圈
004017C8 mov dword ptr ss:[esp+14],edi ; 儲存結果在[esp+14]
004017CC mov ecx,dword ptr ds:[esi+64]
004017CF xor eax,eax
004017D1 mov edi,dword ptr ds:[ecx-8]
004017D4 test edi,edi
004017D6 jle short 200401.004017E7
004017D8 movsx ebp,byte ptr ds:[ecx+eax] ; 迴圈計算girl name
004017DC add ebx,ebp
004017DE inc eax
004017DF cmp eax,edi
004017E1 jl short 200401.004017D8
004017E3 mov dword ptr ss:[esp+18],ebx ; 儲存結果在[esp+18]
004017E7 mov edi,dword ptr ds:[<&MSVCRT._mbscmp>] ; MSVCRT._mbscmp
004017ED push 200401.004297E4 ;
004017F2 push edx ;
004017F3 call edi ;
004017F5 add esp,8
004017F8 test eax,eax
004017FA je 200401.0040198C
00401800 mov eax,dword ptr ds:[esi+64]
00401803 push 200401.004297E4
00401808 push eax ; girl name
00401809 call edi
0040180B add esp,8
0040180E test eax,eax
00401810 je 200401.0040198C
00401816 fild dword ptr ss:[esp+14] ; boy name 結果入棧 (-167)
0040181A fadd qword ptr ds:[4228D8] ; 加3.76793
00401820 fimul dword ptr ss:[esp+18] ; 與girl name相乘 (-182)
00401824 fsin ; 取正弦值,結果介於-1到1之間
00401826 fadd qword ptr ds:[4228D0] ; 加1,結果介於0-2
0040182C fmul qword ptr ds:[4228C8] ; 乘50,結果介於0-100
00401832 call <jmp.&MSVCRT._ftol> ; 結果出棧
00401837 mov ebx,eax ; 得分
00401839 mov eax,dword ptr ds:[esi+60]
0040183C push 200401.00429248 ; ASCII "Romeo"
00401841 push eax ; boy name
00401842 call edi 是否是Romeo
00401844 add esp,8
00401847 test eax,eax
00401849 jnz short 200401.00401864
0040184B mov eax,dword ptr ds:[esi+64]
0040184E push 200401.00429240 ; ASCII "Julia"
00401853 push eax
00401854 call edi 是否是Julia
00401856 add esp,8
00401859 test eax,eax
0040185B jnz short 200401.00401864
0040185D mov ebx,64 ; 分數為100
00401862 jmp short 200401.004018B8
00401864 mov eax,dword ptr ds:[esi+60]
00401867 push 200401.00429238 ; ASCII "romeo"
0040186C push eax ; boy name
0040186D call edi
0040186F add esp,8
00401872 test eax,eax
00401874 jnz short 200401.0040188F
00401876 mov eax,dword ptr ds:[esi+64]
00401879 push 200401.00429230 ; ASCII "julia"
0040187E push eax
0040187F call edi
00401881 add esp,8
00401884 test eax,eax
00401886 jnz short 200401.0040188F
00401888 mov ebx,64
0040188D jmp short 200401.004018B8
0040188F mov eax,dword ptr ds:[esi+60]
00401892 push 200401.00429228 ; 梁山伯
00401897 push eax
00401898 call edi
0040189A add esp,8
0040189D test eax,eax
0040189F jnz short 200401.004018B8
004018A1 mov eax,dword ptr ds:[esi+64]
004018A4 push 200401.00429220 祝英臺
004018A9 push eax
004018AA call edi
004018AC add esp,8
004018AF test eax,eax
004018B1 jnz short 200401.004018B8
004018B3 mov ebx,63
004018B8 push ebx
004018B9 lea eax,dword ptr ds:[esi+68]
004018BC push 200401.0042921C ;
004018C1 push eax
004018C2 call <jmp.&MFC42.#2818>
004018C7 add esp,0C
004018CA mov ecx,esi
004018CC push 0
004018CE call <jmp.&MFC42.#6334>
004018D3 mov ecx,dword ptr ds:[esi+20]
004018D6 push 1 ;
004018D8 push 0 ;
004018DA push ecx ;
004018DB call dword ptr ds:[<&USER32.InvalidateRect>] ; \InvalidateRect
004018E1 lea ecx,dword ptr ds:[ebx+5] ; 以下計算分數分級,分數+5
004018E4 mov eax,66666667 ; 應該是四捨五入計算,但不知為什麼程式碼這樣。
004018E9 imul ecx
004018EB sar edx,2
004018EE mov eax,edx
004018F0 lea ecx,dword ptr ss:[esp+10]
004018F4 shr eax,1F
004018F7 add edx,eax
004018F9 mov edi,edx ; 等級儲存在EDI,11個等級,0-4,5-14,類推。
004018FB call <jmp.&MFC42.#540>
00401900 cmp edi,0A ; 等級是否大於A,Switch (cases 0..A)
00401903 mov dword ptr ss:[esp+24],0
0040190B ja short 200401.00401968
0040190D jmp dword ptr ds:[edi*4+4019A0]
00401914 push 200401.00429204 ; Case 0 of switch 00401900
00401919 jmp short 200401.0040195F
0040191B push 200401.004291F0 ; Case 1 of switch 00401900
00401920 jmp short 200401.0040195F
00401922 push 200401.004291D8 ; Case 2 of switch 00401900
00401927 jmp short 200401.0040195F
00401929 push 200401.004291C0 ; Case 3 of switch 00401900
0040192E jmp short 200401.0040195F
00401930 push 200401.00429178 ; Case 4 of switch 00401900
00401935 jmp short 200401.0040195F
00401937 push 200401.00429150 ; Case 5 of switch 00401900
0040193C jmp short 200401.0040195F
0040193E push 200401.00429110 ; Case 6 of switch 00401900
00401943 jmp short 200401.0040195F
00401945 push 200401.004290E0 ; Case 7 of switch 00401900
0040194A jmp short 200401.0040195F
0040194C push 200401.004290B0 ; Case 8 of switch 00401900
00401951 jmp short 200401.0040195F
00401953 push 200401.00429078 ; Case 9 of switch 00401900
00401958 jmp short 200401.0040195F
0040195A push 200401.00429068 ; Case A of switch 00401900,千年等一回啊!
0040195F lea ecx,dword ptr ss:[esp+14]
00401963 call <jmp.&MFC42.#860>
00401968 mov ecx,dword ptr ss:[esp+10] ; Default case of switch 00401900
0040196C push 0
0040196E push 200401.0042905C
00401973 push ecx
00401974 mov ecx,esi
00401976 call <jmp.&MFC42.#4224>
0040197B lea ecx,dword ptr ss:[esp+10]
0040197F mov dword ptr ss:[esp+24],-1
00401987 call <jmp.&MFC42.#800>
0040198C mov ecx,dword ptr ss:[esp+1C]
00401990 pop edi
00401991 pop esi
00401992 pop ebp
00401993 pop ebx
00401994 mov dword ptr fs:[0],ecx
0040199B add esp,18
0040199E retn
0040199F nop
004019A0 dd 200401.00401914 ; Switch table used at 0040190D, 等級表
004019A4 dd 200401.0040191B
004019A8 dd 200401.00401922
004019AC dd 200401.00401929
004019B0 dd 200401.00401930
004019B4 dd 200401.00401937
004019B8 dd 200401.0040193E
004019BC dd 200401.00401945
004019C0 dd 200401.0040194C
004019C4 dd 200401.00401953
004019C8 dd 200401.0040195A
004019CC nop
004019CD nop
004019CE nop
004019CF nop
004019D0 jmp 200401.00401780
總結:其實軟體是取男孩名字的每個位元組相加,結果為A;女孩名字的每個位元組相加,結果為B,
{Sin[(A+3.76793)*B]+1}*50即為最終分數(取正弦後加1是為了保證結果在0-100之間)
然後分數四捨五入獲得等級(11個等級,對應0-A),不同等級有不同評語。
想哄女孩子的趕緊拿去玩玩吧。
相關文章
- 軟體測試——三、軟體測試的分類2024-06-15
- 一個聖誕動畫的實現2008-01-03動畫
- 作為一個軟體測試新手,你知道軟體測試的幾個方向嗎?2018-11-19
- 軟體測試分類2020-10-28
- 軟體測試培訓分享:軟體測試和軟體開發學哪個好呢2021-11-12
- 軟體測試是如何發展的,分為哪幾個階段?2022-12-26
- 軟體測試-需求分析2020-06-20
- 軟體測試案例分析2009-04-17
- 軟體測試培訓分享:做軟體測試工作如何清楚的描述一個bug2021-10-21
- [軟體測試理論基礎] 記錄第一個 Bug 的誕生,為什麼軟體缺陷叫 Bug/Defect?2020-11-13
- 軟體測試需求分析方法2018-07-17
- 小議軟體測試分析2009-07-13
- 軟體需求分析測試22024-10-14
- 程式設計師的聖誕節--送她一顆聖誕樹(附原始碼)2018-12-26程式設計師原始碼
- 程式設計師的聖誕節–送她一顆聖誕樹(附原始碼)2018-12-26程式設計師原始碼
- 金融軟體測試前景分析,與其他軟體測試的5大區別!2019-03-29
- 軟體測試方法的分析與研究2013-06-27
- 軟體測試專項分類2017-05-08
- 聖誕節到了!!你的桌面下雪了嗎?? - Qt趣味開發之讓你的桌面下雪2020-12-25QT
- 軟體測試工具的分類和使用2010-04-09
- 如何用 C 語言畫一個“聖誕樹”?2015-12-25
- 一個軟體測試工程師的學習體驗2009-09-02工程師
- 軟體測試的四個測試階段簡析,軟體測試報告需要多少錢?2023-03-01測試報告
- 軟體測試:瓶頸分析方法2019-08-26
- 軟體測試LR效能分析流程2008-01-15
- 軟體測試中的43個功能測試點(上)2022-05-26
- 軟體測試中的43個功能測試點(下)2022-05-27
- 一個優秀的軟體測試工程師該如何進行需求分析2018-04-26工程師
- 軟體測評中心▏軟體功能測試和非功能測試分別是什麼?2022-09-20
- 軟體測試職業發展的幾個階段2020-10-16
- 軟體開發和測試的 30 個最佳實踐2017-06-29
- 軟體測試培訓分享:軟體測試的發展空間大嗎2021-11-08
- 聖誕節快到了,快來裝飾你的Mac電腦桌面吧!2020-12-08Mac
- 軟體功能測試在軟體開發中的重要性。在哪裡做軟體測試?2024-05-21
- 軟體測試為什麼要做測試需求分析?專業的軟體測評公司有哪些?2022-08-25
- 軟體測試學習——移動端功能測試分析2019-09-12
- 軟體測試培訓分享:軟體測試的職業發展方向有哪些2021-11-26
- 軟體驗收測試之α測試和β測試分別是什麼?2022-05-06