SonoiQ 手持超聲波 App
逆向工程完整報告

這是一份寫給沒有技術背景、沒有醫學背景讀者的報告:從「什麼是超聲波」開始,逐層拆解一部醫療設備 App 的每個零件,直到你看得懂它的授權系統、隱藏功能與安全問題。

樣本 299 MB 2,182 個檔案 6,025 個 Java 檔 11,997 個 smali 檔 僅 arm64 2026-09-03

重點結論(給趕時間的讀者)

  1. 功能鎖可以被繞過:付費才能啟用的高階功能,其「鑰匙」是用公開公式從探頭序號計算出來的,鑰匙本身並不保密。
  2. 一個對外接口沒有安裝防護:同一台設備上的任何應用程式,都可以透過 ThirdPartyManageActivity 借用 SonoiQ 儲存影像,病人資料有外洩風險。
  3. 與醫院系統的加密連線沒有驗證對方身份:加密有開啟,但「對方是否真的是醫院伺服器」的檢查被關閉了。
  4. 出廠密碼直接寫死在程式碼中:管理員帳號 Admin 的密碼是 12345678,使用已過時的無鹽 MD5 方式儲存。
  5. 正面評價:資料備份功能已關閉(病歷不會自動流出設備);在本次檢查範圍內,未發現木馬或間諜行為。

注意:以上結論全部來自「靜態分析」(閱讀程式碼後推理),沒有連接任何設備做動態驗證。部分結論標示了信心等級,請以「推論」的態度閱讀。

繼續閱讀:完整技術參考(28 章 · 全部原始證據 · 面向技術讀者)→

閱讀指南:這份報告如何使用

  1. 不需要任何背景知識:每個專業術語在第一次出現時,都會就地附上「人話」解釋。詳細技術資料收在灰色區塊中,可以完全跳過。
  2. 用比喻理解硬體:灰色虛線框「比喻」區塊,用日常事物解釋硬體概念。
  3. 安全發現有顏色標籤:紅色 = 高風險(應優先處理)、黃色 = 中風險(應該處理)、綠色 = 低風險(知道即可)。每張卡片都附「如何修復」與「信心等級」。
  4. 第六部分是術語詞典,但主要術語在正文中已經就地解釋過,詞典是輔助查詢。
PART 1

SonoiQ 是什麼?

1.1 先從超聲波本身講起

你可能在醫院見過這樣的畫面:醫生手持一個像滑鼠大小的「探頭」,在病人皮膚上滑動,旁邊螢幕立刻出現黑白影像。這就是超聲波檢查(也稱為超音波檢查)。

人話

超聲波 = 用「人類聽不見的高頻聲音」來「觀看」人體內部。探頭發出聲波,聲波碰到內臟會反彈回來,探頭接收「回聲」,電腦再把回聲繪製成影像。原理與蝙蝠在夜間飛行相同,蝙蝠用回聲「看見」物體,醫生用超聲波「看見」內臟。

超聲波檢查之所以普及,是因為它不使用輻射(不像 X 光或電腦斷層),對孕婦與胎兒也相對安全,因此產科檢查幾乎都以超聲波為主。

傳統的超聲波主機,體積相當於一台推車。SonoiQ 做的事情相同,但縮小成一支探頭 + 一部 Android 平板或手機:探頭負責發出與接收聲波,平板負責顯示影像與操作介面。

比喻

探頭 = 一支「聲波手電筒」;平板上的 App = 手電筒照到內容的「即時畫布」。

1.2 SonoiQ App 是什麼

SonoiQ(本報告研究的版本 2.2.15,程式識別碼 com.SonoiQ.uhandprobe)是安裝在 Android 設備上的應用程式。它負責:

人話 — 一個重要背景

這個 App 不是只賣一個品牌。我們發現程式碼中預設了 18 個 OEM 身份編號(OEM = 代工貼牌:由一家工廠製造核心,其他品牌貼上自己的名稱銷售,類似手機界的「公版機」)。原始品牌是 Youkey,其他編號對應 ESAOTE、BD、SonoStar 等貼牌客戶。

1.3 什麼是「APK」?

人話

