歡迎關注微信公眾號:FSA全堆疊行動 👋
一、場景
專案需要的 adb 工具過期,雖然可以通過修改電腦時間來使用,但這很不方便,于是便有了此文章,
二、實戰
此次所需工具/條件如下:
- 神器 IDA
- 廠商 adb 包
- 懂一點 adb 命令
- 懂一點匯編知識
1、準備環境
【神器 IDA】,這個網上隨便找一下就有了,這里不多贅述,有能力的請支持一下正版,良心軟體,
【廠商 adb 包】是一個 zip 壓縮包,解壓后,只有 3 個檔案:
- adb.exe
- AdbWinApi.dll
- AdbWinUsbApi.dll
在 windows 上,為了方便在 cmd 視窗使用 adb 命令,同時為了不與 AndroidStudio 自帶的 adb 沖突,我將以上 3 個檔案復制到 xxx\Android\Sdk\platform-tools 目錄下進行覆寫,
注意:記得備份好該目錄下原本的 3 個檔案哦
2、尋找切入點
確定好 TV 盒子的 ip 地址,打開 cmd 視窗,使用 adb connect xxx 連接盒子:
C:\Users\GitLqr>adb connect 192.168.0.104
############
這里的 ############ 是廠商 adb 在驗證系統時間過期后輸出的,當然,此時是無法成功連上 TV 盒子的,不過呢,這個字串輸出不就是一個很好的切入點嗎!!接著我們用 IDA-32bit 打開 adb.exe :
注意:使用 IDA 64bit 還是 32bit 是根據具體要逆向的程式而定的,這里的
adb.exe是 32 位程式,所以用的是 IDA-32bit,


選中 adb.exe 檔案后,點 “打開” ,之后一路點 “OK” 和 “Yes”:


注意:IDA 在加載檔案的時候,中途可能會提示一些 Warning 警告,不管它,繼續點 “OK” 或 “Yes”,
當 IDA 加載成功后,就會看到如下界面了:

現在需要找到前面提到的 ############ 字串,通過 “View -> Open subviews ->Strings” 或 按"Shift+F12" 打開字串視窗:

此時,在 IDA 的左側會出現一個 Strings window (字串視窗):

通過快捷鍵 “ctrl + f” 打開搜索欄,輸入 ############ 后回車:

雙擊該搜索結果條目,在 IDA 右側的 IDA View-A 視窗會跳轉到該字串所在的地址處,至此,切入點的指令位置就已經找到了,
3、理清邏輯
在找到切入點之后,接下來就需要理清這段指令的觸發時機了,注意看,在 004C58E9 地址處指令后面有一段藍色字: ; DATA XREF: _adb_commandline+124B,這段藍色字的意思是該指令被 _adb_commandline+124B 處參考,正合我意,我們的目的就是要看,這個指令是在哪里被參考和觸發的,

雙擊藍色字之后,IDA View-A 視窗內容會發現變化,從 Text View 轉變成了 Graph View,記住這個指令塊的地址 loc_40C110:

按下 ctrl 鍵,加滑鼠滾輪,可以縮放這個 Graph View:

沿著 loc_40C110 指令塊頭上的綠色線條,可以找到解決該指令塊的唯一源頭:

從這個圖可以知道,該 loc_40BC0B 指令塊使用了 cmp 匯編指令,比較 2 個值的大小關系,匯編指令 jg 的意思是 有符號大于則跳轉,所以當比較結果大于 0 時,就會跳轉到 loc_40C110 處,即輸出 ############ 字串,否則,往右邊紅色線繼續執行,進入正常的 adb 操作,至此,已經把切入點的觸發邏輯搞清楚了,
3、逆向匯編代碼
在弄清楚觸發邏輯之后,就得考慮破解方案了,我自個想到的有如下幾種破解思路:
- 修改獲取到的時間值(難,要找到獲取時間的地址處)
- 修改比較結果(難,我不知道 ebp、buf、1Fh 都是些啥)
- 修改比較邏輯(易,只需要把
jg改成能執行到紅色線的其它指令即可)
綜上,選用方案 3,因為 JG 意為 有符號大于則跳轉,那么相反的,使用 為 0 則跳轉 的 JZ 或 有符號小于則跳轉 的 JL,都可以達到執行紅色線的目的,這里我選用 JZ 指令,這樣,無論電腦時間如何修改,基本上都不可能觸發,(但是,如果你硬是要抬杠,那就算你說的對)
匯編跳轉指令說明:https://blog.csdn.net/wq57885/article/details/80700032
接下來要真正開始修改指令碼了,先把 Graph View 轉成 Text View,右擊指令塊,點擊 “Text view”:

將游標移動到 jg 指令那行,即 0040BC12:
注意:滑鼠左擊一下,確定你游標就是在那里,

通過 “Edit -> Patch program -> Assemble” 打開 Assemble instruction (匯編指令) 對話框:


直接把 jg 改成 jz ,然后,點擊 “OK”:

此時,你會發現,0040BC12 處的指令成功修改成功了,但還是會有個對話框出來問你,下一行 0x40BC18 處你要不要也改了,因為不需要修改,所以點擊 “Cancel” 或 直接叉掉就行了:

搞定,至此,匯編指令修改成功,
4、匯出成品
不要以為直接 ctrl + s 保存就可以了,到目前為止,我們在 IDA 里所做的一切,都沒有修改到原 adb.exe 檔案,因為這是一個由 IDA 對原程式加載決議后得到的一個 IDA 工程,我們修改的也只是這個 IDA 工程里的代碼,所以,我們還需要把工程進行匯出,不過,IDA 很 dio,通過 “Edit -> Patch program -> Apply patches to input file…”,可以把修改過的匯編碼直接應用到原檔案上:

這里還可以指定應用的地址范圍,不用管,直接點 “OK” 即可:

可能會遇到 “Permission denied” 警告,這是因為 adb 行程正在運行中,只需要把 adb 行程 kill 掉,再重復上述操作即可:

注意:除了用 windows 自帶的任務管理器,還可以使用 adb 命令
adb kill-server來殺掉 adb 行程哦,
應用成功后,再來執行一次 adb 連接命令:
C:\Users\GitLqr>adb kill-server
C:\Users\GitLqr>adb connect 192.168.0.104
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
connected to 192.168.0.104:5555
perfect~
如果文章對您有所幫助, 請不吝點擊關注一下我的微信公眾號:FSA全堆疊行動, 這將是對我最大的激勵. 公眾號不僅有Android技術, 還有iOS, Python等文章, 可能有你想要了解的技能知識點哦~
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/332123.html
標籤:其他
上一篇:個人博客H5,Web端,微信小程式,安卓,iOS詳情
下一篇:Xcode中代碼注釋撰寫小技巧
