用作例子的軟件是”開博電纜報價系統(tǒng)“
一扯再、破解過程
1、載入OD運行軟件后佳谦,點擊”注冊“后輸入假碼戴涝,彈窗
看到了彈窗,使用F12暫停法,按Alt+F9后啥刻,在點擊彈窗的確定后就從系統(tǒng)空間返回到用戶代碼(或者可以按Ctrl+F9奸鸯,F(xiàn)8出call幾次后也能返回到用戶代碼)。
這時還不是彈窗call郑什,繼續(xù)F8出call后就找到了
0073868D |> \A1 C4C07400 mov eax,dword ptr ds:[0x74C0C4]
00738692 |. C600 00 mov byte ptr ds:[eax],0x0
00738695 |. 6A 10 push 0x10
00738697 |. B9 BC877300 mov ecx,007387BC ; 開博科技
0073869C |. BA 04887300 mov edx,00738804 ; 注冊失敗府喳。http://www.dianlan8.com。
007386A1 |. A1 5CC77400 mov eax,dword ptr ds:[0x74C75C]
007386A6 |. 8B00 mov eax,dword ptr ds:[eax]
007386A8 |. E8 1FB3D3FF call 004739CC ; 彈窗call
007386AD |> A1 C4C07400 mov eax,dword ptr ds:[0x74C0C4]
007386B2 |. 8038 01 cmp byte ptr ds:[eax],0x1
2蘑拯、向上尋找能跳過這個注冊失敗的跳轉(zhuǎn)钝满,找到的為:
00738574 |. E8 0F98FFFF call 00731D88 ; 關鍵call
00738579 |. 84C0 test al,al
0073857B |. 0F84 0C010000 je 0073868D ; 關鍵跳
進入關鍵call里面,發(fā)現(xiàn)是由3處都調(diào)用了這個關鍵call申窘,
所以想到修改關鍵call的返回值弯蚜。在關鍵call出下斷點,再次注冊剃法,看一下關鍵call的運行流程碎捺。
修改關鍵call的段首為:
00731D88 B8 01000000 mov eax,0x1
00731D8D C3 retn
但是當使用軟件的功能時,還是不行贷洲,提示未注冊收厨。所以這個關鍵call只是能夠讓在注冊時不彈窗了,對于別的還是沒有作用的优构。
還得從別的地方入手诵叁。
3、既然又彈窗了钦椭,繼續(xù)F12暫停法找到關鍵代碼拧额。
00713B15 . A1 C4C07400 mov eax,dword ptr ds:[0x74C0C4]
00713B1A . 8038 00 cmp byte ptr ds:[eax],0x0
00713B1D . 75 1D jnz short 00713B3C ; 關鍵跳
00713B1F . 6A 10 push 0x10
00713B21 . B9 E83B7100 mov ecx,00713BE8
00713B26 . BA F43B7100 mov edx,00713BF4 ; 未注冊版本不可使用本功能。請注冊為正版用戶彪腔!\r注冊后侥锦,您將獲得專業(yè)的技術支持和最新升級版本。
00713B2B . A1 5CC77400 mov eax,dword ptr ds:[0x74C75C]
00713B30 . 8B00 mov eax,dword ptr ds:[eax]
00713B32 . E8 95FED5FF call 004739CC ; 彈窗call
找到關鍵跳德挣,影響關鍵跳的就是[[0x74C0C4]]的值恭垦,這里用了兩層的中括號,是因為[0x74C0C4]先是給了eax格嗅,又取了[eax]的值番挺。這就相當于C語言中的指針,0x74C0C4是一個指針吗浩,取它所指向內(nèi)存的內(nèi)容后建芙,給了eax没隘。然后再把eax看成指針懂扼,取eax所指向的內(nèi)存的內(nèi)容。關鍵就在于[0x74C0C4]的值74FB70,當74FB70為1就是已注冊阀湿,為0就是未注冊赶熟。但是直接把74FB70修改為1后,會發(fā)現(xiàn)不久又變回0了陷嘴。說明程序里還有代碼會每隔一段時間對74FB70進行重新賦值的映砖。
4、對74FB70下硬件寫入斷點灾挨,找到是哪里對74FB70進行重新賦值邑退。
從斷下來的地方向上分析,找到代碼并修改就行了劳澄。