【文章標題】: 飄零商業3.5破解筆記
【文章作者】: wonderzdh
【作者主頁】: http://hi.baidu.com/chicken
【下載地址】: 自己搜索下載
【作者聲明】: 只是感興趣,沒有其他目的。失誤之處敬請諸位大俠賜教!
--------------------------------------------------------------------------------
本套教程至少得更新到10課,由于沒有事先安排,內容可能會比較亂,但是每字每句都是心得。
為什么我要把這些心得發出來,而不自己藏著。因為我發的東西本身就是我對學習逆向的一個梳理和總結。
贈人玫瑰,手有余香。至于你們回不回復,評不評分,我一點所謂也沒有。
后續課程不會繼續在【逆緣論壇】首發,【吾愛破解】轉帖的形式存在,而是兩個站同時更新。
也希望我的帖子在吾愛不是歸類轉帖,而是屬于原創,本人可是吾愛未來的“原創精英”+“論壇大牛”呀。
如果想求破,可直接來逆緣免費求破,網址什么的就不發了,自己百度一下。
【前言】
大家好!我是【wonderzdh】,一個正在努力學習電腦技術的男人。
此系列文章一到四篇在吾愛首發,以后我會將我的學習筆記在【逆緣論壇】與大家分享。
還請各位大牛賜教,當然也希望那些初入門的同學能和我一同進步,有問必答!
【正文】
由于是自己搭建服務器研究一下,所以先打開“WEB服務器.exe”配置服務器。
然后OD載入“客戶端.exe”,F9直接運行。
【處理飄零按鈕事件斷點】
飄零有循環調用子程序,以便干擾我們在按鈕事件出下斷,處理方法有二。
一、
OD載入F9運行后,打開“XueTr.exe”,選擇客戶端進程-右鍵-查看...-查看進程定時器。
會出現兩個,我們選中-右鍵-移除即可。
如果你一個都沒出現,請檢查你的客戶端是否已經運行,沒運行時鐘是不會被創建,自然也就沒有定時器。
二、
OD載入后-Ctrl+N-輸入SetTimer-在上邊的跳轉直接修改為JMP,然后再F9運行。
此處不能下斷然后修改,因為飄零有檢測時間,斷下時間過長就會退出。
---------------------------------------------------------
0042FB5F /75 19 jnz short 客戶端.0042FB7A
修改為:
0042FB5F /EB 19 jmp short 客戶端.0042FB7A
---------------------------------------------------------
0042F9AA /7E 1F jle short 客戶端.0042F9CB
修改為:
0042F9AA /EB 1F jmp short 客戶端.0042F9CB
---------------------------------------------------------
當然,我們還可以直接處理這個退出事件,因為到后邊暫停時間過程一樣要退出。
當程序退出后,我們查看堆寨窗口,找到第一個返回到程序領空的代碼-右鍵-反匯編窗口跟隨-段首改retn。
對于這個程序,這樣修改非常不好,估計是一些事件已經被觸發,程序會變卡,還會藍屏,應該再到上邊幾層的CALL里去修改。
---------------------------------------------------------
00442F50 55 push ebp
修改為:
00442F50 C3 retn
---------------------------------------------------------
【分析登錄按鈕事件】
現在我們在CPU窗口按下Ctrl+G-輸入“00401000”(來到程序領空代碼段最上方)-然后按Ctrl+B搜索二進制-“FF55FC5F5E”(易語言事件特征碼)
00442B6D |> \FF55 FC call [local.1]
此處下斷,然后回到窗口點擊登錄。
OD成功斷下,F7跟進。
004177A1 /. 55 push ebp
來到此代碼段,即登錄按鈕的按鈕事件代碼段。
我們一直向下翻,會找到一個易語言窗口創建的代碼:
00417AFD |. 68 02000080 push 0x80000002
00417B02 |. 6A 00 push 0x0
00417B04 |. 68 00000000 push 0x0
00417B09 |. 6A 00 push 0x0
00417B0B |. 6A 00 push 0x0
00417B0D |. 6A 00 push 0x0
00417B0F |. 68 01000100 push 0x10001
00417B14 |. 68 00020106 push 0x6010200
00417B19 |. 68 01020152 push 0x52010201 ;窗體ID,可疑理解為在此程序中各個窗體的標記。
00417B1E |. 68 03000000 push 0x3
00417B23 |. BB A0034200 mov ebx,客戶端.004203A0
00417B28 |. E8 25850000 call 客戶端.00420052
00417B2D |. 83C4 28 add esp,0x28
--------------------------------------------------------------------
004177B8 |. /EB 10 jmp short 客戶端.004177CA
004177BA |. |56 4D 50 72 6F 74>ascii "VMProtect begin",0
此處有一個VMP的加殼標記,在這兩段代碼之間的代碼會被VM掉,也就是虛化變異,代碼會非常長且不易懂。
所以VMP保護非常強大,他能把十行匯編變成一百行,這個效果大家應該就懂了。
00417C36 |. /EB 0E jmp short 客戶端.00417C46
00417C38 |. |56 4D 50 72 6F 74>ascii "VMProtect end",0
此時我們在
004177B8 |. /EB 10 jmp short 客戶端.004177CA
修改為:
004177B8 /E9 40030000 jmp 客戶端.00417AFD
作用:直接無視這些驗證,按鈕一按下,我們就來到創建窗口的代碼。
那么接下去就是要搞定目標窗口創建完畢的事件咯,我們F8一直走。
00417B28 |. E8 25850000 call 客戶端.00420052
這里必須得跟進,因為這個CALL包含了我們需要的目標窗口創建完畢的事件代碼,步過的話一些暗裝都已經執行了。
00442ADF . FFD3 call ebx ; 客戶端.004203A0
我跟進遇到這個CALL時點一下F8就停下,程序會再次來到易語言事件代碼的斷點處,我們F7跟進。
【分析目標窗口創建完畢事件】
0041FD6C /. 55 push ebp
這個代碼段就是目標窗口創建完畢的事件代碼段,我們分析一下。
--------------------------------------------------------------------
匯編:
0041FD87 |> \FF35 EC085000 push dword ptr ds:[0x5008EC]
0041FD8D |. E8 96EAFEFF call 客戶端.0040E828
源碼:
飄零關閉驅動句柄 (防OD線程驅動句柄)
修改方法:
這兩句直接nop,或者在上邊的跳轉直接跳到下邊,也可以跟進這個CALL,段首retn。
--------------------------------------------------------------------
匯編:
0041FD92 |. FF35 14095000 push dword ptr ds:[0x500914]
0041FD98 |. 68 AA1E4C00 push 客戶端.004C1EAA
0041FD9D |. B9 02000000 mov ecx,0x2
0041FDA2 |. E8 0914FEFF call 客戶端.004011B0
0041FDA7 |. 83C4 08 add esp,0x8
源碼:
標簽_到期時間.標題 = “到期時間為:” + 到期時間
無需修改。
--------------------------------------------------------------------
匯編:
0041FDD5 |. 83C4 04 add esp,0x4
0041FDD8 |> 6A 00 push 0x0
0041FDDA |. 68 C0D40100 push 0x1D4C0 ;(1D4C0)16=(1000 × 60 × 2)10
0041FDDF |. 6A FF push -0x1
0041FDE1 |. 6A 08 push 0x8
0041FDE3 |. 68 837A0116 push 0x16017A83
0041FDE8 |. 68 01020152 push 0x52010201
0041FDED |. E8 5A020000 call 客戶端.0042004C
0041FDF2 |. 83C4 18 add esp,0x18
0041FDF5 |. 6A 00 push 0x0
0041FDF7 |. 68 E0930400 push 0x493E0 ;(493E0)16=(1000 × 60 × 5)10
0041FDFC |. 6A FF push -0x1
0041FDFE |. 6A 08 push 0x8
0041FE00 |. 68 25B80116 push 0x1601B825
0041FE05 |. 68 01020152 push 0x52010201
0041FE0A |. E8 3D020000 call 客戶端.0042004C
0041FE0F |. 83C4 18 add esp,0x18
源碼:
登陸檢測時鐘.時鐘周期 = 1000 × 60 × 2
時鐘_驗證動態.時鐘周期 = 1000 × 60 × 5
修改方法:
0041FDDA |. 68 C0D40100 push 0x1D4C0
修改為:
0041FDDA 6A 00 push 0x0
--------------------------------------------------------------------
0041FDF7 |. 68 E0930400 push 0x493E0
修改為:
0041FDF7 6A 00 push 0x0
或者可以直接跳過這段代碼。
--------------------------------------------------------------------
匯編:
0041FE12 |. 833D F0085000 04 cmp dword ptr ds:[0x5008F0],0x4
0041FE19 |. 0F84 05000000 je 客戶端.0041FE24
0041FE1F |. E8 C92BFFFF call 客戶端.004129ED
源碼:
.如果真 (非法了嗎 ≠ 4)
飄零藍屏 ()
錯誤的修改方法:
0041FE19 |. /0F84 05000000 je 客戶端.0041FE24
修改為:
0041FE19 /EB 09 jmp short 客戶端.0041FE24
這種方法不保險,因為藍屏事件多次調用,所以我們要跟進這個CALL,段首retn。
正確的修改方法:
004129ED /$ 55 push ebp
修改為:
004129ED C3 retn
局部調用來自 0041299F, 00415B02, 0041AC41, 0041FE1F
這樣就不怕啦!及時其他地方調用了,也不藍屏了。
--------------------------------------------------------------------
【補充】
我們在登錄按鈕事件代碼段還未處理完畢,需做如下處理:
00417B30 8945 F0 mov dword ptr ss:[ebp-0x10],eax
修改為:
00417B30 /E9 11010000 jmp 客戶端.00417C46
匯編:
00417B28 |. E8 25850000 call 客戶端.00420052
00417B2D |. 83C4 28 add esp,0x28
00417B30 |. 8945 F0 mov [local.4],eax
00417B33 |. 837D F0 01 cmp [local.4],0x1
00417B37 0F85 36000000 jnz 客戶端.00417B73
源碼:
.判斷開始 (載入 (窗口1, , 假) = 真)
否載入 = 假
銷毀 ()
【總結】
1.要善用堆寨,查看第一個返回到程序的代碼,這里是程序最后執行的地方,然后進行猜測分析,有必要可以在出一層CALL。
2.不要濫用JMP,某些可惡的代碼,比如藍屏、格盤,這些會多出調用,要么每一處都跳過,要么直接段首retn。
第一篇-【某培訓】學前測試-程序多開
第二篇-吾愛扣扣的一個CM
第三篇 - CM大賽作品 - BambooQJ
第四篇 - CC網絡驗證 - 分析并爆破CC
cracked.zip (535.9 KB, 下載次數: 32)
客戶端.zip (535.81 KB, 下載次數: 78)
飄零商業 3.5.zip (1.98 MB, 下載次數: 225)
--------------------------------------------------------------------------------
【版權聲明】: 本文原創于【wonderzdh】,轉載請注明作者并保持文章的完整,謝謝!
2013年07月14日 0:01:32
|