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
- 脫殼基礎知識以及簡單應用2019-06-17
- upx手動脫殼2020-10-26
- mysql簡單脫敏2021-01-25MySql
- iOS逆向學習之五(加殼?脫殼?)2019-10-10iOS
- 十、iOS逆向之《越獄砸殼/ipa脫殼》2021-03-18iOS
- Od跟進之脫殼(待完善)2018-10-20
- 教你如何寫UPX脫殼指令碼2019-05-11指令碼
- 程式排程的原理和演算法探析2023-08-30演算法
- 貝殼的面經!怎麼好像有點簡單?2024-08-07
- iOS應用程式的脫殼實現原理淺析2019-03-04iOS
- Android.Hook框架Cydia篇(脫殼機制作)2020-08-19AndroidHook框架
- 簡單演算法2024-08-09演算法
- 從Android執行時出發,打造我們的脫殼神器2020-08-19Android
- 某IOT蠕蟲病毒分析之UPX脫殼實戰2018-04-11
- 簡單排序演算法2020-11-27排序演算法
- apk加殼加密工具(apk protect) v1.0下載2020-12-15APK加密
- 難脫單的網際網路人:愛情BUG,演算法無解2022-03-03演算法
- 簡單的幾個排序演算法2018-04-10排序演算法
- 對CAS演算法的簡單理解2018-03-18演算法
- 位元組序探析:大端與小端的比較2022-06-03
- Mulesoft中的Raml 1.0簡介2022-02-09
- hashMap探析2020-05-29HashMap
- 逆向基礎——軟體手動脫殼技術入門2020-08-19
- 【開源】BlackDex,無需環境,Android新姿勢脫殼工具2021-05-27Android
- 資料探勘之KMeans演算法應用與簡單理解2019-07-23演算法
- sapper與svelte的簡單探索2020-01-09APP
- 常見演算法及問題需注意的技巧與簡單實現2020-09-23演算法
- 簡單理解Paxos演算法(譯)2019-03-04演算法
- 簡單的量子演算法(二):Simon's Algorithm2019-07-22演算法Go
- RediSearch的簡單使用與總結2024-05-14Redis
- SpringBoot與WebService的簡單實現2020-11-20Spring BootWeb
- BaseActivity與BaseFragment的簡單封裝2021-09-09Fragment封裝
- line-height與vertical-align:簡單的屬性不簡單2018-05-20
- 高研班直播公開課《JNI函式與脫殼分析實戰》 8月14日下午1點!2022-08-14函式
- channel的單向用法與select,range簡單使用2021-10-03
- 金蟬脫殼2百度雲免費線上觀看2018-06-23
- 【資料結構與演算法】二叉搜尋樹的簡單封裝2020-04-05資料結構演算法封裝
- 資料結構與演算法--簡單棧實現及其應用2020-12-04資料結構演算法