APK 是 Android 應用程式的「行李箱」格式。一個 App 的所有內容,程式碼、圖片、聲音、甚至探頭韌體(硬體內部的程式),全部壓縮在一個以 .apk 結尾的檔案中。本報告研究的 APK 大小為 299 MB(約等於三部高畫質電影的檔案量),解壓縮後有 2,182 個檔案

PART 2

我們做了什麼?(逆向工程=解剖)

2.1 什麼是逆向工程

軟體出廠時,原始程式碼會先被轉換成「機器讀得懂、人類看不懂」的形式(稱為「編譯」)。逆向工程是使用專門工具,把這種形式「還原」回接近人類可讀的程式碼,再研究其運作原理。

比喻

逆向工程 = 將一個已經烤好的蛋糕,逐層拆解分析原料與作法。目的不是偷食譜,而是研究「裡面到底放了什麼」。

研究範圍說明

本次研究是「離線靜態分析」:只分析使用者自己持有的 APK 檔案,沒有連接任何設備、沒有入侵任何系統、沒有修改任何市售產品。換句話說,就像拆解自己買回來的電器,這是本次報告的工作範圍。任何超出此範圍的用途,都不在本報告的內容之列。範圍細節記錄在專案的 scope.md 檔案中。

2.2 靜態分析與動態分析的分別

資安研究通常分兩種做法,本報告只做第一種:

因此,本報告中的每個結論都標示了「信心等級」,高代表程式碼證據非常直接,中代表有推論成分,並註明哪些部分需要動態驗證。

2.3 使用的工具

表 1:逆向工具一覽
工具功能白話比喻
jadx將程式碼還原成 Java 語言解凍機,把急凍蛋糕解凍
apktool將 APK 完全解包(含資源與圖片)開箱工具,把所有物品逐件取出
radare2 / rabin2分析最深層的機器碼顯微鏡,觀察肉眼看不到的細節
strings / xxd在檔案中搜尋文字線索、檢視原始資料放大鏡與濾網

2.4 解剖流程(六個步驟)

登記樣本

記錄檔案指紋(SHA-256,一條 64 字元的唯一驗證碼),確保整個研究過程對象一致。

盤點資產

解壓縮並列出全部 2,182 個檔案:28 個引擎程式、77 個探頭型號資料、13 個 AI 模型……

還原程式碼

jadx 還原出 6,025 個 Java 檔案(其中約 1,050 個是廠商自行撰寫,其餘是公開工具庫);中層格式 smali 有 11,997 個。

追蹤資料流向

從「探頭讀取影像」開始,一路追蹤到「畫面顯示」,畫出完整的資料路線圖。

解碼授權系統

研究它如何鎖住「需要付費購買的功能」,找出鎖的構造與繞過條件。

安全檢查

以十六項檢查清單逐項檢視:加密、密碼、外部接口……逐項評分。

PART 3

App 內部結構 — 六層全景

整個系統可以想像成一棟「六層樓」。從底層(硬體)到頂層(你看到的畫面):

第 6 層 · 畫面與操作登入畫面 → 掃描畫面 → 18 種機型介面 → 人用/獸醫模式(0–6 級)UI / ANDROID
▲ 指令與影像在此進出 ▲
第 5 層 · 業務核心(Java 程式碼)Ultrasys 總指揮 · AI 輔助功能十六類 · 測量工具 · DICOM 醫院對接 · 病歷資料庫JAVA
▲ 對講機通道 ▲
第 4 層 · 訊息泵(kernel.MainHandler)一條不斷輪詢的「對講機」,底層一有訊息,立刻廣播給上層HANDLER
▲ 原生引擎(機器碼) ▲
第 3 層 · 原生引擎(native 程式庫)libdoppler 超聲大腦(15.4 MB、381 個對外窗口)· PyTorch/TFLite AI 推論 · Vosk 語音 · FFmpeg 錄影 · 完整 DICOM 網路NATIVE / .SO
▲ USB / Wi-Fi ▲
第 2 層 · 傳輸與韌體Cypress USB 晶片(VID 0x04B4)· TI CC32xx Wi-Fi 晶片 · FPGA 可程式化電路 · 探頭描述庫(77 型號)USB / WI-FI / FPGA
▲ 聲波送出、回聲返回 ▲
第 1 層 · 硬體壓電陣元(16/32 通道)發出與接收聲波 · Efinix Trion T55F324 FPGA 執行「波束形成」FPGA / PIEZO

