FairStars Recorder 分析

FairStars Recorder 分析  
Ty1921
------------------------------------------------------------------------


1,PEID --> ASPack 2.12 -> Alexey Solodovnikov,因爲是SMC,不脫殼。脫殼的話ESP定律再ImpREC簡單修復即可。

2,表現:先出現主窗口,後出現註冊窗口,有錯誤PN提示,ABOUT顯示未註冊版本,功能限制暫未嘗試

3,關注:
(1)如果有註冊碼,會放在什麼地方,該如何下斷
(2)註冊判斷在主窗口初始化之後還是之前
(3)會不會出現干擾聲音的暗樁,猜測是不是加入一段沒有規律的聲音跟原來的聲音數據相與

4,先註冊次,發現註冊信息沒有被清空,N大教程上指明瞭這裏是個漏洞,於是轉到OD,ALT+M打開內存,再按CTRL+B搜索,先用ASCII搜索沒有找到,再換用unicode搜索,成功找到:
0016A658  74 00 79 00 31 00 39 00 32 00 31 00 00           t.y.1.9.2.1..
下硬件訪問斷點,之前沒看最新的視頻,所以這種方法沒跟進,暫略....

5,OD載入,常規下斷 bp GetPrivateProfileStringA,bp RegQueryValueA,程序運行後沒有斷下,要麼API使用錯誤,要麼根本沒生成文件,對方判斷不存在,自然不去讀取

6,除SendMessage,UpdateWindow和Create打頭的API外,其餘全部下斷(API斷點設置工具),如果切換到註冊窗口被斷下時,取消該斷點並F9運行,依次類推
點擊Register註冊,被ShowWindow斷下。

複製內容到剪貼板
代碼:
00116C24   77D4DACD  /CALL 到 ShowWindow 來自 comctl32.77D4DAC7
00116C28   005A09DC  |hWnd = 005A09DC (class='tooltips_class32',parent=002105EC)
00116C2C   00000000  /ShowState = SW_HIDE

取消該斷點,繼續F9運行,斷在MessageBoxW

複製內容到剪貼板
代碼:
00116A40   78316909  /CALL 到 MessageBoxW 來自 mfc80u.78316903
00116A44   002105EC  |hOwner = 002105EC ('Registration',class='#32770',parent=004C0606)
00116A48   005191B8  |Text = "Registration Number Incorrect!"
00116A4C   010E1490  |Title = "Recorder"
00116A50   00000030  /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL

7,向上跟蹤,來到

複製內容到剪貼板
代碼:
00420DB0    56              PUSH ESI
00420DB1    8BF1            MOV ESI,ECX
00420DB3    E8 08FEFFFF     CALL 00420BC0                            ; 彈出消息在該CALL內,跟進
00420DB8    85C0            TEST EAX,EAX
00420DBA    74 08           JE SHORT 00420DC4
00420DBC    8BCE            MOV ECX,ESI
00420DBE    5E              POP ESI
00420DBF    E9 A8B60500     JMP 0047C46C                             ; JMP to mfc80u.#4729
00420DC4    5E              POP ESI
00420DC5    C3              RETN

8,在00420BC0處按CTRL+F8(這是個很實惠的方法,可以讓你鍵盤的F8長命百歲),不多時就彈出了對話框,來到:

