魔術情書 6.55 破解過程+不脫殼打破解補丁【原創】
【破解作者】 海風月影
【作者郵箱】 zjhangtian@sohu.com
【使用工具】 od 1.10d,PEid,LoadPE,winHex,eXeScope
【破解平臺】 WinXP
【軟體名稱】 魔術情書 6.55
【下載地址】 www.coolboo.com
【軟體簡介】 “魔術情書”是一款能由電腦自動書寫情書的應用軟體,有了她,可以讓你從此不再為
寫情書而煩惱,你只需輕輕點選幾下滑鼠就可以寫出讓你感到滿意的情書。軟體內含強
大情書庫,可以用它書寫出超過一萬封不一樣的情書,而且情書庫可以隨意地擴充。軟
件內還帶有一百多封古今中外經典的情書,只需點選滑鼠,就可以自動套用:)你可以
選擇“自動書寫”、“模板式書寫”及“組合式書寫”這幾種方式來快速寫 情書,軟
件支援線上傳送情書,可以傳送匿名郵件;可以將寫的情書儲存為“文字檔案”、“Wo
rd文件”、“ 網頁檔案”等等,在網頁檔案選項中還可以選擇把檔案儲存為“爛漫星
空”、“趣味求愛”、“音樂動力”等等網頁,可以讓你寫的情書更具吸引力、更能博
得你心目中的女神、白馬王子的歡心。
此次升級新增幾十個個實用的功能,情書庫擴大了三倍,增強了非常實用的背景音樂功
能,線上傳送情書功能支援需要認證的郵件伺服器,可以傳送郵件附件,使用了全新的
皮膚介面技術,可以任意更換介面(共有九種精彩介面),馬上下載親自體驗一下吧!
【軟體大小】 2M
【加殼方式】 upx
【破解宣告】 我是一隻小菜鳥,偶得一點心得,願與大家分享:)
--------------------------------------------------------------------------------
【破解內容】
一、破解過程
1、peid查殼,UPX 0.80 - 0.84 -> Markus & Laszlo, 是簡單的壓縮殼,脫殼過程就不寫了,不會脫也沒關係,反正後面我們要不脫殼打補丁
2、用od載入,F9執行,出現對話方塊,顯示用了幾次,因此,首先把nag去掉。如何確定呼叫nag的程式碼呢?我介紹一種自己的方法,開啟記憶體(ALT+M),選中當前執行區域,這裡是
記憶體映象,專案 28
地址=00401000
大小=00197000 (1667072.)
Owner=MSQingSh 00400000
區段=UPX0
型別=Imag 01001002
訪問=R
初始訪問=RWE
因為我們執行的位置在0056xxxx,屬於上面那個區域。然後按F2,此時,程式被中斷下來了
0044F25B E8 F8F9FFFF call MSQingSh.0044EC58
0044F260 E8 1F46FBFF call MSQingSh.00403884
0044F265 807D FB 00 cmp byte ptr ss:[ebp-5],0
0044F269 74 05 je short MSQingSh.0044F270
0044F26B E8 FC85FBFF call <jmp.&user32.WaitMessage>
0044F270 33C0 xor eax,eax ; 中斷在這
0044F272 5A pop edx
0044F273 59 pop ecx
0044F274 59 pop ecx
0044F275 64:8910 mov dword ptr fs:[eax],edx
0044F278 68 92F24400 push MSQingSh.0044F292
0044F27D 8D45 F0 lea eax,dword ptr ss:[ebp-10]
0044F280 BA 02000000 mov edx,2
0044F285 E8 7E4BFBFF call MSQingSh.00403E08
0044F28A C3 retn
然後一路按F8,直到明顯遇到一個迴圈,如下
0044BC11 E8 36BBFBFF call <jmp.&user32.SendMessageA>
0044BC16 8B45 FC mov eax,dword ptr ss:[ebp-4]
0044BC19 33D2 xor edx,edx
0044BC1B 8990 34020000 mov dword ptr ds:[eax+234],edx
0044BC21 8B03 mov eax,dword ptr ds:[ebx] ; 從這
0044BC23 E8 D42D0000 call MSQingSh.0044E9FC
0044BC28 8B03 mov eax,dword ptr ds:[ebx]
0044BC2A 80B8 8C000000 00 cmp byte ptr ds:[eax+8C],0
0044BC31 74 0F je short MSQingSh.0044BC42
0044BC33 8B45 FC mov eax,dword ptr ss:[ebp-4]
0044BC36 C780 34020000 02000000 mov dword ptr ds:[eax+234],2
0044BC40 EB 14 jmp short MSQingSh.0044BC56
0044BC42 8B45 FC mov eax,dword ptr ss:[ebp-4]
0044BC45 83B8 34020000 00 cmp dword ptr ds:[eax+234],0
0044BC4C 74 08 je short MSQingSh.0044BC56
0044BC4E 8B45 FC mov eax,dword ptr ss:[ebp-4]
0044BC51 E8 26FDFFFF call MSQingSh.0044B97C
0044BC56 8B45 FC mov eax,dword ptr ss:[ebp-4]
0044BC59 8B80 34020000 mov eax,dword ptr ds:[eax+234]
0044BC5F 85C0 test eax,eax
0044BC61 ^ 74 BE je short MSQingSh.0044BC21 ; 到這,是訊息迴圈
0044BC63 8945 F8 mov dword ptr ss:[ebp-8],eax ; 在這下斷點
0044BC66 6A 00 push 0
0044BC68 6A 00 push 0
0044BC6A 68 01B00000 push 0B001
0044BC6F 8B45 FC mov eax,dword ptr ss:[ebp-4]
0044BC72 E8 D9ABFEFF call MSQingSh.00436850
這個迴圈是windows的訊息迴圈,因為程式是用delphi寫的,不容易看出來,當窗體解除安裝時就退出迴圈,因此在0044BC63下斷點,F9執行
斷在44bc63處,小心按F8,一步一步走,不斷地 ret ,遇到下面的這樣的 ret 直接跳
0044BC97 5A pop edx
0044BC98 59 pop ecx
0044BC99 59 pop ecx
0044BC9A 64:8910 mov dword ptr fs:[eax],edx
0044BC9D 68 B2BC4400 push MSQingSh.0044BCB2 ; 這是跳轉地址
0044BCA2 8B45 FC mov eax,dword ptr ss:[ebp-4]
0044BCA5 E8 7AFDFFFF call MSQingSh.0044BA24
0044BCAA C3 retn ; 這個實際上是個跳轉
前面一個push,後面一個ret,實際上就是一個jmp,因此只管跳,碰到下面的ret 就要注意了,恢復ebp 就代表這個過程結束了
0044BD73 8B45 F8 mov eax,dword ptr ss:[ebp-8]
0044BD76 5E pop esi
0044BD77 5B pop ebx
0044BD78 8BE5 mov esp,ebp
0044BD7A 5D pop ebp ; 恢復ebp了,就要注意了
0044BD7B C3 retn ; 這個ret返回後的地址要注意
ret 後來到552379,上面一行的 call 就是呼叫 nag 的call
0055236A A1 2C835600 mov eax,dword ptr ds:[56832C]
0055236F 8B00 mov eax,dword ptr ds:[eax]
00552371 8B10 mov edx,dword ptr ds:[eax]
00552373 FF92 D8000000 call dword ptr ds:[edx+D8] ; 這個call就是呼叫nag的call
00552379 33C0 xor eax,eax ; 返回到這
0055237B 5A pop edx
0055237C 59 pop ecx
0055237D 59 pop ecx
0055237E 64:8910 mov dword ptr fs:[eax],edx
00552381 68 A6235500 push MSQingSh.005523A6
00552386 A1 2C835600 mov eax,dword ptr ds:[56832C]
0055238B 8B00 mov eax,dword ptr ds:[eax]
把00552373這行nop掉,nag就沒有了 ^_^
3、但還沒有破解掉,因為雖然nag沒了,但20次的限制還是有的,用了20次後碰到要註冊的nag,這就說明這個nag是在上面去掉的nag前出現的,用od載入脫殼後的檔案(不是把上面去掉nag的檔案),F9執行,用剛才上面的方法確定nag的呼叫地址
005635D2 8990 EC020000 mov dword ptr ds:[eax+2EC],edx
005635D8 A1 CC825600 mov eax,dword ptr ds:[5682CC]
005635DD 8B00 mov eax,dword ptr ds:[eax]
005635DF E8 ACB5EEFF call MSQingSh.0044EB90 ; nag的call
005635E4 E8 9BCCFFFF call MSQingSh.00560284 ; 返回到這行
005635E9 E9 91070000 jmp MSQingSh.00563D7F ; 跳走就over了
然後向上看會發現很多這樣的類似程式碼(call 44eb90 / call 560284 / jmp 563d7f),因此這段程式碼不能執行,一直向上看,程式碼類似就向上看直到看到程式碼不一樣的時候,憑經驗下斷點(在跳轉上下),然後重新執行,看看能否斷下來。我找到一段可疑程式碼
0056218D 33DB xor ebx,ebx ;最可疑的是這裡 ebx=0
0056218F A1 54D05600 mov eax,dword ptr ds:[56D054]
00562194 8B40 30 mov eax,dword ptr ds:[eax+30]
00562197 83C0 18 add eax,18
0056219A 8B15 B87E5600 mov edx,dword ptr ds:[567EB8] ; MSQingSh.0056B5E8
005621A0 8B52 24 mov edx,dword ptr ds:[edx+24]
005621A3 E8 901CEAFF call MSQingSh.00403E38
005621A8 8B15 B87E5600 mov edx,dword ptr ds:[567EB8] ; MSQingSh.0056B5E8
005621AE 8B52 20 mov edx,dword ptr ds:[edx+20]
005621B1 8BCB mov ecx,ebx
005621B3 A1 54D05600 mov eax,dword ptr ds:[56D054]
005621B8 E8 D358F0FF call MSQingSh.00467A90
.......
中間有很多這樣結構的程式碼,太長了,不帖了
.......
00562823 8B15 B87E5600 mov edx,dword ptr ds:[567EB8] ; MSQingSh.0056B5E8
00562829 8B52 28 mov edx,dword ptr ds:[edx+28]
0056282C B9 674F0000 mov ecx,4F67
00562831 A1 60D05600 mov eax,dword ptr ds:[56D060]
00562836 E8 6DDDFFFF call MSQingSh.005605A8
0056283B E9 52100000 jmp MSQingSh.00563892 ;這裡跳走
ebx = 0 ,猜測可能是清空計數器,從0開始計數(每次都清空,這樣不就等於無限次數用了嘛^_^),記住行號0056218d,向上看有哪個跳轉跳到這,很快就找到這裡
00561FDB E8 B0CBEEFF call MSQingSh.0044EB90
00561FE0 E8 9FE2FFFF call MSQingSh.00560284
00561FE5 E9 951D0000 jmp MSQingSh.00563D7F
00561FEA E8 B1E2FFFF call MSQingSh.005602A0 ; 上面是無條件跳轉,記住這個行號
00561FEF 803D 88D05600 00 cmp byte ptr ds:[56D088],0
00561FF6 74 43 je short MSQingSh.0056203B
00561FF8 803D 89D05600 00 cmp byte ptr ds:[56D089],0
00561FFF 74 3A je short MSQingSh.0056203B
00562001 803D 8AD05600 00 cmp byte ptr ds:[56D08A],0
00562008 74 31 je short MSQingSh.0056203B
0056200A 803D 8BD05600 00 cmp byte ptr ds:[56D08B],0
00562011 74 28 je short MSQingSh.0056203B
00562013 803D 8CD05600 00 cmp byte ptr ds:[56D08C],0
0056201A 74 1F je short MSQingSh.0056203B
0056201C 803D 8DD05600 00 cmp byte ptr ds:[56D08D],0
00562023 74 16 je short MSQingSh.0056203B
00562025 803D 8ED05600 00 cmp byte ptr ds:[56D08E],0
0056202C 74 0D je short MSQingSh.0056203B
0056202E 803D 8FD05600 00 cmp byte ptr ds:[56D08F],0
00562035 0F85 52010000 jnz MSQingSh.0056218D ; 找到這了,上面的都不能跳,這個要跳
0056203B A1 CC825600 mov eax,dword ptr ds:[5682CC]
00562040 8B00 mov eax,dword ptr ds:[eax]
在00561FEA下斷點發現斷不下來,所以繼續向上找跳到00561FEA的跳轉
00561B34 8B52 20 mov edx,dword ptr ds:[edx+20]
00561B37 B1 01 mov cl,1
00561B39 A1 54D05600 mov eax,dword ptr ds:[56D054]
00561B3E E8 C95DF0FF call MSQingSh.0046790C
00561B43 8BD8 mov ebx,eax
00561B45 84DB test bl,bl
00561B47 0F84 F30C0000 je MSQingSh.00562840 ; 這是關鍵的跳轉,不能跳
00561B4D 8B0D B87E5600 mov ecx,dword ptr ds:[567EB8] ; MSQingSh.0056B5E8
00561B53 8B49 28 mov ecx,dword ptr ds:[ecx+28]
00561B56 8D85 ECFEFFFF lea eax,dword ptr ss:[ebp-114]
00561B5C 8B15 60D05600 mov edx,dword ptr ds:[56D060]
00561B62 E8 4925EAFF call MSQingSh.004040B0
00561B67 8B85 ECFEFFFF mov eax,dword ptr ss:[ebp-114]
00561B6D E8 D676EAFF call MSQingSh.00409248
00561B72 84C0 test al,al
00561B74 0F85 1E030000 jnz MSQingSh.00561E98 ;這些都不能跳,下面很多
......
中間很多這樣的程式碼,省略
......
00561E69 75 2D jnz short MSQingSh.00561E98 ;不能跳
00561E6B 8B0D B87E5600 mov ecx,dword ptr ds:[567EB8] ; MSQingSh.0056B5E8
00561E71 8B49 70 mov ecx,dword ptr ds:[ecx+70]
00561E74 8D85 A4FEFFFF lea eax,dword ptr ss:[ebp-15C]
00561E7A 8B15 60D05600 mov edx,dword ptr ds:[56D060]
00561E80 E8 2B22EAFF call MSQingSh.004040B0
00561E85 8B85 A4FEFFFF mov eax,dword ptr ss:[ebp-15C]
00561E8B E8 B873EAFF call MSQingSh.00409248
00561E90 84C0 test al,al
00561E92 0F84 52010000 je MSQingSh.00561FEA ; 找到這,這個要跳
00561E98 A1 CC825600 mov eax,dword ptr ds:[5682CC]
00561E9D 8B00 mov eax,dword ptr ds:[eax]
00561E9F E8 54CCEEFF call MSQingSh.0044EAF8
找到
00561E92 0F84 52010000 je MSQingSh.00561FEA
但上面有很多
jnz short MSQingSh.00561E98
在第一個處下斷點發現斷不下來,因此找到關鍵的跳轉
00561B47 0F84 F30C0000 je MSQingSh.00562840 ; 這是關鍵的跳轉,不能跳
這是能斷下來的跳轉,直接改成 jmp 0056218D 跳到
0056218D 33DB xor ebx,ebx ;最可疑的是這裡 ebx=0
因為中間的程式碼都是判斷是否是第一次執行的,沒必要執行,直接跳不影響結果,F9執行,果然出現了剛用了一次的nag(用沒有去掉這個nag的檔案),然後在nag掉下面這行
00552373 FF92 D8000000 call dword ptr ds:[edx+D8] ; 這個call就是呼叫nag的call
儲存一下MSQingShu_cRacKEd.exe,執行一下,呵呵,成功了^_^!
此時次數已不受限制了,下面的第四步可有可無,但是考慮到這篇文章第二部分是逆向的,所以乾脆就寫詳細點,把自己的名字也寫程式序裡^_^!
4、先確定自己名字的字元,新建文字檔案,寫入“cRacKEd bY 海風月影[NE365][DFCG]”,和“魔術情書 6.55 - cRacKEd bY 海風月影[NE365][DFCG]”,沒有引號,前一個是放在about裡的,後一個是標題欄。然後用winHex開啟檔案,看到16進位制字元
用od執行破解後的程式,然後開啟記憶體(ALT+M),點右鍵選搜尋-整個區域,填入"(Richie)",沒有引號,注意大小寫,第一處
005C8540 69 6F 6E 06 13 D7 F7 D5 DF A3 BA D6 EC 20 BD AD ion作者:朱 江
005C8550 28 52 69 63 68 69 65 29 00 00 0F 54 62 73 53 6B (Richie)..TbsSk
這裡是delphi的控制元件的屬性,先記住偏移量005C8548,用loadPE查一下在檔案裡的偏移1c7148,用winHex修改此處的程式碼,儲存,執行,發現沒有用,這就說明在程式執行時修改了控制元件的屬性,這條路走不通了。。。。。。
繼續搜尋下一個,搜到
00BB1B1C C4 A7 CA F5 C7 E9 CA E9 20 36 2E 35 35 20 20 20 魔術情書 6.55
00BB1B2C 20 20 D7 F7 D5 DF A3 BA D6 EC 20 BD AD 28 52 69 作者:朱 江(Ri
00BB1B3C 63 68 69 65 29 20 20 20 20 20 CD F8 D5 BE A3 BA chie) 網站:
00BB1B4C 77 77 77 2E 43 6F 6F 6C 42 6F 6F 2E 63 6F 6D 00 www.CoolBoo.com.
呵呵,這不是標題欄嘛,記住00BB1B1C這個地址,可惜,這個地址是動態生成的,原來程式檔案裡沒有,因此要動態除錯,用od重新載入,發現都沒有00BB1B1C這個地址,看來要一步一步跟蹤了,開啟記憶體,把位址列露出來能看到就行了,然後一步步跟蹤,看看
記憶體映象,專案 36
地址=00BB0000
大小=00088000 (557056.)
Owner= 00BB0000 (itself)
區段=
型別=Priv 00021004
訪問=RW
初始訪問=
這個頁面什麼時候出來
00403AE4 8B04DF mov eax,dword ptr ds:[edi+ebx*8] ; 這個是迴圈
00403AE7 43 inc ebx
00403AE8 891D B0945600 mov dword ptr ds:[5694B0],ebx
00403AEE 85C0 test eax,eax
00403AF0 74 02 je short MSQingSh.00403AF4
00403AF2 FFD0 call eax ; 執行到某一個時出現頁面,下斷點
00403AF4 3BF3 cmp esi,ebx
00403AF6 ^ 7F EC jg short MSQingSh.00403AE4
在00403AF0下斷點,F9慢慢按,發現頁面出來了就轉到00BB1B1C去看看,發現還全是00(幸運^_^),對00BB1B1C下記憶體寫入斷點,取消 call eax 的斷點,F9執行,斷在
00402980 FD std
00402981 F3:A5 rep movsd ; 斷在這,不能F8走
00402983 89C1 mov ecx,eax ; 在這下斷點,F9執行,取消斷點
00402985 83E1 03 and ecx,3
00402988 83C6 03 add esi,3
0040298B 83C7 03 add edi,3
0040298E F3:A4 rep movsb
00402990 FC cld
00402991 5F pop edi
00402992 5E pop esi
00402993 C3 retn
不能用F8走,一走就飛,所以在下一行下斷點,F9執行,取消斷點,然後一路F8,來到
0046A3C7 B8 30B25600 mov eax,MSQingSh.0056B230 ; 指標
0046A3CC BA 03000000 mov edx,3
0046A3D1 E8 4E9DF9FF call MSQingSh.00404124 ; 上面生成第一個字串
0046A3D6 FF35 14B25600 push dword ptr ds:[56B214] ; 在這下斷點,這裡是第一個字串
0046A3DC 68 F8E64600 push MSQingSh.0046E6F8
0046A3E1 FF35 24B25600 push dword ptr ds:[56B224] ; 這裡是6.55
0046A3E7 68 622C0000 push 2C62
0046A3EC 8D45 DC lea eax,dword ptr ss:[ebp-24]
0046A3EF 50 push eax
0046A3F0 B9 C6570000 mov ecx,57C6
0046A3F5 BA 700A0000 mov edx,0A70
0046A3FA B8 04E74600 mov eax,MSQingSh.0046E704
0046A3FF E8 78E8FFFF call MSQingSh.00468C7C ; 生成第二個字串
0046A404 FF75 DC push dword ptr ss:[ebp-24] ; 第二個字串
0046A407 B8 18B25600 mov eax,MSQingSh.0056B218 ; 連線後放入的地址(即指標)
0046A40C BA 04000000 mov edx,4
0046A411 E8 0E9DF9FF call MSQingSh.00404124 ; 連線兩個字元
0046A416 68 732C0000 push 2C73 ; 來到這,然後向上看
所以,找一個空白的地方,把 魔術情書 6.55 - cRacKEd bY 海風月影[NE365][DFCG] 複製過去,然後修改0056B218裡的內容,指向我們的字串,執行,出錯,暈!! 重來一次,斷在0046A3D6,仔細看每個字串
00BB1A8C 01 00 00 00 ...
00BB1A9C 0D 00 00 00 C4 A7 CA F5 C7 E9 CA E9 20 36 2E 35 ....魔術情書 6.5
00BB1AAC 35 00 5.
00BB1ACC 01 00 00 00 32 00 00 00 ...2...
00BB1ADC 20 20 20 20 20 D7 F7 D5 DF A3 BA D6 EC 20 BD AD 作者:朱 江
00BB1AEC 28 52 69 63 68 69 65 29 20 20 20 20 20 CD F8 D5 (Richie) 網
在 字串-8 偏移處有一個 01,在 字串-4 偏移處的值正好是字串的長度,應此我們把這兩個資訊也加上,再修改0056B218裡的內容,指向我們的字串,執行,發現標題已經變成 魔術情書 6.55 - cRacKEd bY 海風月影[NE365][DFCG] 了,下面就是儲存了,在
0046A416 68 732C0000 push 2C73 ; 來到這,然後向上看
處打個smc補丁,隨便找一片空地,寫程式碼
push 2c73
mov dword ptr ds:[0056B218],(放標題的地址) ;smc補丁
jmp 46a41b ;跳到push 2c73的下一行
儲存一下,標題欄就有我們的資訊了。
about裡的資訊找法和上面一樣,找到
0046A764 68 9B2C0000 push 2C9B
0046A769 8D45 88 lea eax,dword ptr ss:[ebp-78]
0046A76C 50 push eax
0046A76D B9 FF570000 mov ecx,57FF
0046A772 BA A90A0000 mov edx,0AA9
0046A777 B8 3CE94600 mov eax,MSQingSh.0046E93C
0046A77C E8 FBE4FFFF call MSQingSh.00468C7C
0046A781 8B55 88 mov edx,dword ptr ss:[ebp-78] ; 在這裡 00BB207C
0046A784 B8 8CB25600 mov eax,MSQingSh.0056B28C ; 指標
0046A789 E8 AA96F9FF call MSQingSh.00403E38
修改方法可以用上面的方法,但這裡沒有連線兩個字串,所以我們可以這樣改
0046A764 BA 20805900 mov edx,MSQingSh.00598020 ; 假設字串存在00598020
0046A769 8955 88 mov dword ptr ss:[ebp-78],edx ; 儲存一下,以防程式有校驗
0046A76C EB 16 jmp short MSQingSh.0046A784 ; 跳到儲存指標
0046A76E 90 nop
0046A76F 90 nop
。。。。中間的nop 省略
0046A782 90 nop
0046A783 90 nop
0046A784 B8 8CB25600 mov eax,MSQingSh.0056B28C ; 指標
0046A789 E8 AA96F9FF call MSQingSh.00403E38
上面要連線兩個字串,這裡不用,所以讓程式幫我們把指標填好,儲存,這樣就ok了。(注意要從 字串-8 偏移處開始複製)
我還把about裡圖片給去掉了,大家自己去試試看,或者看我下面SMC程式碼。
二、不脫殼打破解補丁
1、原理:未脫殼的程式檔案執行程式碼是動態生成的,所以不能用靜態修改儲存,自然想到SMC(Self Modify Code)來打補丁,關於SMC可以參考《加密與解密》第二版和《軟體加密技術內幕》中關於SMC的介紹,在這我們直接用例子說明
2、在哪打補丁:補丁位置很顯然放在殼把程式程式碼還原後,進入程式執行之前。對於壓縮殼,最簡單的地方就是在跳入oep時打補丁,對於這個程式,是用upx加殼的,跳入Oep的程式碼一般是
popad
jmp oep
那補丁打在哪呢? 打在popad 前面,因為popad 恢復暫存器前 暫存器是隨便我們用的,而殼程式碼又結束了,不影響程式正常執行。
3、下面要注意的問題就是空間問題,用od載入,跳入oep附近的程式碼
0064880A ^\EB E2 jmp short MSQingSh.006487EE
0064880C 61 popad
0064880D - E9 BE84F1FF jmp MSQingSh.00560CD0
00648812 0000 add byte ptr ds:[eax],al
00648814 0000 add byte ptr ds:[eax],al
00648816 0000 add byte ptr ds:[eax],al
00648818 0000 add byte ptr ds:[eax],al
0064881A 0000 add byte ptr ds:[eax],al
用loadPE 查一下64880d在檔案中的偏移是b0c0d,屬於第二區段,看一下區段表中第三區段的檔案中偏移b0e00,剩餘空間1f3
(這裡可以用 nbw的剩餘空間檢視器自動算,我找不到了,所以手動算一下),如果空間不夠,可以在後面加一個區段
然後我們把我們的程式碼插在
jmp short MSQingSh.006487EE
和
popad
之間。
打補丁後的程式碼如下,我儘量把我寫的程式碼的註釋寫詳細點:
0064880A ^\EB E2 jmp short MSQingSh.006487EE
0064880C A2 F37F5C00 mov byte ptr ds:[5C7FF3],al ; 修改屬性5個
00648811 A2 FD7F5C00 mov byte ptr ds:[5C7FFD],al ; about裡圖片height=0,width=0
00648816 C605 07805C00 08 mov byte ptr ds:[5C8007],8 ; about裡圖片autosize=false
0064881D C605 61845C00 67 mov byte ptr ds:[5C8461],67 ; about裡label.left
00648824 C605 68845C00 5A mov byte ptr ds:[5C8468],5A ; about裡label.top
0064882B C705 471B5600 E9410600 mov dword ptr ds:[561B47],641E9 ; 爆破點,兩個
00648835 C705 73235500 EB049090 mov dword ptr ds:[552373],909004EB
0064883F C705 64A74600 BA898864 mov dword ptr ds:[46A764],648889BA ; 修改程式碼
00648849 C705 68A74600 00895588 mov dword ptr ds:[46A768],88558900 ; 讓about裡有我們的資訊
00648853 C705 6CA74600 EB169090 mov dword ptr ds:[46A76C],909016EB
0064885D C705 16A44600 E9CBE41D mov dword ptr ds:[46A416],1DE4CBE9 ; 修改程式碼,讓程式跳到我們的程式碼,跳轉要用5個位元組,但考慮到最後一個位元組是00,和原來的程式一樣,所以我們只要改前面4個就行了
00648867 61 popad
00648868 - E9 6384F1FF jmp MSQingSh.00560CD0
0064886D 0000 add byte ptr ds:[eax],al
0064886F 0000 add byte ptr ds:[eax],al
00648871 0000 add byte ptr ds:[eax],al
00648873 0000 add byte ptr ds:[eax],al
00648875 0000 add byte ptr ds:[eax],al
00648877 0000 add byte ptr ds:[eax],al
00648879 0000 add byte ptr ds:[eax],al
0064887B 0000 add byte ptr ds:[eax],al
0064887D 0000 add byte ptr ds:[eax],al
0064887F 0000 add byte ptr ds:[eax],al
00648881 0100 add dword ptr ds:[eax],eax ; 這裡是我們儲存的資料
00648883 0000 add byte ptr ds:[eax],al
00648885 2000 and byte ptr ds:[eax],al
00648887 0000 add byte ptr ds:[eax],al
00648889 6352 61 arpl word ptr ds:[edx+61],dx ; 第一個字串(about裡的)
0064888C 634B 45 arpl word ptr ds:[ebx+45],cx
0064888F 64:2062 59 and byte ptr fs:[edx+59],ah
00648893 20BA A3B7E7D4 and byte ptr ds:[edx+D4E7B7A3],bh
00648899 C2 D3B0 retn 0B0D3
0064889C 5B pop ebx
0064889D 4E dec esi
0064889E 45 inc ebp
0064889F 3336 xor esi,dword ptr ds:[esi]
006488A1 35 5D5B4446 xor eax,46445B5D
006488A6 43 inc ebx
006488A7 47 inc edi
006488A8 5D pop ebp
006488A9 0001 add byte ptr ds:[ecx],al
006488AB 0000 add byte ptr ds:[eax],al
006488AD 0032 add byte ptr ds:[edx],dh
006488AF 0000 add byte ptr ds:[eax],al
006488B1 00C4 add ah,al ; 第二個字串(標題欄的)
006488B3 A7 cmpsd
006488B4 CA F5C7 retf 0C7F5
006488B7 - E9 CAE92036 jmp 36857286
006488BC 2E:34 39 xor al,39
006488BF 2020 and byte ptr ds:[eax],ah
006488C1 2D 20206352 sub eax,52632020
006488C6 61 popad
006488C7 634B 45 arpl word ptr ds:[ebx+45],cx
006488CA 64:2062 59 and byte ptr fs:[edx+59],ah
006488CE 20BA A3B7E7D4 and byte ptr ds:[edx+D4E7B7A3],bh
006488D4 C2 D3B0 retn 0B0D3
006488D7 5B pop ebx
006488D8 4E dec esi
006488D9 45 inc ebp
006488DA 3336 xor esi,dword ptr ds:[esi]
006488DC 35 5D5B4446 xor eax,46445B5D
006488E1 43 inc ebx
006488E2 47 inc edi
006488E3 5D pop ebp
006488E4 0000 add byte ptr ds:[eax],al
006488E6 68 732C0000 push 2C73 ; 儲存原來程式碼
006488EB C705 18B25600 B2886400 mov dword ptr ds:[56B218],MSQingSh.006488B2 ; 打補丁
006488F5 - E9 211BE2FF jmp MSQingSh.0046A41B ; 跳回去
4、改完後儲存一下,因為這是在殼上打補丁,所以不用考慮可讀可寫可執行的問題,下面就用keymaker做一下檔案補丁就行了,這裡我用的是dREAMtHEATER的XCell(R) Version 1.0做的補丁
--------------------------------------------------------------------------------
【破解總結】
後記:本文難度不大,主要是做一個拋磚引玉的作用,最近很忙,而且上不了網,我是破解的魔術情書 6.49版,剛破完發現出來了6.55版,好在同一作者程式設計思路相同,所以6.55版破解的點和6.49一樣,還有作者的其他些軟體都差不多。這篇文章寫好時 6.56版又出來了。。。。。。 作者動作真快,大家用6.56版對照這看吧,程式碼基本都是一樣的。
本文只是暴力破解,對於判斷是否註冊的地方一直沒找到,希望有高手能指點一二。
--------------------------------------------------------------------------------
【爆破地址】
00552373 FF92 D8000000 call dword ptr ds:[edx+D8];nop掉
00561B47 0F84 F30C0000 je MSQingSh.00562840;改成 jmp 0056218D
--------------------------------------------------------------------------------
【版權宣告】 本文純屬技術交流, 轉載請註明作者並保持文章的完整, 謝謝!
2004-12-4
相關文章
- MySQL Manager 2.8.0.1脫殼破解手記破解分析2004-11-03MySql
- 我終於破解了魔裝網神了,破解過程!!,不過是用2.70破解的。 (1千字)2001-10-15
- 以殼解殼--SourceRescuer脫殼手記破解分析2004-11-16
- Pycharn破解補丁啟用2018-12-20
- 不脫殼破解極光多能鬧鐘
(16千字)2003-04-14
- “天音怒放”手動脫殼及破解2015-11-15
- 菜鳥脫 UltraFXP 0.9941 殼( SVKP )+ 破解2015-11-15
- Oracle EBS APP & DB 打補丁過程簡述2016-12-06OracleAPP
- jdpack的脫殼及破解 (5千字)2002-06-25
- DameWare_NT_Utilities_7.1.0.1破解補丁.rar2011-04-13
- PowerArchiver破解過程。2015-11-15Hive
- Oracle 19c RAC打補丁過程避坑指南2020-03-18Oracle
- Oracle 11g RAC 打補丁過程(11.2.0.3.15)2016-01-14Oracle
- 【原創】一個dex脫殼指令碼2017-01-03指令碼
- Hardlock加密狗破解過程-----外殼型加密狗的破解方法 (7千字)2001-10-15加密
- HoudahSpot 破解補丁最新 HoudahSpot 中文 for Mac安裝教程2024-01-15Mac
- 最新Turbo Boost Switcher Pro補丁破解版 Turbo Boost Switcher Pro破解安裝教程2023-09-25
- 中文Illustrator 2023破解版最新+ai破解補丁20232023-12-28AI
- Asprotect1.23 Rc4 之SynchroMagic脫殼修復+破解2015-11-15
- 老妖的 C32Asm V0.4.12 脫殼+修復+破解2015-11-15ASM
- Blaze Media Pro5.05脫殼+基本修復CC(int3)+破解2015-11-15
- 原創深思3加密狗破解2015-11-15加密
- [原創]破解-分析Crackme演算法2009-06-13演算法
- 貫通詞典破解過程2004-12-20
- 破解FlashGet1.65的過程2015-11-15
- [原創]heXer老兄的telock0.98脫殼機原理2004-06-16
- 還在為找photoshop cs6破解補丁煩惱?2018-08-01
- beyond Compare4不需要補丁的破解方法2018-05-11
- idea啟用,使用破解補丁無需註冊碼2017-08-19Idea
- Armadillo3.60
加殼的EXE檔案脫殼全過程2004-09-08
- 記一次12c pdb打補丁失敗處理過程2020-09-02
- 檢視系統已經打過的補丁2009-08-04
- oracle打補丁回顧2021-12-02Oracle
- Oracle EBS中打補丁2009-06-16Oracle
- 誰與我共續這破解的故事?《破解“黎之工資”對抗脫殼之故事(上集)》
(9千字)2001-03-25
- [原創]全國******2012功能破解2015-07-31
- network
spy eval 1.6破解教程【原創】2004-12-26
- AutoCAD 2022補丁破解版 簡體中文2023-11-24