家庭電腦相簿系統標準版6演算法淺析
【破解作者】 mejy【BCG】【DFCG】【FCG】
【作者郵箱】 yjychao@sohu.com
【使用工具】 OD,FI,W32ASM
【破解平臺】 Win9x/NT/2000/XP
【軟體名稱】 家庭相簿製作系統標準版B60
【下載地址】 http://www.skycn.com/soft/2631.html
【軟體簡介】 本軟體是為家庭電腦使用者蒐集圖片和珍藏攝影照片而專門開發的應用工具軟體。該軟體易學易用,其製作的多媒體電腦相簿具有圖片檢索、自動播放和音樂欣賞等多種功能,並能脫離原製作系統獨立執行。將生成的相簿燒錄成光碟,更可永久收藏。當然,你也可以配合其它軟體,製作出遊戲畫面集錦、風景名勝集錦、百科知識寶典、明星集錦和畢業紀念冊等多媒體光碟。企事業單位也可以利用它收藏管理圖片檔案資料。十分鐘成為電腦相簿製作大師已不是夢想。
【軟體大小】 956K
【加殼方式】 aspack2.12
【破解宣告】 我是一隻小菜鳥,偶得一點心得,願與大家分享:)如有雷同,實屬巧合!獻醜了!
--------------------------------------------------------------------------------
【破解內容】
家庭相簿製作系統演算法分析
利用FI檢測主程式Albummake.exe,利用Aspack加殼,利用自動脫殼或手動脫殼輕鬆脫去,檢測發現是DELPHI編寫的,我們進入程式試著輸入試練碼123456789-123發現程式提示"註冊失敗",我們利用DEDE反彙編,這裡利用W32ASM來反彙編,利用"字串資料參考"找到"註冊失敗"的提示,我們雙擊來到W32ASM,我們向上找到下面的位置,好了。下面利用OD來動態除錯,
004A51D8 /. 55 PUSH EBP
004A51D9 |. 8BEC MOV EBP,ESP
………………………………………………………….省略
004A51ED |. 55 PUSH EBP
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。省略部分
004A524A |. 8D4D F8 LEA ECX,DWORD PTR SS:[EBP-8]
004A524D |. 5A POP EDX
004A524E |. E8 4122FFFF CALL unpak.00497494 註冊碼計算關鍵函式跟進※※※
004A5253 |. 8D95 6CFEFFFF LEA EDX,DWORD PTR SS:[EBP-194]
004A5259 |. 8B83 1C070000 MOV EAX,DWORD PTR DS:[EBX+71C]
。。。。。。。。。。。。。。。。。。。。。。。。。。省略部分
004A5285 |. E8 1238F6FF CALL unpak.00408A9C
004A528A |. 8B95 68FEFFFF MOV EDX,DWORD PTR SS:[EBP-198]
004A5290 |. 58 POP EAX 將輸入的註冊碼第二步分入棧
004A5291 |. E8 22F8F5FF CALL unpak.00404AB8比較正確的註冊碼與第二步分
004A5296 0F85 A8010000 JNZ unpak.004A5444
004A529C |. 8D95 60FEFFFF LEA EDX,DWORD PTR SS:[EBP-1A0]
004A52A2 |. A1 9C9B4A00 MOV EAX,DWORD PTR DS:[4A9B9C]
004A52A7 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004A52A9 |. E8 2AA4FBFF CALL unpak.0045F6D8
004A52AE |. 8B85 60FEFFFF MOV EAX,DWORD PTR SS:[EBP-1A0]
004A52B4 |. 8D95 64FEFFFF LEA EDX,DWORD PTR SS:[EBP-19C]
004A52BA |. E8 1D3FF6FF CALL unpak.004091DC
004A52BF |. 8B85 64FEFFFF MOV EAX,DWORD PTR SS:[EBP-19C]
004A52C5 |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4]
004A52C8 |. E8 CF37F6FF CALL unpak.00408A9C
004A52CD |. 8D85 5CFEFFFF LEA EAX,DWORD PTR SS:[EBP-1A4]
004A52D3 |. B9 4C554A00 MOV ECX,unpak.004A554C ; ASCII "data3"
將註冊成功後的資料寫入安裝目錄下的data3中,
004A52D8 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
以下略。
※※※※※※※※※※※※※※※※註冊碼計算函式※※※※※※※※※※※※※※
00497494 /$ 55 PUSH EBP
00497495 |. 8BEC MOV EBP,ESP
00497497 |. 51 PUSH ECX
00497498 |. B9 07000000 MOV ECX,7
0049749D |> 6A 00 /PUSH 0
0049749F |. 6A 00 |PUSH 0
004974A1 |. 49 |DEC ECX
004974A2 |.^75 F9 JNZ SHORT unpak.0049749D
004974A4 |. 874D FC XCHG DWORD PTR SS:[EBP-4],ECX
004974A7 |. 53 PUSH EBX
004974A8 |. 56 PUSH ESI
004974A9 |. 8BF1 MOV ESI,ECX
004974AB |. 8955 F8 MOV DWORD PTR SS:[EBP-8],EDX
輸入註冊碼的前一部分
004974AE |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX EAX為機器號
004974B1 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004974B4 |. E8 A3D6F6FF CALL unpak.00404B5C
004974B9 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
004974BC |. E8 9BD6F6FF CALL unpak.00404B5C
004974C1 |. 33C0 XOR EAX,EAX
004974C3 |. 55 PUSH EBP
004974C4 |. 68 BD764900 PUSH unpak.004976BD
004974C9 |. 64:FF30 PUSH DWORD PTR FS:[EAX]
004974CC |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
004974CF |. 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
004974D2 |. 50 PUSH EAX
004974D3 |. 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18]
004974D6 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004974D9 |. E8 BE15F7FF CALL unpak.00408A9C
004974DE |. 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
004974E1 |. B9 0B000000 MOV ECX,0B 引數
004974E6 |. BA 03000000 MOV EDX,3 引數
004974EB |. E8 DCD6F6FF CALL unpak.00404BCC
從機器號的第三位開始取長度為0xB的字串。我得 ASCII "49602621006" 下面多次呼叫了這個函式進行求子字串,記結果為字串①
004974F0 |. 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
004974F3 |. 50 PUSH EAX
004974F4 |. B9 06000000 MOV ECX,6
004974F9 |. BA 06000000 MOV EDX,6
004974FE |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
00497501 |. E8 C6D6F6FF CALL unpak.00404BCC 從"49602621006"字串中的第六位取長度為6的字串,因為DELPHI的陣列下標從1開始的所以結果為"621006"字串②
00497506 |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
EAX中是上面的字串,利用下面的函式將字串轉化成數字並且轉化成十進位制結果儲存在EAX中
00497509 |. E8 BE18F7FF CALL unpak.00408DCC將機器號得後六位轉化成十六進位制
0049750E |. 8BD8 MOV EBX,EAX
00497510 |. 8BC3 MOV EAX,EBX
00497512 |. B9 03000000 MOV ECX,3
00497517 |. 99 CDQ
00497518 |. F7F9 IDIV ECX 將上面得十六進位制數除以3商儲存在EAX
0049751A |. 8BD8 MOV EBX,EAX 將商轉移給EBX中
0049751C |. EB 06 JMP SHORT unpak.00497524
0049751E |> 8BC3 /MOV EAX,EBX
00497520 |. 03C0 |ADD EAX,EAX
00497522 |. 8BD8 |MOV EBX,EAX
00497524 |> 8D55 E4 LEA EDX,DWORD PTR SS:[EBP-1C]
00497527 |. 8BC3 |MOV EAX,EBX
00497529 |. E8 BE17F7FF |CALL unpak.00408CE
C將商EBX中數轉化成10進位制並且轉化為字串 ASCII "207002" 記為字串③
0049752E |. 8B45 E4 |MOV EAX,DWORD PTR SS:[EBP-1C]
00497531 |. E8 3ED4F6FF |CALL unpak.00404974取得字串的長度
00497536 |. 83F8 06 |CMP EAX,6 和6比較
00497539 |.^7C E3 JL SHORT unpak.0049751E
如果小於6跳回,將上面計算的餘數乘2,接著轉化直到其長度大於等於6
0049753B |. 8D55 F0 LEA EDX,DWORD PTR SS:[EBP-10]
0049753E |. 8BC3 MOV EAX,EBX
00497540 |. E8 A717F7FF CALL unpak.00408CEC
00497545 |. 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
00497548 |. 50 PUSH EAX
00497549 |. B9 06000000 MOV ECX,6
0049754E |. BA 01000000 MOV EDX,1
00497553 |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00497556 |. E8 71D6F6FF CALL unpak.00404BCC 如果上面的字串長度超過6則從第一個位置開始取長度為6的字串,這裡長度剛好等於6所以結果為"207002"
0049755B |. 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14]
0049755E |. 50 PUSH EAX
0049755F |. B9 05000000 MOV ECX,5
00497564 |. BA 01000000 MOV EDX,1
00497569 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
0049756C |. E8 5BD6F6FF CALL unpak.00404BCC
從機器號去掉B6後的第1位開始取長度為5的字串。也就是剩餘的字串0ASCII "49602"
字串④
00497571 |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
00497574 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
看見輸入註冊嗎的第一部分"123456789"
00497577 |. E8 2015F7FF CALL unpak.00408A9C
0049757C |. 8B45 E0 MOV EAX,DWORD PTR SS:[EBP-20]
0049757F |. E8 4818F7FF CALL unpak.00408DCC 將上面的數字轉化為十六進位制數
00497584 |. 8BD8 MOV EBX,EAX轉化的結果儲存在EBX中
00497586 |. 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
00497589 |. E8 3E18F7FF CALL unpak.00408DCC將上面的字串4轉化為十六進位制
0049758E |. 03D8 ADD EBX,EAX 將上面轉化後的數相加結果儲存在EBX中
00497590 |. D1FB SAR EBX,1算術右移1位,也就是將EBX/2
00497592 |. 79 0A JNS SHORT unpak.0049759E
00497594 |. 83D3 00 ADC EBX,0
00497597 |. EB 05 JMP SHORT unpak.0049759E
00497599 |> 8D045B /LEA EAX,DWORD PTR DS:[EBX+EBX*2]
0049759C |. 8BD8 |MOV EBX,EAX
0049759E |> 8D55 DC LEA EDX,DWORD PTR SS:[EBP-24]
004975A1 |. 8BC3 |MOV EAX,EBX
004975A3 |. E8 4417F7FF |CALL unpak.00408CEC
轉化成十進位制字串ASCII "61753195"
004975A8 |. 8B45 DC |MOV EAX,DWORD PTR SS:[EBP-24]
004975AB |. E8 C4D3F6FF |CALL unpak.00404974得到字串的長度
004975B0 |. 83F8 06 |CMP EAX,6
004975B3 |.^7C E4 JL SHORT unpak.00497599小於6跳走
如果長度小於6則將EBX的值乘上3繼續轉化
004975B5 |. 8D55 EC LEA EDX,DWORD PTR SS:[EBP-14]
004975B8 |. 8BC3 MOV EAX,EBX
004975BA |. E8 2D17F7FF CALL unpak.00408CEC
004975BF |. 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14]
004975C2 |. 50 PUSH EAX
004975C3 |. B9 06000000 MOV ECX,6
004975C8 |. BA 01000000 MOV EDX,1
004975CD |. 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
004975D0 |. E8 F7D5F6FF CALL unpak.00404BCC因為上面字串長度為8>6所以取上面字串從第一位開始長度為6的子字串結果為 ASCII "617531"
004975D5 |. 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
004975D8 |. 8B4D EC MOV ECX,DWORD PTR SS:[EBP-14]
004975DB |. 8B55 F0 MOV EDX,DWORD PTR SS:[EBP-10]取前6位
004975DE |. E8 DDD3F6FF CALL unpak.004049C0將上面求得的字串連線起來
0012F9AC 0119B724 ASCII "207002617531"
004975E3 |. 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
004975E6 |. E8 D1D0F6FF CALL unpak.004046BC
004975EB |. 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14]
004975EE |. E8 C9D0F6FF CALL unpak.004046BC
004975F3 |. BB 01000000 MOV EBX,1
下面計算註冊嗎的第一部分,前面取偶數位連線起來
004975F8 |> 8BC3 /MOV EAX,EBX
004975FA |. D1F8 |SAR EAX,1 算術右移1位 EAX=EAX/2
004975FC |. 79 03 |JNS SHORT unpak.00497601
004975FE |. 83D0 00 |ADC EAX,0
00497601 |> 03C0 |ADD EAX,EAX 也就是EAX*2因為大家知道在C++或者DELPHI中,如果對一個整數進行先除以2再乘2,若是偶數其結果和原來資料的相同,若是奇數則結果不想等,這裡就是根據這個來得
00497603 |. 3BD8 |CMP EBX,EAX
00497605 |. 75 37 |JNZ SHORT unpak.0049763E
00497607 |. 8D45 D0 |LEA EAX,DWORD PTR SS:[EBP-30]
0049760A |. 50 |PUSH EAX
0049760B |. B9 01000000 |MOV ECX,1
00497610 |. 8BD3 |MOV EDX,EBX
00497612 |. 8B45 F4 |MOV EAX,DWORD PTR SS:[EBP-C]
00497615 |. E8 B2D5F6FF |CALL unpak.00404BCC
0049761A |. 8B4D D0 |MOV ECX,DWORD PTR SS:[EBP-30]
0049761D |. 8D45 D4 |LEA EAX,DWORD PTR SS:[EBP-2C]
00497620 |. 8B55 F0 |MOV EDX,DWORD PTR SS:[EBP-10]
00497623 |. E8 98D3F6FF |CALL unpak.004049C0連線函式
00497628 |. 8B45 D4 |MOV EAX,DWORD PTR SS:[EBP-2C]
0049762B |. 8D55 D8 |LEA EDX,DWORD PTR SS:[EBP-28]
0049762E |. E8 6914F7FF |CALL unpak.00408A9C
00497633 |. 8B55 D8 |MOV EDX,DWORD PTR SS:[EBP-28]
00497636 |. 8D45 F0 |LEA EAX,DWORD PTR SS:[EBP-10]
00497639 |. E8 16D1F6FF |CALL unpak.00404754 連線求得的每位字元
0049763E |> 43 |INC EBX
0049763F |. 83FB 0D |CMP EBX,0D看看是否已經完成
00497642 |.^75 B4 JNZ SHORT unpak.004975F8
00497644 |. BB 01000000 MOV EBX,1
取字串的偶數位(注意第一位下標為1),並逐位連線結果為: ASCII "002151"
00497649 |> 8BC3 /MOV EAX,EBX
0049764B |. D1F8 |SAR EAX,1 右移1位
0049764D |. 79 03 |JNS SHORT unpak.00497652
0049764F |. 83D0 00 |ADC EAX,0
00497652 |> 03C0 |ADD EAX,EAX
00497654 |. 3BD8 |CMP EBX,EAX 和上面一樣這裡取奇數位然後連線
00497656 |. 74 37 |JE SHORT unpak.0049768F
00497658 |. 8D45 C4 |LEA EAX,DWORD PTR SS:[EBP-3C]
0049765B |. 50 |PUSH EAX
0049765C |. B9 01000000 |MOV ECX,1
00497661 |. 8BD3 |MOV EDX,EBX
00497663 |. 8B45 F4 |MOV EAX,DWORD PTR SS:[EBP-C]
00497666 |. E8 61D5F6FF |CALL unpak.00404BCC
0049766B |. 8B4D C4 |MOV ECX,DWORD PTR SS:[EBP-3C]
0049766E |. 8D45 C8 |LEA EAX,DWORD PTR SS:[EBP-38]
00497671 |. 8B55 EC |MOV EDX,DWORD PTR SS:[EBP-14]
00497674 |. E8 47D3F6FF |CALL unpak.004049C0
00497679 |. 8B45 C8 |MOV EAX,DWORD PTR SS:[EBP-38]
0049767C |. 8D55 CC |LEA EDX,DWORD PTR SS:[EBP-34]
0049767F |. E8 1814F7FF |CALL unpak.00408A9C
00497684 |. 8B55 CC |MOV EDX,DWORD PTR SS:[EBP-34]
00497687 |. 8D45 EC |LEA EAX,DWORD PTR SS:[EBP-14]
0049768A |. E8 C5D0F6FF |CALL unpak.00404754
0049768F |> 43 |INC EBX
00497690 |. 83FB 0D |CMP EBX,0D比較
00497693 |.^75 B4 JNZ SHORT unpak.00497649迴圈2
結果位ASCII "270673"
00497695 |. 8BC6 MOV EAX,ESI
00497697 |. 8B4D EC MOV ECX,DWORD PTR SS:[EBP-14]
0049769A |. 8B55 F0 MOV EDX,DWORD PTR SS:[EBP-10]
0049769D |. E8 1ED3F6FF CALL unpak.004049C0將上面兩部分連線起來
004976A2 |. 33C0 XOR EAX,EAX
004976A4 |. 5A POP EDX
004976A5 |. 59 POP ECX
004976A6 |. 59 POP ECX
004976A7 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
004976AA |. 68 C4764900 PUSH unpak.004976C4
004976AF |> 8D45 C4 LEA EAX,DWORD PTR SS:[EBP-3C]
004976B2 |. BA 0F000000 MOV EDX,0F
004976B7 |. E8 24D0F6FF CALL unpak.004046E0
004976BC . C3 RETN
--------------------------------------------------------------------------------
【破解總結】
演算法總結:先得到軟體序列號,然後去掉編號的前兩位得到一個新的字串1,從字串1的第1個開始5個字元作為第一部分記為字串A,從第6位開始的6個字元做為第二部分記為字串B,如果還有多餘的字串則拋棄掉。然後將B轉化為十六進位制,除以3的商在轉化為十進位制的字串C,並透過轉化將C串的長度最終大於等於6若>6再取前六個字元記為G。接著取輸入註冊碼的第一部分數字轉化成十六進位制,接著將字串A轉化成十六進位制,並將這輛個數加起來除以2,在轉化成十進位制字串,取前六位記為H,然後將G和H連線起來記為M。然後將M按順序先取所有偶數位,再取所有奇數位,重新連線成新的字串,這就是你的註冊碼的第二部分。
註冊資訊儲存在安裝目錄下的data3檔案中。刪去該檔案可重新註冊
--------------------------------------------------------------------------------
【版權宣告】 本文純屬技術交流, 轉載請註明作者並保持文章的完整, 謝謝!
相關文章
- 家庭電腦相簿製作系統
V6.0 標準版2015-11-15
- 家庭電腦相簿製作系統
V6.02015-11-15
- 電腦重灌系統win10家庭版重灌教程分享2021-12-29Win10
- 家庭版電腦系統沒有bitlocker功能怎麼加密u盤或硬碟2021-12-07加密硬碟
- UnixLike 系統 awk命令淺析2014-03-11
- 淺析 Qt 佈局系統2017-12-13QT
- 家家有本難唸的經:遊戲稽核標準淺析2021-02-22遊戲
- iOS呼叫系統相簿顯示英文標題2014-10-15iOS
- Java 版 電子招標採購系統2022-07-27Java
- Linux系統——架構淺析2020-04-06Linux架構
- 淺析React之事件系統(二)2017-02-05React事件
- 《夢幻西遊電腦版》充值系統迭代方案2020-02-20
- 淺析Buddy演算法2022-07-30演算法
- 電腦重灌系統前要注意哪些事情?重灌系統前的準備工作2021-10-20
- Linux系統呼叫機制淺析2022-01-18Linux
- 淺析ES6新特性2018-01-11
- 推行企業標準資訊系統與標準件2010-01-09
- 淺析雜湊演算法2019-03-10演算法
- 重灌電腦系統怎麼裝 電腦重灌系統怎麼操作2022-03-17
- 電腦小白必看:如何備份電腦系統?2024-02-07
- windows10家庭版價格_win10家庭版正版系統多少錢2020-07-17WindowsWin10
- [分散式]分散式計算系統淺析2019-03-20分散式
- 保險公司災備系統建設淺析2011-07-17
- 《ES6 標準入門(第3版)》上市了!2017-09-19
- 淺析騰訊雲伺服器標準型SA2與標準型S2的區別在哪裡?2020-09-13伺服器
- 蘋果電腦如何裝Windows系統_蘋果電腦裝Windows系統的方法2019-12-02蘋果Windows
- Android include標籤方法淺析2015-03-07Android
- 佛盛龍羽毛球館管理軟體系統(標準版)2010-04-26
- FTP工具LeapFTP演算法淺析!2015-11-15FTP演算法
- WaterWall 5.01演算法淺析2015-11-15演算法
- 張洋:淺析PageRank演算法2013-03-26演算法
- 怎麼重灌電腦windows10系統 電腦小白快速重灌系統教程2022-03-12Windows
- 《ES6 標準入門》(第二版)出版了2016-01-18
- Linux作業系統記憶體淺析2021-09-09Linux作業系統記憶體
- 宜信支付結算賬戶系統淺析2018-12-26
- 淺析 Linux 初始化 init 系統: Systemd2014-12-12Linux
- 淺析自動駕駛車載監控系統及其中運用到的標註方式2023-02-07自動駕駛
- iOS系統相簿基本操作2018-01-03iOS