FlashSnap 1.0的簡單脫殼與演算法探析
FlashSnap 1.0的簡單脫殼與演算法探析
破解作者:
yzez[DFCG][BCG][FCG]
破解物件:
FlashSnap 1.0
軟體介紹:
FlashSnap 1.0
軟體大小:414KB
軟體語言:英文
軟體類別:國外軟體/共享版/影像捕捉
執行環境:Win9x/Me/NT/2000/XP
加入時間:2003-11-29 9:05:57
目前絕大多數的動畫網站都以 Flash 格式釋出網站上的動畫,因而 Flash 成為動畫愛好人士最常
收集到的動畫格式。不過雖然 Flash 是動畫格式,但有時候精采的部分是在其中的某幾個場景。如果你
想永久儲存動畫中美麗的瞬間場面,只要有了 FlashSnap 就能辦到。
下載地址:
http://www.onlinedown.net/soft/23365.htm
破解工具:
PE-SCAN、Ollydbg1.09、ImportREC
破解目的:
不為破解而破解,只為技術而破解,有失誤之處,請高手們指正。
破解過程:
一、簡單脫殼
用PEID竟然查不出是什麼殼,用:PE-SCAN查殼是:aspack 1.07b的殼,這個殼用工具輕鬆脫殼,下面
的脫殼過程,是我想自己用手脫,不過這個殼實在太簡單,高手不屑一顧,我等菜鳥就試一下吧!老樣子,
用OD載入程式,看下面:
004170C5 > 90 NOP*******************************載入程式後我們停在這裡!F8往下!
004170C6 90 NOP
004170C7 90 NOP
004170C8 75 00 JNZ SHORT FlashSna.004170CA
004170CA - E9 31AF0600 JMP FlashSna.00482000*********按F7進!
00482000 60 PUSHAD****************************F7跟進後我們停在這裡!
00482001 E8 00000000 CALL FlashSna.00482006*********F8帶過!
00482006 5D POP EBP
00482007 81ED 3ED94300 SUB EBP, FlashSna.0043D93E
0048200D B8 38D94300 MOV EAX, FlashSna.0043D938
00482012 03C5 ADD EAX, EBP
00482014 2B85 0BDE4300 SUB EAX, DWORD PTR SS:[EBP+43DE0B]
0048201A 8985 17DE4300 MOV DWORD PTR SS:[EBP+43DE17], EAX
00482020 80BD 01DE4300 0>CMP BYTE PTR SS:[EBP+43DE01], 0
00482027 75 15 JNZ SHORT FlashSna.0048203E*********不跳!
00482029 FE85 01DE4300 INC BYTE PTR SS:[EBP+43DE01]
0048202F E8 1D000000 CALL FlashSna.00482051***************F8帶過!
00482034 E8 79020000 CALL FlashSna.004822B2***************F8帶過!
00482039 E8 12030000 CALL FlashSna.00482350***************F8帶過!
0048203E 8B85 03DE4300 MOV EAX, DWORD PTR SS:[EBP+43DE03]
00482044 0385 17DE4300 ADD EAX, DWORD PTR SS:[EBP+43DE17]
0048204A 894424 1C MOV DWORD PTR SS:[ESP+1C], EAX
0048204E 61 POPAD***********************************這是福地呀!
0048204F FFE0 JMP EAX*****************************跳向入口!EAX的值:004029CC就是OEP!F8進!
00482051 80BD 29E04300 0>CMP BYTE PTR SS:[EBP+43E029], 0
004029CC 68 4C2D4000 PUSH FlashSna.00402D4C***************在這裡,DUMP程式出來!
004029D1 E8 EEFFFFFF CALL FlashSna.004029C4 ; JMP to msvbvm50.ThunRTMain
004029D6 0000 ADD BYTE PTR DS:[EAX], AL
004029D8 0000 ADD BYTE PTR DS:[EAX], AL
004029DA 0000 ADD BYTE PTR DS:[EAX], AL
004029DC 3000 XOR BYTE PTR DS:[EAX], AL
004029DE 0000 ADD BYTE PTR DS:[EAX], AL
004029E0 58 POP EAX ; kernel32.77E5EB69
004029E1 0000 ADD BYTE PTR DS:[EAX], AL
004029E3 0040 00 ADD BYTE PTR DS:[EAX], AL
004029E6 0000 ADD BYTE PTR DS:[EAX], AL
004029E8 C112 07 RCL DWORD PTR DS:[EDX], 7
用ImportREC修正OEP的值,試執行程式,程式正常執行!脫殼完成。
二、演算法探析。
程式是用VB編寫的,用OD載入脫殼後的程式,下斷:rtcMidCharVar,F9執行程式,彈出註冊框後輸入
註冊資訊:Serial Number:234567765432;Your full name:yzez;Your company:[DFCG][BCG][FCG],點註冊,
程式被斷在下面:
7406306E > PUSH EBP*************************點註冊確定後我們斷在這裡!
7406306F MOV EBP, ESP
74063071 SUB ESP, 10
74063074 CMP DWORD PTR DS:[7412F064], 0
7406307B PUSH ESI
7406307C PUSH EDI
7406307D JNZ msvbvm50.7409D80F
74063083 MOV ESI, DWORD PTR DS:[7412F06C]
74063089 ADD ESI, 50
7406308C PUSH ESI
7406308D PUSH DWORD PTR SS:[EBP+C]
74063090 CALL msvbvm50.7402B82C**********取出試驗碼的前4位:2345送入EAX!
74063095 CMP EAX, -1********************比較EAX的值是不是-1
74063098 JE msvbvm50.7409D836*********相等就跳!
7406309E PUSH DWORD PTR SS:[EBP+14]
740630A1 PUSH DWORD PTR SS:[EBP+10]
************************************省略一部分程式碼!****************************
740630CC MOV ESP, EBP
740630CE POP EBP ; unpack_.00442D8F
740630CF RETN 10************************返回指令!
00442D8F MOV EAX, DWORD PTR SS:[EBP-20]**返回到這裡!
00442D92 MOV DWORD PTR SS:[EBP-120], EAX****EAX的值是1,儲存,即取出試驗碼的第一位!
00442D98 CMP DWORD PTR SS:[EBP-120], 100
********************************省略一部分程式碼!*****************************
00442E2D PUSH EAX
00442E2E CALL <JMP.&msvbvm50.rtcAnsiValueBstr>
00442E33 MOVSX EAX, AX******************第一位試驗碼的值:2,取其ASCII碼值:32擴充套件到EAX
00442E36 MOV ECX, DWORD PTR SS:[EBP-20]**取出的試驗碼的位數1,把位數送入ECX
00442E39 IMUL ECX, ECX, 2*****************相乘!ECX=ECX*2=2
00442E3C JO unpack_.004431F3************溢位轉移!
00442E42 ADD ECX, 6**********************ECX=ECX+6=8
00442E45 JO unpack_.004431F3
00442E4B IMUL EAX, ECX********************EAX=ECX*ECX=32*8=190
00442E4E JO unpack_.004431F3
00442E54 MOV ECX, DWORD PTR SS:[EBP-20]**位數1移入ECX
00442E57 IMUL ECX, ECX, 8*****************ECX=ECX*8=8
00442E5A JO unpack_.004431F3
00442E60 XOR EAX, ECX********************EAX=EAC XOR ECX=190 XOR 8=198
00442E62 MOV DWORD PTR SS:[EBP-9C], EAX**儲存EAX的值!
00442E68 MOV DWORD PTR SS:[EBP-A4], 3
************************************省略一部分程式碼!**********************
00442EC7 PUSH EAX
00442EC8 CALL <JMP.&msvbvm50.__vbaStrVarMove>**把上面運算的值198轉化成十進位制值:408,放EAX
00442ECD MOV EDX, EAX*************************408再移入EDX中
00442ECF LEA ECX, DWORD PTR SS:[EBP-94]
00442ED5 CALL <JMP.&msvbvm50.__vbaStrMove>
00442EDA MOV EDX, EAX
**********************************省略一部分程式碼!************************************
00442F42 CALL <JMP.&msvbvm50.__vbaGenerateBoun>
00442F47 MOV DWORD PTR SS:[EBP-144], EAX
00442F4D PUSH DWORD PTR SS:[EBP-24]**************上一次運算的結果入棧!
00442F50 MOV EAX, DWORD PTR SS:[EBP-120]
00442F56 MOV ECX, DWORD PTR SS:[EBP-80]
00442F59 PUSH DWORD PTR DS:[ECX+EAX*4]
00442F5C CALL <JMP.&msvbvm50.__vbaStrCat>********把運算的結果聯結起來:408494616710
00442F61 . 8985 64FFFFFF MOV DWORD PTR SS:[EBP-9C], EAX
00442F67 . C785 5CFFFFFF>MOV DWORD PTR SS:[EBP-A4], 8
00442F71 . 8D85 5CFFFFFF LEA EAX, DWORD PTR SS:[EBP-A4]
00442F77 . 50 PUSH EAX
00442F78 . 8D85 4CFFFFFF LEA EAX, DWORD PTR SS:[EBP-B4]
00442F7E . 50 PUSH EAX
00442F7F . E8 9AF7FBFF CALL <JMP.&msvbvm50.rtcTrimVar>
00442F84 . 8D85 4CFFFFFF LEA EAX, DWORD PTR SS:[EBP-B4]
00442F8A . 50 PUSH EAX
00442F8B . E8 DCF7FBFF CALL <JMP.&msvbvm50.__vbaStrVarMove>
00442F90 . 8BD0 MOV EDX, EAX
00442F92 . 8D4D DC LEA ECX, DWORD PTR SS:[EBP-24]
00442F95 . E8 4EF7FBFF CALL <JMP.&msvbvm50.__vbaStrMove>
00442F9A . 8D85 4CFFFFFF LEA EAX, DWORD PTR SS:[EBP-B4]
00442FA0 . 50 PUSH EAX
00442FA1 . 8D85 5CFFFFFF LEA EAX, DWORD PTR SS:[EBP-A4]
00442FA7 . 50 PUSH EAX
00442FA8 . 6A 02 PUSH 2
00442FAA . E8 FDF6FBFF CALL <JMP.&msvbvm50.__vbaFreeVarList>
00442FAF . 83C4 0C ADD ESP, 0C
00442FB2 . 8B45 E0 MOV EAX, DWORD PTR SS:[EBP-20]
00442FB5 . 40 INC EAX
00442FB6 . 0F80 37020000 JO unpack_.004431F3
00442FBC MOV DWORD PTR SS:[EBP-20], EAX
00442FBF JMP unpack_.00442D1D*************************跳回!迴圈,直到取出的4位試驗碼計算完畢!
00442FC4 PUSH DWORD PTR SS:[EBP-24]
00442FC7 CALL <JMP.&msvbvm50.__vbaLenBstr>
00442FCC CMP EAX, 4***********************************EAX的值是上述運算的結果的位數:C(即12)位!
00442FCF JLE unpack_.00443075*************************小於等於就跳!
00442FD5 PUSH DWORD PTR SS:[EBP-24]********************計算的值408494616710入棧!
00442FD8 CALL <JMP.&msvbvm50.__vbaLenBstr>
00442FDD SUB EAX, 5***********************************位數C再減去5,EAX=C-5=7
00442FE0 JO unpack_.004431F3
00442FE6 MOV DWORD PTR SS:[EBP-9C], EAX***************把運算的結果:7儲存!
00442FEC MOV DWORD PTR SS:[EBP-A4], 3
00442FF6 LEA EAX, DWORD PTR SS:[EBP-A4]
00442FFC PUSH EAX
00442FFD PUSH 4
00442FFF PUSH DWORD PTR SS:[EBP-24]********************計算的值408494616710入棧!
00443002 CALL <JMP.&msvbvm50.rtcMidCharBstr>***********此CALL對上述結果再計算,計算是這樣:把前3位去掉,
*************************************************再反後兩位去掉,得到中間的7位值是:4946167!
00443007 MOV EDX, EAX**********************把這個值移入EDX中!
00443009 LEA ECX, DWORD PTR SS:[EBP-70]
0044300C CALL <JMP.&msvbvm50.__vbaStrMove>
00443011 LEA ECX, DWORD PTR SS:[EBP-A4]
00443017 CALL <JMP.&msvbvm50.__vbaFreeVar>
0044301C PUSH DWORD PTR SS:[EBP-5C]*********把試驗碼的前4位:2345入棧!
0044301F PUSH DWORD PTR SS:[EBP-70]*********上述結果:4946167入棧!
00443022 CALL <JMP.&msvbvm50.__vbaStrCat>***把兩個值連起來:23454946167,放EAX
00443027 MOV EDX, EAX**********************把這個值移入EDX
00443029 LEA ECX, DWORD PTR SS:[EBP-90]
0044302F CALL <JMP.&msvbvm50.__vbaStrMove>
00443034 PUSH EAX
00443035 MOV EAX, DWORD PTR SS:[EBP+8]*****23454946167入EAX
00443038 PUSH DWORD PTR DS:[EAX]************試驗碼:234567765432入棧!
0044303A PUSH 0
0044303C CALL <JMP.&msvbvm50.__vbaStrComp>**比較試驗碼:234567765432與23454946167
00443041 NEG AX****************************不相等賦AX的值為FFFF
00443044 SBB EAX, EAX
00443046 NEG EAX
00443048 NEG EAX
0044304A MOV WORD PTR SS:[EBP-120], AX
00443051 LEA ECX, DWORD PTR SS:[EBP-90]
00443057 CALL <JMP.&msvbvm50.__vbaFreeStr>
0044305C MOVSX EAX, WORD PTR SS:[EBP-120]
00443063 TEST EAX, EAX*********************測試EAX的值是否是0
00443065 JE SHORT unpack_.0044306E*******相等就跳,一跳就成功!
00443067 AND WORD PTR SS:[EBP-3C], 0
0044306C JMP SHORT unpack_.00443073
演算法小結:
這個軟體的註冊演算法有點怪,沒有用使用者名稱或者使用者單位計算註冊碼,而是用試驗碼的前4位經過計算
後得到後7位註冊碼,再把前4位試驗碼和後7位得到的註冊碼聯接起來就是軟體的註冊碼!
其計算過程是這樣:
取前4位試驗碼,設取出的試驗碼的位數是X,取出的試驗碼的ASCII碼值是Y,則
(X*2+6)*Y^(X*8),再把它轉化成十進位制值,聯接起來得到一組12位的新值,這個新值去掉前3位,再去掉
後兩位,得到中間的7位數值,它的前面再加上前4位試驗碼就是註冊碼!
一組可用的註冊碼:
Serial Number:23454946167
Your full name:yzez
Your company:[DFCG][BCG][FCG]
相關文章
- 一次簡單的脫殼2024-08-30
- HTMLZip 1.0 beta 的脫殼 (3千字)2001-02-03HTML
- 脫殼基礎知識以及簡單應用2019-06-17
- 殼的工作原理脫殼2013-04-10
- PesPin
1.0外殼簡略分析2004-09-25
- Alex
Protector V1.0 脫殼――alexprot.exe 主程式2004-10-17
- 【原創】簡單嘗試脫“愛加密”官網加固的DEX殼2017-01-03加密
- EZIP1.0脫殼手記 ――娃娃/[CCG] (3千字)2001-11-16
- ASPRTECT1.2X加殼的Delphi
Application Peeper Pro 2.3.1.9 脫殼(簡單) (3千字)2002-04-06APP
- 較完善的舊版Acprotect1.0x-1.2x脫殼指令碼2004-12-20指令碼
- 壹次脫殼法――Armadillo 雙程式標準殼 快速脫殼2015-11-15
- VBExplorer.exe脫殼教程
附脫殼指令碼2015-11-15指令碼
- 哪位高手能脫3D Exploration的殼,它似乎是用ASProtect1.0加殼的。
(169字)2000-08-173D
- ExeStealth 常用脫殼方法 + ExeStealth V2.72主程式脫殼2015-11-15
- 脫殼----對用pecompact加殼的程式進行手動脫殼
(1千字)2000-07-30
- 脫掉QSound Qmp3D V1.0的vbox殼 (2千字)2002-07-223D
- 以殼解殼--SourceRescuer脫殼手記破解分析2004-11-16
- 股市風暴4.0的外殼分析與脫殼方法(一) (7千字)2001-06-10
- 惡意軟體的脫殼方法(二):弱加密演算法2017-11-02加密演算法
- mysql簡單脫敏2021-01-25MySql
- 脫殼基本知識2015-11-15
- SoftDefender主程式脫殼2015-11-15
- International CueClub主程式脫殼(Softwrap殼)2004-09-12
- 脫ASPack2.12加殼的DLL檔案簡便方法2004-12-18
- 脫殼----對用Petite2.2加殼的程式進行手動脫殼的一點分析
(5千字)2000-07-27
- iOS逆向學習之五(加殼?脫殼?)2019-10-10iOS
- 部份軟體的脫殼(Upx 0.72-1.0x,PC Guard,Telock,PECompact)
(4千字)2001-02-02
- ☆Steel
Box☆脫殼――taos的New Protection2004-12-13
- 先分析,再脫殼(一)2003-09-04
- IconEdit2
脫殼2002-03-28
- 十、iOS逆向之《越獄砸殼/ipa脫殼》2021-03-18iOS
- C32Asm外殼脫殼分析筆記2015-11-15ASM筆記
- FTPrint的脫殼(asprotect) (2千字)2001-02-05FTP
- ACProtect 1.21專業版主程式的脫殼2015-11-15
- “愛加密” 動態脫殼法2014-11-21加密
- 360加固保動態脫殼2014-11-17
- EasyBoot5.03脫殼+暴破2004-11-17boot
- Armadillo 3.6主程式脫殼2015-11-15