複製內容到剪貼板
代碼:
00420C8B    FF15 8C675100   CALL DWORD PTR DS:[51678C]               ; mfc80u.#2896
00420C91    83F8 01         CMP EAX,1                                ; 判斷SN長度是否爲16位
........
00420C9A    68 2C925100     PUSH 0051922C                            ; UNICODE "UserName Error!"
........
00420CC2    83F8 08         CMP EAX,8                                ; 判斷PN是否爲8位
........
00420D03    83F8 10         CMP EAX,10                               ; 判斷SN是否爲16位
00420D06    0F85 8A000000   JNZ 00420D96
00420D0C    E8 6DB70500     CALL 0047C47E                            ; JMP to mfc80u.#1079
00420D11    8B40 04         MOV EAX,DWORD PTR DS:[EAX+4]             ; 關注該地址
00420D14    8B68 20         MOV EBP,DWORD PTR DS:[EAX+20]
00420D17    8D86 D0070000   LEA EAX,DWORD PTR DS:[ESI+7D0]
00420D1D    50              PUSH EAX
00420D1E    8D8D 10340100   LEA ECX,DWORD PTR SS:[EBP+13410]
00420D24    FF15 98675100   CALL DWORD PTR DS:[516798]               ; mfc80u.#774
00420D2A    53              PUSH EBX
00420D2B    8D8D 14340100   LEA ECX,DWORD PTR SS:[EBP+13414]
00420D31    FF15 98675100   CALL DWORD PTR DS:[516798]               ; mfc80u.#774
00420D37    57              PUSH EDI
00420D38    8D8D 18340100   LEA ECX,DWORD PTR SS:[EBP+13418]
00420D3E    FF15 98675100   CALL DWORD PTR DS:[516798]               ; 執行該CALL三次
00420D44    8BCD            MOV ECX,EBP
00420D46    E8 152B0200     CALL 00443860                            ; 關鍵CALL,AL
00420D4B    84C0            TEST AL,AL
00420D4D    74 39           JE SHORT 00420D88                        ; 跳向失敗
00420D4F    8BCE            MOV ECX,ESI
00420D51    E8 6AF9FFFF     CALL 004206C0
00420D56    6A 00           PUSH 0
00420D58    6A 00           PUSH 0
00420D5A    68 0C925100     PUSH 0051920C                            ; UNICODE "Registered OK!"
00420D5F    E8 F4B20500     CALL 0047C058                            ; JMP to mfc80u.#1118

9,先進入該關鍵CALL看下(選定該行回車,或者CTRL+G 輸入地址00443860):

複製內容到剪貼板
代碼:
00443860    53              PUSH EBX
........
0044386D    FF15 8C675100   CALL DWORD PTR DS:[51678C]               ; 取長度
00443873    83F8 10         CMP EAX,10
00443876    75 69           JNZ SHORT 004438E1                       ; 清0,SN位數錯誤
00443878    8DBE 14340100   LEA EDI,DWORD PTR DS:[ESI+13414]
0044387E    8BCF            MOV ECX,EDI
00443880    FF15 8C675100   CALL DWORD PTR DS:[51678C]               ; 51678c,取長度
00443886    83F8 08         CMP EAX,8
00443889    75 56           JNZ SHORT 004438E1                       ; 清0,PN位數錯誤
0044388B    8BCE            MOV ECX,ESI
0044388D    E8 6E62FFFF     CALL 00439B00                            ; 委瑣的黑名單比較
00443892    84C0            TEST AL,AL
00443894    74 1A           JE SHORT 004438B0                        ;
00443896    5F              POP EDI
00443897    C786 08340100 0>MOV DWORD PTR DS:[ESI+13408],0
004438A1    C786 0C340100 0>MOV DWORD PTR DS:[ESI+1340C],1
004438AB    5E              POP ESI
004438AC    32C0            XOR AL,AL
004438AE    5B              POP EBX
004438AF    C3              RETN
004438B0    8BCB            MOV ECX,EBX
004438B2    FF15 4C695100   CALL DWORD PTR DS:[51694C]               ; mfc80u.#3391
004438B8    50              PUSH EAX
004438B9    8BCF            MOV ECX,EDI
004438BB    FF15 4C695100   CALL DWORD PTR DS:[51694C]               ; mfc80u.#3391
004438C1    50              PUSH EAX
004438C2    8BCE            MOV ECX,ESI
004438C4    E8 173CFFFF     CALL 004374E0                            ; 關鍵CALL,AL
004438C9    84C0            TEST AL,AL
004438CB    74 14           JE SHORT 004438E1                        ; 送0還是送的關鍵判斷
004438CD    33C0            XOR EAX,EAX                              ; 清0
004438CF    5F              POP EDI
004438D0    8986 08340100   MOV DWORD PTR DS:[ESI+13408],EAX         ; 將AL=0傳給標誌位1
004438D6    8986 0C340100   MOV DWORD PTR DS:[ESI+1340C],EAX         ; 將AL=0傳給標誌位2
004438DC    5E              POP ESI
004438DD    B0 01           MOV AL,1
004438DF    5B              POP EBX
004438E0    C3              RETN
004438E1    B8 01000000     MOV EAX,1
004438E6    5F              POP EDI
004438E7    8986 0C340100   MOV DWORD PTR DS:[ESI+1340C],EAX         ; 將AL=1傳給標誌位1
004438ED    8986 08340100   MOV DWORD PTR DS:[ESI+13408],EAX         ; 將AL=1傳給標誌位2
004438F3    5E              POP ESI
004438F4    32C0            XOR AL,AL                                ; 清0操作
004438F6    5B              POP EBX
004438F7    C3              RETN