3.1 每一層的白話解釋

第 1 層:探頭硬體

探頭內部有兩顆關鍵晶片,其中最重要的是 FPGA:

人話 — FPGA 是什麼

FPGA = 一顆「可以重新接線」的萬能電路晶片。一般晶片出廠時功能就已固定;FPGA 則可以在每次開機時載入一份「接線圖」,改變自己的功能。SonoiQ 使用的是 Efinix Trion T55F324 型號,我們在韌體檔案的「出生證明」(明文註解)中找到它的完整身份,還包括專案代號 YK2100

人話 — 波束形成是什麼

「波束形成」= 用數學方法控制 16 或 32 個微小發聲單元(壓電陣元)的發聲時間差,讓聲波像探照燈一樣聚焦到想觀察的方向。這是超聲波成像的核心技術,沒有它,就無法把聲波「瞄準」到身體深處。

第 2 層:連接方式與 FPGA 的「貨架」

App 支援七種連接方式(有線 USB、無線 Wi-Fi、模擬模式等)。我們逆向出 USB 通訊的完整地圖:影像資料存放在 FPGA 內三個固定地址(0x200000x400000x60000),App 定時到這些地址「取貨」。

比喻

FPGA 內部就像一個倉庫,有三個固定貨架:B 貨架放黑白影像、H.264 貨架放壓縮影片、T 貨架放血流/運動影像。App 每隔一小段時間就去檢查貨架有沒有新貨,有就搬走。

技術細節(可跳過)

USB VID 0x04B4 = Cypress Semiconductor(USB 晶片製造商),資料通道為 EP6 bulk,FIFO 緩衝 2,048 字節。三個貨架位:B 影像 @0x20000、H.264 編碼流 @0x40000、T/M 影像 @0x60000。B 幀單次讀取量為 131,072 字節(128 KB);幀首字節為負值時代表影像左右相反,需要反轉處理。Wi-Fi 探頭使用 UDP 端口 8081 通訊,指令封包以 0xFE 開頭、0xFF 結尾,而檢查結果顯示,封包沒有任何防錯驗證碼(詳見第五部分 S-16)。

第 3 層:原生引擎

「原生引擎」是指用更底層語言(C/C++)撰寫的高效能程式(副檔名 .so,等同 Windows 的 .dll)。其中最重要的是名為 libdoppler 的檔案(15.4 MB):

比喻

libdoppler = 這個 App 的「大腦皮層」。你看到的每一幀超聲影像、每一次血流測量,都是它在幕後計算的成果。它有 381 個對外窗口(技術上稱為 JNI 導出函數),我們逐一清點。它還內建了完整的「醫院系統翻譯官」(DICOM 網路功能)。

第 4 層:訊息泵

底層引擎與上層介面之間,靠一條「對講機頻道」溝通。我們把這條頻道的原始機器碼完整還原,確認了便條的格式:

人話

底層會產生一疊「便條」,上層每秒輪流查看有沒有新便條。每張便條固定 16 字節,記錄三個數字:what(發生什麼事,32 位元)、arg1(第一個相關數值,32 位元)、arg2(第二個相關數值,64 位元)。例如「影像已就緒」「按鍵被按下」等事件,都會以這種便條形式傳遞(此處僅為格式說明,非實際事件代碼)。

這個發現的實用價值:將來可以使用 Frida 工具(一種動態攔截工具),在 App 運行時即時讀取這些便條,觀察底層引擎實際在傳遞什麼訊息。

第 5 層:業務核心

這一層由 Java 撰寫,像一間「辦公室」:名為 Ultrasys 的總指揮協調一切;另有十六類 AI 輔助功能(膀胱、心臟射血分數、肺部 B 線、甲狀腺、多囊卵巢、乳腺、皮膚、靜脈曲張、頸動脈等)。病人資料存放在三個 SQLite 資料庫中(SQLite 是一種輕量級資料庫格式,等同 App 內建的「檔案櫃」)。

