很久沒出文章了, 最近因爲在找工做, 因此在面試之餘, 逆向本身常常用到的一款看電視直播的軟件.面試
目標: 去廣告
難度: 一顆星
準備工做
工欲善其事, 必先利其器. 逆向須要的環境和工具這裏很少說.
複製代碼
開始操做
- 經過MonkeyDev把咱們的軟件運行起來, 找到播放界面, 這時能夠看到廣告, 作的很粗糙, 而後經過Debug View Hierarchy功能查看UI, 發現廣告視圖(畫質有點AV湊合看):
- LZMBaseADView經過命名很清晰的知道應該八九不離十就是這個視圖, 那麼咱們試試Hook到初始化方法
- (id)initWithFrame:(struct CGRect)arg1;
有沒有效果.
- 經過實踐發生了一個錯誤. 經過堆棧咱們能夠看到在數組調用插入數據的時候出現了錯誤, 咱們知道OC中的數組不能存放空的對象, 因此報錯就很正常了. 不過不能設置爲nil那麼怎麼作呢?
- 就在我迷茫的時候發現了堆棧中的這個類
LZMAdBaseManager
- 進入到頭文件看看發現都是處理廣告相關的方法, 並且命名也很符合, 沒猜錯應該就是負責管理廣告相關業務的管理類, 因此我以爲試試這個類.
- 由於當前類繼承自根類, 因此我以爲hook
init
方法.原理和上面同樣.
- 運行發現啓動頁廣告也沒有了, 咱們在進入播放界面看看, 能夠看到廣告也不見了~ 到此咱們的任務就完成了.
最後總結
經過對逆向工具的熟練使用, 再根據自己正向開發經驗尋找目標界面和類, 並經過簡單的hook嘗試完成了咱們的目標. 不只增長了對程序的理解, 也能學到他人程序的設計思想, 並且經過逆向咱們也增長了對程序的安全意識.數組