Reveal使用步骤和 破解Revealapp的试用时间限制
下載地址:http://pan.baidu.com/s/1eQstR2M
一.Reveal使用步驟
1.啟動Reveal --> Help --> Show Reveal Library in Finder,拖動添加Reveal.framework到工程中。選中 Copy items into destination group's folder (if needed)以及當前的targets。
展開查看Reveal.framework中所有h文件都正確加入工程中;
確保Summary--> Linked Frameworks and Libraries目錄下,包含以下三個framework
Reveal.Framework
CFNetwork.framework
QuartzCore.framework
CoreGraphics.framework
2.TARGETS中設置命令
TARGETS --> Settings --> Other Linker Flags -->添加命令 -ObjC
3.由于Reveal只支持iOS6,所以程序的最低適配版本要選擇為iOS6.1
Bulid Setting --> iOS Deployment Target -->iOS6.1
4.運行程序,切換到Reveal,左上部分下拉框選擇當前運行的程序就可以操作了。
如果還不行直接去看官網的教程吧!
http://support.revealapp.com/kb/getting-started/integrating-reveal-with-your-ios-app
?
?
?
破解Revealapp的試用時間限制
原文地址:http://jingwei6.me/2014/02/28/reveal_crack.html
Revealapp作為分析iOS app UI結構的利器,還是非常稱手的,89刀的價格也是物有所值。本文分析其試用版時間限制,只是用于學習,如果一直用,還是買個licence支持一下吧。
試用版有30天的時間限制,既然是30天時間限制,肯定每次啟動是要讀當前時間的啰。所以最簡單的hack方法就是修改系統時間。如果這種方法可以接受,就不用往下看了。
如果你的工作嚴重依賴于Calendar,那么修改系統時間的方法就是不可以接受的。下面的追蹤過程包含了對雙精度浮點數在內存中的表示、ObjC對象模型等問題的討論,如果不感興趣可直接跳到文末查看最終的解決方案。
開始的嘗試
用dtruss看了下啟動時調用的syscall,是沒有網絡通訊的,說明app的安裝時間不可能是從網絡讀下來的,那么這個時間肯定是寫在本地的文件系統。
用opensnoop看了下啟動時Reveal讀過的所有文件,沒有值得注意的地方。最后的發現證實這個思路忽略了一個問題,一個app讀的文件并不一定是它自己打開的,可以是進程間通信。
這些簡單的嘗試失敗后,就只能老老實實的分析代碼了。
從關鍵字開始
試用版的Reveal有提醒試用剩余時間的信息在窗口的右上角”Free trial ends in xx days”(我覺得這不是一個好的設計,這句話似乎時刻挑釁著使用者:“來呀,你來hack我呀”)。“trial”是我感興趣的關鍵字,除了在數據段肯定能找到這個關鍵字以外,說不定在ObjC的運行時類型系統中還能有意外的收獲。果真,Reveal沒有對類型信息進行模糊處理,在class-dump生成的頭文件中發現了:
-[IBARegistrationPreferencesViewController messageForTrialDaysRemaining:(long long)arg1]?
從函數名來看它應該就是生成試用剩余時間字符串的。
上GDB,單步跟蹤,
0x000000010008bd34 push rbp?
0x000000010008bd3f move rbx, rdx ; rdx 就是還剩下的試用天數,也就是函數的參數arg1
以此為突破口,發現下面的小段代碼。
0x00000001000872cd call 0x100086ec2?
0x00000001000872d2 mov rcx, rax ; rax中是上面函數返回的已過去的天數?
0x00000001000872d7 mov eax, 0x1e ; 0x1e=30 30天的限制?
0x00000001000872dc sub rax, rcx ; 30減去已經過去的天數的,減出來就是還剩下的天數
再往下走,需要分析的數據不再像是“天數”這樣的整數,而是像軟件安裝日期NSDate這樣的對象,特征不明顯。所以就有必要清楚NSDate這個對象中日期的表示方法。
內存中的NSDate對象
NSDate對象應該有兩個域,第一個“isA”是所有ObjC對象都有的類型指針,指向NSDate類型對象。第二個是個雙精度浮點數,表示從2001年1月1日到現在的時間間隔,單位是秒。
| pointer: isA |
| double: _timeIntervalSinceReferenceDate |
其實isA指針就是NSDate對象的特征,所有的NSDate對象都是以相同的8個字節開始。第二個域是一個浮點數,分兩步把它轉換為一個日期。
第一步,十六進制浮點數轉換為十進制
雙精度浮點數由8個字節構成,1個bit表示符號,11個bit表示指數,剩下的52位用來表示底數。
使用python可以方便的把8字節的十六進制浮點數轉換為十進制數:
struct.unpack('<d','c3b72c7a9ebfb841'.decode('hex'))[0]
在gdb中,可以直接使用命令?
p *(double*)(NSDate指針地址+8)
第二步,秒數轉換為日期
NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:415285808.20822901];?
NSLog(@"\n%@", date);
使用上面的方法,可以在跟蹤匯編代碼的時候檢查內存中的NSDate對象,以及它所表示的日期。(這需要點耐心)
最終,安裝Reveal的時間第一次出現在內存中的位置被找到,這個位置所在的函數顯然負責把存在文件某處的一個magic number轉換為軟件安裝日期。
但是意料之外的是,這個想像中的magic number并不magic,它僅僅是存在user default的plist文件中的一項,而且就是安裝日期的雙精度浮點數的十六進制表示。
結論
所以,要想永久試用Reveal,只需要打開
~/Library/Preferences/com.ittybittyapps.Reveal.plist
把IBAApplicationPersistenceData這一項刪除就是了。
總結
以上是生活随笔為你收集整理的Reveal使用步骤和 破解Revealapp的试用时间限制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringMVC _Controlle
- 下一篇: 多比(SVG/VML)图形控件多比(SV