第 6 層:畫面

開機後首先看到登入畫面。我們發現出廠預設密碼是「Admin / 12345678」,且密碼以過時的無鹽 MD5 方式儲存,詳細說明見第五部分 S-09。

PART 4

五個重要發現

發現一

功能鎖的「鑰匙配方」寫在門牌上

付費高階功能的授權碼,是用公開公式從探頭序號算出來的,鎖的設計從一開始就不保密。

超聲設備業界有個常見的商業模式:硬體完全相同,軟體功能分級販售。SonoiQ 將「Color 彩色血流」、「PW 血流測速」、「DICOM 醫院對接」等功能,以授權碼鎖定;授權碼存放在探頭硬體內部的一顆小晶片(EEPROM,斷電後仍會記住資料的記憶體)中。

我們把這套鎖的構造完全拆解。驗證流程是:

授權驗證流程(事實)

① 讀取探頭序號(SN)→ ② 將序號代入一個 hash 公式(hash=單向指紋計算,見詞典)→ ③ 得到一組數字 → ④ 與 EEPROM 中儲存的授權碼比對 → ⑤ 相同則開放功能,不同則鎖住。

關鍵問題在於:程式一共使用了六種 hash 公式,全部是數十年來公開的教科書算法DJB2(對應 B 模式)、BKDR(Color)、FNV(PW)、BP(DICOM)、JS(人/獸醫)、DEK(使用時間)。我們甚至以反組譯確認了公式的實際參數(例如 DJB2 的起始值 5381)。

也就是說:任何取得探頭序號的人,用十行程式碼就能自行計算出正確的授權碼。

比喻

這套鎖的設計,等於屋主把鑰匙的配方寫在門牌上。門牌(探頭序號)公開,配方(hash 公式)是教科書內容,而且還有三個「繞過條件」:某一款探頭型號直接跳過驗證、一個「萬能品牌碼 255」對任何品牌都放行、新探頭序號首次使用時系統會自動寫入全部功能的授權。

技術細節(可跳過)

S 系列探頭授權儲存於 EEPROM 位址表:B @28288、PW @28240、Color @28256、DICOM @28224、人/獸醫 @28308、OEM 品牌 ID @28312;R 系列則儲存於 SD 卡區塊 2–12。反組譯證據:DJB2 起始值 0x1505(=5381)、每步乘以 33;FNV 使用乘法加 XOR;BKDR 使用乘法加加法。繞過條件:HSUsbProbeCh16.VerifyAuth() 硬編碼回傳 true;GetOEMAuth(255) 一律放行;序號前兩字節為零且授權碼為零時,自動寫入完整授權。

發現二

隱藏功能比說明書多得多

至少十一項未公開的功能,包括「按使用時間收費」的租賃模式與 RF 原始資料的工程模式。
  • 租賃模式:程式碼包含「使用時間/次數授權」,類似影印機租賃,探頭可以按使用量計費(使用第四種公式 DEK;檢查點在最深層引擎中,是否真的啟動需動態驗證)。
  • 獸醫七級:不只是「人用/獸用」兩種,實際支援 0–6 共七個獸醫等級。
  • RF 原始資料採集:可取得未加工的「生肉級」回聲資料(單幀最多約 2 MB),研究與工程用途。
  • FPGA 現場升級:將新韌體檔案放入指定資料夾,App 下次啟動時自動更新探頭「腦筋」。
  • 一探頭多機:支援多台設備同時觀看同一探頭(教學用途)。
  • 模擬模式:沒有探頭也能示範操作(畫面播放模擬資料)。
  • 第三方嵌入:其他 App 可以呼叫超聲功能(存在安全問題,見第五部分 S-14)。
發現三

一支探頭家族:77 個型號+13 個 AI 模型

APK 內藏著整條產品線的「全家福」:77 種探頭參數、13 個人工智慧模型、40 種以上的檢查模式。