10,跟蹤上面的關鍵call,因爲只看返回的AL,來到段尾的這個的地方,也就是爆破點:

複製內容到剪貼板
代碼:
004378A8    75 09           JNZ SHORT 004378B3                       ; 可以改爲jnz 4378aa跳到下一行
004378AA    E8 C1660100     CALL 0044DF70
004378AF    B0 01           MOV AL,1
004378B1    EB 0D           JMP SHORT 004378C0
004378B3    89B7 0C340100   MOV DWORD PTR DS:[EDI+1340C],ESI
004378B9    E8 B2660100     CALL 0044DF70
004378BE    32C0            XOR AL,AL                                ; 可以改成inc al

11,SMC
找區段很是鬱悶,很久不做都忘了怎麼操作,加上系統快崩潰,偶爾冒個不相干的錯誤,真是無語。
topo感覺不如pe-tool好用,起碼後者在加了區段之後能正常運行。

ESP,來到:

複製內容到剪貼板
代碼:
0071840B   /75 08           jnz short Recorder.00718415              ; 可在此修改爲跳轉到SMC代碼處  JMP 745000
0071840D   |B8 01000000     mov eax,1
00718412   |C2 0C00         retn 0C
00718415   /68 81CC4700     push Recorder.0047CC81                   ; 修改這裏當然也是可行的,只要注意不覆蓋RETN下面的指令
0071841A    C3              retn                                     ; 返回到OEP

以下任意一個可行:
mov byte ptr ds:[4378a9],00
mov byte ptr ds:[4378be],0fe

相關實現代碼:

複製內容到剪貼板
代碼:
00745000    C605 A9784300 0>mov byte ptr ds:[4378A9],0
00745007    C605 BE784300 F>mov byte ptr ds:[4378BE],0FE
0074500E    68 81CC4700     push Recorder.0047CC81                   ; 恢復殼中的代碼,因爲之前的jnz被改成jmp之後,覆蓋了下面的指令
00745013  - C3              ret                                      ; 返回OEP

上面代碼的二進制複製:
C6 05 A9 78 43 00 00 C6 05 BE 78 43 00 FE 68 81 CC 47 00 C3

12,資料和引用

SMC奧義:

1、找到跳向OEP的跳轉,修改爲JMP SMC代碼   2、確定OEP地址   3、找空代碼位置    4、確定怎麼修改能達成破解      ——月之精靈

一般要在殼中找空白的空間,可以先從殼所在段未尾找。
在需要patch地方下斷,仔細比對F9運行前後該段是否有變化,沒有變化就能用了。                                      ——hflywolf

代碼段的末尾向上找空白的地方,最好在.data段的最後或者把所有段的屬性加上可執行可寫,這樣就隨便找空白都可以      ——shoooo

luocong.com/articles/show_article.asp?Article_ID=18                                             ——老羅

SMC技術破解一般適應1~3層壓縮保護,如果軟件被殼多層保護,使用SMC技術會非常麻煩,不如脫殼解密來得快。           ——匿名

 

 

 

原文地址,   http://bbs.chinapyg.com/viewthread.php?tid=51802&extra=page%3D1       個人博客轉載 。

發佈了38 篇原創文章 · 獲贊 15 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章