2014年4月21日 星期一

oCam v13.0 - 移除強制更新 via Ollydbg


開始之前請先參考網誌上的這篇:《oCam - 阻擋強制更新 》
本篇文章將會以《上一篇》代表上面這個連結的文章內容~

有時候舊的電腦不一定會想要安裝其他防火牆工具,但是 Win 7 之前的系統防火牆又沒提供阻擋對外的功能,這時候就需要直接對 exe 檔下手,讓其跳過檢查更新程序了。

底下以 Ollydbg 為例,說明如何找到 oCam 上網檢查和強制更新的部分。

 ※    注  意    ※
 ※ 本文僅供學術交流使用 ※
 ※ 嚴禁轉載或作其他用途 ※
 ※ 否則後果與責任請自負 ※




往下拉到正文開始處即代表同意上述條款

=====================  防雷線  =====================









































=====================  正文開始 =====================

其實只要有寫過程式,大概可以想像這部分的運作原理:
  1. 檢查是否有新版本 (Yes => 2 , No => 4)
  2. 要求程式更新
  3. 結束目前的程式
  4. 什麼事都沒有,使用者可以繼續正常使用
 因此,我們可以從跳出要求更新的視窗下手,跳過後續一連串的動作
  1. 檢查是否有新版本 ( Yes => 2 , No => 4)
  2. 要求程式更新 - Skip
  3. 結束目前的程式 - Skip
  4. 什麼事都沒有,使用者可以繼續正常使用

不過在 oCam 的狀況稍有不同,參考上一篇文章所述,檔案下載完之後才會跳出視窗:
  1. 檢查是否有新版本 ( Yes => 2 , No => 6 )
  2. 開始下載檔案
  3. 使用者繼續使用,檔案下載完成後 => 4
  4. 要求程式更新
  5. 結束目前程式
  6. 什麼事都沒有,使用者可以繼續正常使用
 因此若要阻擋程式下載這個安裝檔,無法直接從「跳出視窗」的部分著手,必須要從更早的位置下手,也就是不讓期檢查更新,或者讓 1 的判斷無論 Yes 或者 No 都跳到 6 :
  1. 檢查是否有新版本 ( Yes => 6 , No => 6 )
  2. 開始下載檔案
  3. 使用者繼續使用,檔案下載完成後 => 4
  4. 要求程式更新
  5. 結束目前程式
  6. 什麼事都沒有,使用者可以繼續正常使用

如同 Android 要 Decompile 一樣,從字串尋找是最有效率的。
首先我們知道 oCam 會跳出這個視窗要求更新:


 但是記得, oCam 可以透過 language file 翻譯,所以要查看一下語系檔案:


B 處就表示該文字所代表的名稱「UpdateNewVersion」。

底下會用到不少 Opcode , 可以到這兩個網站參考:
http://ref.x86asm.net/coder32.html
http://www.mathemainzel.info/files/x86asmref.html

來到 Ollydbg ,在空白處點選右鍵 => search for => All referenced strings


接著 Ctrl + F 尋找 UpdateNewVersion


在找到的地方點兩下,即可跳到出現的位置 (我將其標示為紅色),而往上找可以找到一個 JNE 的 opcode , 這表示當條件不相同時,跳到指定位址 ( 0075E36F )
JNE => Jump Not Equal


可以看到,如果這個 Jump 被 taken 時,會跳到到底下,而 UpdateNewVersion 就會被跳過,因此這邊可以修改這個 Jump 的條件,讓他一定會跳過這個區塊。

這邊可以利用 JMP 的 opcode , 他是無條件跳到指定位置。

修改步驟要注意,現在看到的並非執行檔內容,比較接近在 Debug 執行階段,在記憶體中的狀態,因此要先將目標移至 exe 檔:

點選該行 => 右鍵 => Go to => Excutable file



接著出現的地方才是這個 opcode 實際存在 exe 檔案中的位置:


點選兩下,將 JNE 修改為 JMP 即可,底下用 gif 表示這一連串的動作。


但這樣只是不跳出這個對話框,實際檢查之後發現,他還是會下載安裝檔到電腦中 ,為了阻擋他下載檔案,想出了一個辦法:

既然要先連上伺服器 (參考上一篇文章,IP : 222.231.49.108  的那台)取得最新版本和下載網址,那麼只要不讓程式連上,應該就可以達成目的了。

所以接下來要做的動作是 : 修改網址

記得之前 Wireshark 抓到的 request :


這個網址的後面是 /update/ohupdate.php,因此同樣在字串處搜尋 :


可以找到 A , B 兩個地方,往前看,A 的 code 是 PUSH xxxxx ; B 的是 UNICODE xxxx。
我們現在是要修改字串, PUSH 是表示將字串放到變數中,因此要找的目標是 B。

在 B 的位置點兩下,會跳到那個位置,可以看的出來有好幾行都是網址的內容,全部選起來之後一樣點選右鍵到 Executable file:


接著看到的內容會和原本的有差距,但這只是解釋方式的不同,不用擔心,在保持選取區的狀況下按右鍵選擇 Edit => Binary Edit :

 這邊可以透過右鍵選單中的 Text => ASCII... 切換顯示方式,就可以看到這串網址了
出現的編輯表格有四欄, ASCII , UTF-8 , UNICODE , HEX。
還記得當初在找到串的時候前面是寫 UNICODE 吧,所以這邊要以 UNICODE 來修改:


只要讓網址連不上,所以這邊將 ohsoft.net 改成 ohsoft_net , 即可。
 底下一樣透過 gif說明這一連串的動作:


最後要注意,修改完後要儲存回檔案中,所以要點右鍵,選擇 Save file...
就大功告成 (要改的東西都改完之後一次儲存即可) 。


修改好的 oCam.exe 就可以直接取代原本的檔案使用了。

另外未來要修改其實不需要都開 Ollydbg 做這個動作,只要記得位置在哪,就可以直接使用 Hex Editor 修改即可,因為 opcode 其實都是 byte 的數值代表的動作,舉例來說,我們這邊修改了兩個東西:

 位址: 0x0035D722 改成 EB
 PS : JNE 的 opcode 是 75 , JMP 是 EB , 可以在上述兩個網站查詢。

位址: 0x0035AC52 改成 5F
這個是把原本網址 "." unicode 的 2E 00 , 改成 "_" 的 5F 00 , 但因為 00 不變
所以只有改到 5F

之後透過 Hex Editor 找到相對的位置修改後儲存也有同樣的效果。

推薦 HexEditor : HxD (HxDan) 阿榮版下載
或者 Notepad++ 的 Hex Editor 套件也可以






1 則留言:

  1. 因為我只有在DOS時代常玩Debug改Code
    進入windows時代就沒研究啦
    一直想改掉Ocam討厭的自動更新
    但找不到點不知從何下手
    感謝你解決了我最不爽的問題

    回覆刪除