一個壓縮檔(PID03.zip,檔案大小 140.8 MB)裝著 77 個探頭型號的完整參數,凸陣(腹部)、線陣(血管/甲狀腺)、相位陣列(心臟)、腔內探頭(婦科)……每個型號都有一份約二十萬字節的「出生證明」,描述其發聲特性與成像參數。

同一壓縮檔內還有 13 個 AI 模型檔案(解壓縮後合計約 165 MB)。檔名帶有耐人尋味的線索:例如疑似訓練樣本數量(n7000)與輸入尺寸(256x192)。請注意:這些是從檔名推測的線索,並非訓練資料的證明。其中包含一個「乳腺影像分割」模型(23.9 MB)。

此外,程式支援 40 種以上的檢查模式,包括眼科、前列腺、睪丸、經顱(檢測腦部血流)等並非每台設備都有的模式。

發現四

硬體身份完整曝光

FPGA 晶片型號、Wi-Fi 晶片型號、檔案中殘留的開發路徑、品牌真實身份,全部從檔案「出生證明」中找到。
表 2:硬體身份一覽
問題答案證據
FPGA 是哪家廠商?Efinix Trion T55F324韌體檔案的明文註解
Wi-Fi 晶片?TI CC3220R / CC3235S韌體+啟動向量表
USB 晶片?Cypress(VID 0x04B4)程式碼常數
真正的品牌?Youkey(專案代號 YK2100)FPGA 專案路徑+OEM 清單
殘留的開發路徑?D:\Project\FPGA\YK2100_FPGA_T55_newRBF 檔案註解殘留

最後一列的 Windows 路徑,是工程師在打包韌體時不小心留在檔案中的痕跡,這類「指紋」在逆向工程中很有價值,可用於確認開發環境與內部專案命名。

發現五

十六類 AI 輔助功能由真實模型驅動

約 165 MB 的真實神經網路模型支撐這些功能,但「模型存在」不等於「臨床驗證」。
重要提醒:模型檔案存在,只能證明「程式有能力執行這類分析」,不代表準確率、臨床驗證或監管機關核准,更不代表可以獨立作為診斷依據。AI 結果只能作為醫生的輔助工具,最終判斷必須由專業醫師負責。
表 3:AI 模型清單(已實測存在)
模型大小用途(EF=射血分數,心臟每次搏動的泵血比例;B 線=肺部積液跡象;PCOS=多囊卵巢症候群)
ResUNet_Bladder23.9 MB膀胱自動量測體積
breast_lite23.9 MB乳腺影像分割
Carotid v&l17.7 MB頸動脈自動定位
skin_segment17.5 MB皮膚層分割
cardiac_ef13.8 MB心臟射血分數計算
lung_bline13.4 MB肺部 B 線檢測
ob_hc/thyroid/varicosity/pcos 等每個 4.6–7.9 MB產科頭圍、甲狀腺、靜脈曲張、多囊卵巢
PART 5

安全報告卡 — 十六項檢查結果

我們以十六項清單逐項檢查,以下是最重要的五項(完整十六項見技術文件)。每張卡片包含:觀察到的證據、影響、修復建議、信心等級。

信心等級說明:「高」代表程式碼證據直接明確;「中」代表包含推論成分;未經動態驗證的部分會明確標示。

高風險 S-14

對外接口沒有防護:任何 App 都能借用 SonoiQ 存取影像與病人資料

觀察到的證據:App 有一個對外開放的「接待處」(技術上稱為 exported Activity:意即「允許其他應用程式啟動」的活動介面,名稱是 ThirdPartyManageActivity)。同一台設備上的任何應用程式都可以啟動它,無需任何身份驗證

影響(推論):惡意 App 可以將假病人資料寫入病歷資料庫;可以指定一個資料夾,讓超聲影像與 PDF 報告自動複製過去(包含病人姓名等私隱資料);甚至可以強制 App 崩潰。

修復建議:① 關閉對外開放(設定 exported="false");② 加入簽章等級權限(只允許相同簽章的 App 呼叫);③ 驗證呼叫者身份;④ 限制輸出路徑為白名單。
信心:高(程式碼證據充分)|未做動態重現
技術細節

