詳細分析 《LRC 傻瓜編輯器 V1.1》演算法
詳細分析 《LRC 傻瓜編輯器 V1.1》演算法
簡介:本軟體可以讓你聽完一首MP3歌曲,便可編輯完成一首LRC歌詞。並且本軟體自身還帶有MP3音樂播放和LRC歌詞播放功能。
軟體下載地址:http://www.softreg.com.cn/shareware...F4-5E964A1486D9
開啟軟體,註冊發現有15天的限制,加了客,用工具輕鬆脫了。分析如下:
* Reference to Form2
|
0047B5CF 8B45FC mov eax, [ebp-$04]
* Reference to control TForm2.Edit1 : TEdit
|
0047B5D2 8B8004030000 mov eax, [eax+$0304]
* Reference to: controls.TControl.GetText(TControl):TCaption;
|
0047B5D8 E8E30CFBFF call 0042C2C0
0047B5DD 8B45F8 mov eax, [ebp-$08]
* Reference to: system.@LStrLen:Integer;
| or: system.@DynArrayLength;
| or: system.DynArraySize(Pointer):Integer;
|
0047B5E0 E8F386F8FF call 00403CD8
0047B5E5 8BF0 mov esi, eax ///////使用者名稱長度--》eax
0047B5E7 85F6 test esi, esi
0047B5E9 7E3C jle 0047B627
0047B5EB BF01000000 mov edi, $00000001
0047B5F0 8B45F8 mov eax, [ebp-$08]
0047B5F3 33DB xor ebx, ebx //////ebx清零
0047B5F5 8A5C38FF mov bl, byte ptr [eax+edi-$01] //////q取使用者名稱的第一個字元-》bl中
0047B5F9 8BC3 mov eax, ebx
0047B5FB F7EB imul ebx
0047B5FD F7EB imul ebx ///上面的作用是把第一個字元的asc碼進行3次方運算--》eax
0047B5FF 8945EC mov [ebp-$14], eax
0047B602 DB45EC fild dword ptr [ebp-$14] ///對這個值浮點取整
0047B605 D9FA fsqrt /////在開方
* Reference to: system.@ROUND;
|
0047B607 E8D072F8FF call 004028DC //////////跟進,下文分析
0047B60C 8BD8 mov ebx, eax
0047B60E 8D55E8 lea edx, [ebp-$18]
0047B611 8BC3 mov eax, ebx
* Reference to: Unit_00407618.Proc_00408590
|
0047B613 E878CFF8FF call 00408590 ////////////跟進,下文分析
0047B618 8B55E8 mov edx, [ebp-$18]
0047B61B 8D45F4 lea eax, [ebp-$0C]
* Reference to: system.@LStrCat;
|
0047B61E E8BD86F8FF call 00403CE0
0047B623 47 inc edi
0047B624 4E dec esi
0047B625 75C9 jnz 0047B5F0
0047B627 8B45F4 mov eax, [ebp-$0C]
* Reference to: system.@LStrLen:Integer;
| or: system.@DynArrayLength;
| or: system.DynArraySize(Pointer):Integer;
|
0047B62A E8A986F8FF call 00403CD8
0047B62F 83F80A cmp eax, +$0A
0047B632 7E26 jle 0047B65A
0047B634 8D45E4 lea eax, [ebp-$1C]
0047B637 50 push eax
0047B638 B90A000000 mov ecx, $0000000A
0047B63D BA01000000 mov edx, $00000001
0047B642 8B45F4 mov eax, [ebp-$0C]
* Reference to: system.@LStrCopy; ////////取計算出來註冊碼的前10位
|
0047B645 E89688F8FF call 00403EE0
0047B64A 8B55E4 mov edx, [ebp-$1C]
0047B64D 8D45F4 lea eax, [ebp-$0C]
* Possible String Reference to: '321' //////////////想想這是幹什麼的????
|
0047B650 B96CB74700 mov ecx, $0047B76C
* Reference to: system.@LStrCat3;
|
0047B655 E8CA86F8FF call 00403D24
0047B65A 8D55E0 lea edx, [ebp-$20]
* Reference to Form2
|
0047B65D 8B45FC mov eax, [ebp-$04]
* Reference to control TForm2.Edit2 : TEdit
|
0047B660 8B8010030000 mov eax, [eax+$0310]
* Reference to: controls.TControl.GetText(TControl):TCaption;
|
0047B666 E8550CFBFF call 0042C2C0
0047B66B 8B55E0 mov edx, [ebp-$20] ////////這裡進行了明文比較。
0047B66E 8B45F4 mov eax, [ebp-$0C]
* Reference to: system.@LStrCmp;
|
0047B671 E87287F8FF call 00403DE8
0047B676 0F85A0000000 jnz 0047B71C //////關鍵跳轉,相等則 '您已經註冊,多謝支援!',下面寫入到登錄檔
* Reference to Form2
|
0047B67C 8B45FC mov eax, [ebp-$04]
* Reference to control TForm2.Label1 : TLabel
|
0047B67F 8B80F4020000 mov eax, [eax+$02F4]
* Possible String Reference to: '您已經註冊,多謝支援!'
|
0047B685 BA78B74700 mov edx, $0047B778
* Reference to: controls.TControl.SetText(TControl;TCaption);
|
0047B68A E8610CFBFF call 0042C2F0
* Reference to Form2
|
0047B68F 8B45FC mov eax, [ebp-$04]
* Reference to control TForm2.Label2 : TLabel
|
0047B692 8B80F8020000 mov eax, [eax+$02F8]
0047B698 33D2 xor edx, edx
* Reference to: controls.TControl.SetVisible(TControl;Boolean);
|
0047B69A E8390BFBFF call 0042C1D8
* Reference to TForm1 instance
|
0047B69F A124024800 mov eax, dword ptr [$00480224]
0047B6A4 8B00 mov eax, [eax]
* Reference to control TForm1.Timer3 : TTimer
|
0047B6A6 8B8084030000 mov eax, [eax+$0384]
0047B6AC 33D2 xor edx, edx
* Reference to: extctrls.TTimer.SetEnabled(TTimer;Boolean);
|
0047B6AE E84515FDFF call 0044CBF8
0047B6B3 B201 mov dl, $01
* Reference to class TRegistry
|
0047B6B5 A1A0B64400 mov eax, dword ptr [$0044B6A0]
* Reference to: Unit_0044B640.Proc_0044B7A0
|
0047B6BA E8E100FDFF call 0044B7A0
0047B6BF 8BD8 mov ebx, eax
0047B6C1 BA01000080 mov edx, $80000001
0047B6C6 8BC3 mov eax, ebx
* Reference to: Unit_0044B640.Proc_0044B840
|
0047B6C8 E87301FDFF call 0044B840
* Possible String Reference to: 'software\gcbjq' /////登錄檔裡的東東
|
0047B6CD BA98B74700 mov edx, $0047B798
0047B6D2 8BC3 mov eax, ebx
* Reference to: Unit_0044B640.Proc_0044BD08
|
0047B6D4 E82F06FDFF call 0044BD08
0047B6D9 84C0 test al, al
0047B6DB 750C jnz 0047B6E9
* Possible String Reference to: 'software\gcbjq'
|
0047B6DD BA98B74700 mov edx, $0047B798
0047B6E2 8BC3 mov eax, ebx
* Reference to: Unit_0044B640.Proc_0044B8A4
|
0047B6E4 E8BB01FDFF call 0044B8A4
0047B6E9 33C9 xor ecx, ecx
* Possible String Reference to: 'software\gcbjq'
|
0047B6EB BA98B74700 mov edx, $0047B798
0047B6F0 8BC3 mov eax, ebx
* Reference to: Unit_0044B640.Proc_0044B980
|
0047B6F2 E88902FDFF call 0044B980
* Possible String Reference to: 'zhuche'
|
0047B6F7 BAB0B74700 mov edx, $0047B7B0
0047B6FC 8BC3 mov eax, ebx
* Reference to: Unit_0044B640.Proc_0044BC60
|
0047B6FE E85D05FDFF call 0044BC60
0047B703 84C0 test al, al
0047B705 750E jnz 0047B715
0047B707 B101 mov cl, $01
* Possible String Reference to: 'zhuche' ///////// dword型的鍵,置1表示註冊成功!!
|
0047B709 BAB0B74700 mov edx, $0047B7B0
0047B70E 8BC3 mov eax, ebx
0047B607 E8D072F8FF call 004028DC 進去
004028DC /$ 83EC 08 SUB ESP,8
004028DF |. DF3C24 FISTP QWORD PTR SS:[ESP] /////把剛才計算的結果取整,並出棧
004028E2 |. 9B WAIT
004028E3 |. 58 POP EAX ////結果轉為16進位制---》eax中
004028E4 |. 5A POP EDX
004028E5 \. C3 RETN
0047B613 E878CFF8FF call 00408590 進去 經過反覆的除錯發現註冊碼的計算出(這裡有一些陷阱)
00408F02 |$ B9 0A000000 MOV ECX,0A ////eax=a 此時eax為先前計算的值
00408F07 |> 8D75 9F LEA ESI,DWORD PTR SS:[EBP-61]
00408F0A |> 31D2 /XOR EDX,EDX
00408F0C |. F7F1 |DIV ECX ///eax除以eca(0ah),商->eax,餘數-》edx
00408F0E |. 80C2 30 |ADD DL,30 edx=edx+30
00408F11 |. 80FA 3A |CMP DL,3A
00408F14 |. 72 03 |JB SHORT 1.00408F19 如果edx小於3a,則跳
00408F16 |. 80C2 07 |ADD DL,7
00408F19 |> 4E |DEC ESI ////////esi為為註冊碼存放的棧地址
00408F1A |. 8816 |MOV BYTE PTR DS:[ESI],DL
00408F1C |. 09C0 |OR EAX,EAX
00408F1E |.^75 EA \JNZ SHORT 1.00408F0A 如果eax為0(即商位0),則跳出,否則迴圈
下面把演算法總結一下,取使用者名稱的第一個字元,求它的3次方,在對其開方,取整,自動轉換為16進位制的形式儲存。在對這個16進位制數不斷的除
以0ah,餘數+30 與3ah比較,如果比3ah小,則dl放入一個堆疊地址(初始是12e1a3,下次迴圈逐次減一)中;反之把dl+7,在放入一個堆疊
地址中。最後看exa是否為0,不為0,則繼續迴圈除下去。最後把堆疊地址中的資料轉換為asc碼的形式。以“u”為例,堆疊地址中的資料形式
如下:
36 36 32 31
36--對應的第一次迴圈的esi 12e1a2
36-- 對應的第二次迴圈的esi 121a1 32--對應的第三次迴圈的esi 12e1a0
31-- 對應的第四次迴圈的esi 12e19f
asc碼為“1266”
下面在取第二個字元計算。
・・・・・・・・・・・・・・・・・・・・・・・・・・
把所有計算的asc碼拼在一起,取前10位,再在後面拼上“321”,就是真正的註冊碼了。
如:huangrui
1061 1266 955 1154 1045 1217 1266 1076
取前10位,再在後面拼上“321” 即為 “1061126695321”
最後提議下這個軟體再登錄檔裡的行為,如果沒註冊,它會生成first的鍵。它的鍵值位xx xx xx xx 00 a7 02 40.(xx位隨即的)每過一
天它的另外一個鍵yesday會有變化!鍵值第五位起決定因素。00第一天,,02第二天,04第三天,偶數關係。比較有意思。其實再登錄檔中
user\software\gcbjq 下新增一個名位zhuche的dword型的鍵,置1表示註冊成功,一切就ok了!!好累啊!!!睡覺拉!!!!
相關文章
- 歌詞LRC檔案編輯器Mac版教程2018-10-20Mac
- Super LRC Editor With AI for Mac - 歌曲匯入字幕編輯器2021-11-25AIMac
- WordPress古騰堡編輯器和經典編輯器詳細對比,哪個好用?2024-05-18
- Super LRC Editor for Mac(歌詞編輯器)v6.28.1免啟用版2021-11-24Mac
- 演算法:編輯距離問題(動態規劃,詳細解答)2020-11-15演算法動態規劃
- vim編輯器中:wq wq! x q q!的詳細區別2024-06-22
- 最詳細的 Vi 編輯器使用指南2015-10-27
- IE瀏覽器修復工具 V1.1 不完全演算法分析2003-07-07瀏覽器演算法
- Shell指令碼基本編輯規範及變數(詳細)2020-12-16指令碼變數
- Linux編輯器vim鍵盤詳解2016-05-02Linux
- Linux中目標與檔案的編輯管理(詳細)2020-12-06Linux
- 編輯距離及編輯距離演算法2019-02-16演算法
- JWT 詳細分析2018-10-12JWT
- 公式編輯器2015-04-17公式
- vim編輯器2024-03-14
- HTML 編輯器2024-08-04HTML
- [HTML編輯器]C#編寫的HTML編輯器:原理篇2009-12-23HTMLC#
- 前端編輯器配置檔案EditorConfig詳解2019-09-11前端
- 詳解流編輯器 sed 和 程式語言 awk2014-02-19
- 編輯距離演算法2024-03-29演算法
- JWT 超詳細分析2018-10-04JWT
- PE頭詳細分析2021-11-02
- Https詳細分析2020-09-25HTTP
- linux編輯器2020-10-02Linux
- thinkphp編輯器kindeditor2013-10-14PHP
- AIX VI編輯器2015-05-13AI
- 手機遊戲編輯器2008-10-08遊戲
- HTML線上編輯器2006-05-22HTML
- Emacs 編輯器(轉)2007-08-11Mac
- 12 vi編輯器2024-03-21
- Nano編輯器常用2024-06-03NaN
- 又一編輯神器-百度編輯器-Ueditor2017-09-06
- 【演算法】動態規劃-優化編輯器問題2018-08-04演算法動態規劃優化
- 最短編輯距離演算法2014-08-09演算法
- 演算法分析是一種享受---IP-Tools中的密碼學演算法詳細分析2004-12-10演算法密碼學
- 資料對齊-編輯距離演算法詳解(Levenshtein distance)2018-12-14演算法
- PE節表詳細分析2021-11-06
- CanOpen報文詳細分析2024-09-22