[原創]IPhone 平臺下破解:Crack Firewall ip

仙果發表於2010-03-30
PS:仙果代朋友而發
目錄:
0x1.題記
0x2.除錯環境及工具
0x3.破解過程
0x4.結語

0x1.題記
手上拿到一臺港臺行貨的IPhone,隨即開始擺弄,進過一系列的越獄等工作,終於可以把玩。
由於大意電話沒有通過wifi上網而是通過GPRS,又沒有GPRS流量,所以
白白浪費了一些話費.於是萌生了安裝防火牆的念頭.
來到Rock App的主頁,很快就發現了Firewall ip這款軟體,評價還不錯,
於是就裝到了電話上.迅速瀏覽下程式的設定頁面,發現”block if not on
wifi”這項功能正是我需要的,呵呵.
由於這是Rock App上面的一個付費軟體,只能試用10天,程式啟動時也會顯示
“Trial expires x day”. 恩,這個嘛.........抄傢伙:

0x2.除錯環境及工具
1.Firewall ip 1.3.9
2.IDA pro 5.5
3.010 Editor
4.vc 2008
5.windows 7_En

0x3.破解過程
一.推測驗證:程式如何計算試用期剩於天數?
當然,我們的電話還沒有先進到自己去測某個分子的原子週期來計算距離
1900年已經過去多久,那麼一般辦法有兩種:通過網路到指定伺服器或是本地取
得當前日期,取得日期後與儲存在“某個地方”的安裝日期做比較。驗證一下,
在“設定->通用->日期”與時間選單裡,將日期調後一天,重新執行軟體,發
現原來顯示還有10天試用期,現在已經變成了還有11天。那麼證明程式是通
過本地來取得日期的。那麼這樣就可以簡單達到延長試用期的目的了,如果我
告訴你文章這裡就結束了,你會鄙視我的,呵呵,繼續。

二. 程式通過呼叫什麼函式取得當前日期?
對iphone SDK 我的前置知識為零,我更不清楚系統層級別的一些函式。那麼又只
有猜測了,通過iphone SDK某個函式取得當前日期,那麼函式名字裡面得有個關鍵
字“date”吧,(啥,這也猜不到,-_-#),用ida 將主程式FirewallGUI載入(此處
省去將程式拷到windows主機N個步驟),在 ida 匯入函式表裡面找到了這個函式,
如圖:
[原創]IPhone 平臺下破解:Crack Firewall ip

然後檢視了下這個函式的引用情況,如圖:
[原創]IPhone 平臺下破解:Crack Firewall ip

還好呼叫的情況不是很複雜,檢視下反彙編程式碼:如圖:
[原創]IPhone 平臺下破解:Crack Firewall ip

黃色高亮的那一行就是引用NSDate的地方,繼續往下看,看到什麼問題沒有?
86400.0這個數字比較可疑,這是一個程式中使用的常量,什麼常量呢?(作者身高
的浮點數,薪水......), 3600 X 24 = 86400,就是一天有24個小時有86400秒鐘。
FLDD D7,=86400.0
FDIVD D6,D5,D7

結合這兩條指令來看,第一條指令是將86400.0賦給D7,下一條指令是用D5的值除
以D7然後將結果儲存到D6中,小學生現在都清楚了,它是在計算有多少天。那麼修
改這裡就可以達到我們的目的了,我們雖然尚不清楚被除數D5怎麼得來的,但是我
可以修改86400這個常量,如果我把86400修改為 86400 X 2 = 172800 的話,那
麼在程式看來,要過172800秒才算是過一天,86400 X 365,86400 X 365 X 20(二十
年又是一好漢),86400 X 2012 (-_-#)....

三.修改測試。
  86400.0 因該是浮點數,結合指令來看好像是雙精度浮點數,ida 裡面搜尋到
86400.0是這樣儲存的
          
00 00 00 00 00 18 F5 40

  我想把它修改為 86400 X 2 = 172800 ,但是怎麼修改呢?不知道怎麼轉換的。
只有用vc 2008來轉換了,用到了下面的幾行程式碼

#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
double i= 172800; //將172800賦給雙精度變數i
_asm
{
 
lea eax,i //將變數i在記憶體中地址賦給eax
int 3 //中斷斷點,程式斷下來後,在記憶體中檢視浮點數儲存形式
}
return 0;
}

如圖
[原創]IPhone 平臺下破解:Crack Firewall ip

 藍色部就是172800雙精度浮點在記憶體中的“樣子”了。然後用010 Editor
搜尋00 00 00 00 00 18 F5 40 然後將其替換為00 00 00 00 00 18 05 41。
 
 修改完成後,將程式傳回電話,然後執行程式,各位看官因該還記得開始的時候,
我將日期調後了一天,顯示還有11天過期,執行程式後提示變回了還有10天過期,
再往後調一天,也就是總共把日期往後調整了兩天,現在程式就顯示還有11天過期
了,看來前面的推測是正確的了。現在就可以將這個數字改大一點然後一直試用了,
需要注意的是程式傳回去的時候需要執行 chmod +x  命令。

0x4 結語
Question for U :)
a.程式將安裝日期放在那裡的?
b.如果將86400改為零的話....
本文沒有技術含量權當拋磚引玉,高手一笑而過。
crack_firewall_ip.pdf
上傳的附件:

相關文章