com.Com.handprobe.ThirdPartyManageActivity(manifest 中 exported=true,無權限保護)· 輸入參數:PATIENTID/NAME/GENDER/AGE/SAVEIMG_PATH/EXPORT_MODE · 輸出方式:將影像 PNG+PDF 複製到指定路徑,或經 IMG_PATH 回傳絕對路徑。

中風險 S-10

功能授權鎖可被完整繞過

觀察到的證據:授權碼=以公開 hash 公式(DJB2/BKDR/FNV/BP/JS/DEK)對探頭序號計算;寫入通道(USB 廠商專用指令 24)沒有簽章、沒有加密;另存在多個繞過條件(ch16 型號驗證硬編碼放行、OEM 萬能碼 255、序號歸零時自動授權)。

影響(推論):有能力接觸硬體的人,可自行計算並寫入授權碼,解鎖全部高階功能(Color/PW/DICOM)。這屬於商業模式風險,廠商依賴功能分級收費,但這把鎖本身沒有保密性。

修復建議:① 改用非對稱簽章(RSA/ECDSA):廠商以私鑰簽署授權,設備以公鑰驗證;② 加入挑戰—回應機制防止重放;③ 每台設備使用唯一密鑰。
信心:高(公式已反組譯確認)|未在實機驗證寫入
中風險 S-15

與醫院系統的連線:有加密,但沒有「驗明正身」

觀察到的證據:App 具備「醫院資訊系統(HIS)對接」功能。檢查發現其加密連線的身份驗證被完全關閉,程式不會檢查「對方是否真的是醫院伺服器」。簽名使用 SHA-1+Base64(Base64 只是編碼方式,不是加密;SHA-1 已被證實存在碰撞攻擊而過時),且簽名使用的時間戳是寫死的(不是即時時間)。

影響(推論):在不安全的網路(例如開放 Wi-Fi)中,攻擊者可以偽裝成醫院伺服器,攔截醫院帳號密碼。

修復建議:① 恢復證書驗證(不要留空實作);② 時間戳改用即時值;③ 簽名算法升級為 SHA-256;④ 固定醫院伺服器證書(憑證釘紮)。
信心:高(程式碼直接顯示驗證為空)|未做中間人實測
技術細節

HttpProtocol_hle:checkServerTrusted() 空實作+hostnameVerifier 恆回傳 true+SHA-1+Base64+硬編碼時間戳。

中風險 S-09

出廠密碼寫死在程式碼中

觀察到的證據:登入畫面的出廠帳戶是 Admin/12345678,直接寫在程式碼中;密碼以「無鹽 MD5」儲存(「無鹽」=沒有加入隨機調味料,相同密碼會產生相同指紋,容易以預先計算好的對照表反查);另有一個空密碼的「緊急」帳戶。

影響(推論):任何能實體接觸設備的人,都可以用已知的預設密碼登入。好消息是:App 已關閉資料備份(allowBackup=false),病歷不會被 Android 系統自動備份出去。

修復建議:① 首次登入強制更換密碼;② 密碼改用 bcrypt/argon2(刻意設計為運算緩慢的 hash,難以暴力破解);③ 移除或停用空密碼的緊急帳戶,改為有稽核紀錄的緊急流程。
信心:高(明文可見於 SplashActivity 原始碼)|未實測登入流程
低風險 S-16

探頭無線通訊沒有防錯機制

觀察到的證據:Wi-Fi 探頭的通訊協定中,檢查函數是「空殼」,收到的資料沒有驗證碼(checksum;checksum 是附加在資料後方的一小段檢查值,用於偵測資料是否在傳輸中損壞或被竄改)。

影響(待動態驗證):靜態分析只能證明「沒有防錯機制」,不能證明可以遠端注入指令或竄改影像。要判斷實際影響,需要動態測試:探頭 Wi-Fi 的有效範圍(通常很近)、封包注入的可行性、影像完整性對醫療安全的影響。

修復建議:① 指令封包加入 CRC/checksum;② 影像串流加入序號與完整性檢查;③ 在硬體能力允許下考慮加密。
信心:中(checksum 缺失已確認)|攻擊可行性未驗證

5.1 正面觀察(本次檢查範圍內)

PART 6

術語詞典(白話版)

APKAndroid 應用程式安裝檔把整個 App 壓縮成一個檔案的格式,等同 iPhone 的 .ipa。
checksum檢查碼附加在資料後方的一小段數值,用來偵測資料在傳輸中是否損壞或被竄改。
DICOM醫學影像通訊標準醫院系統之間的「通用語言」:影像、病人資料、檢查結果都用這個標準傳送。支援它,就能連接醫院的 PACS 影像存檔系統。
DSP數位訊號處理用數學即時處理聲波與影像訊號的技術,是超聲波成像的核心。
EEPROM可重寫的小型記憶體可保存少量資料、斷電也不遺失的晶片,探頭用它記錄「購買了哪些功能」。
exported Activity對外開放的活動介面Android 中允許其他應用程式啟動的畫面。若無權限保護,等於任何人(任何 App)都可以呼叫。
FPGA可程式化邏輯晶片「可以重新接線」的萬能晶片,開機時載入接線圖即可改變功能。SonoiQ 使用 Efinix Trion T55。
Frida動態攔截工具在 App 運行時即時觀察或修改其行為的工具(需實體設備,屬動態分析)。
Firmware(韌體)硬體內部的程式燒錄在硬體晶片中的程式,FPGA 的「接線圖」、Wi-Fi 晶片的「作業系統」都屬於韌體。
hash(雜湊)單向指紋計算任何文字經過 hash 都會變成一串固定長度的「指紋」,無法直接還原。但如果原文是常見或弱密碼,攻擊者可預先計算大量常見密碼的指紋再逐一比對(查表攻擊),因此密碼 hash 需要「加鹽」並使用慢速算法。
加鹽(salt)密碼雜湊的調味料儲存密碼前,先加入一段隨機資料再計算 hash,使相同密碼產生不同指紋,杜絕查表攻擊。
JNIJava 與原生程式的橋樑讓上層 Java 程式碼呼叫下層 C/C++ 引擎的接駁技術。本 App 有 381 個這類「窗口」。
MD5一種舊式 hash1992 年發明,已知存在碰撞攻擊(可製造兩份內容相同指紋);未加鹽的 MD5 密碼雜湊容易遭離線猜測。
Native(原生)機器碼程式直接在處理器上執行的高效能程式(.so 檔)。某些影像處理工作在此層執行會較快。
OEM代工貼牌一家工廠製造,其他品牌貼上自己的名稱銷售。SonoiQ 原始品牌為 Youkey,另有 17 個貼牌身份編號。
PACS醫院影像存檔系統醫院集中儲存所有醫學影像的中央檔案庫。
PHI受保護的健康資訊病人姓名、病歷等私隱資料(受法律嚴格保護)。
PID探頭描述庫描述每個探頭型號「如何發聲」的參數大全(本版本含 77 個型號)。
PW/Color/B 模式超聲波掃描模式B=黑白結構影像;Color=彩色血流影像;PW=血流速度量化。
Reverse Engineering(逆向工程)逆向分析從成品還原內部構造的分析活動。本報告的範圍是對使用者自己持有的檔案進行離線靜態分析。
SHA-1/SHA-256指紋算法同屬 hash 家族。SHA-1 已過時(存在碰撞攻擊);SHA-256 仍被廣泛接受(本報告用它作為樣本指紋)。
smaliAndroid 中層程式碼介於原始碼與機器碼之間的格式,逆向工程常以它作為修改入口。
SQLite輕量資料庫以單一檔案儲存結構化資料的資料庫格式,App 用它儲存病人與檢查記錄。
SN(序號)序列號每支探頭獨一無二的編號。SonoiQ 的功能授權碼就是由此編號計算出來。
TLS加密連線標準網址中「https://」的「s」就是它。它有兩重作用:加密內容+驗證對方身份。SonoiQ 的 HIS 對接把「驗證身份」那一重關閉了。
UDP/TCP網路傳送方式TCP=有回執的掛號信;UDP=沒有回執的快遞(較快但無保證)。探頭指令使用 UDP。
Vendor Request廠商專用 USB 指令USB 協定保留給製造商自訂的指令通道。SonoiQ 以 24 號指令寫入授權碼。