星期六, 6月 25, 2022

吐槽 VB6

 最近又一次受 VB6.0 荼毒迫害。

最近和其他單位同事合作回溯性分析,分析公司用戶資料。資料能透過資訊系統一筆筆查,問題是筆數多(N>2K),資料分散在不同報表程式和網頁表單上。因各種因素,不能直連 production DB 下 SQL。反覆請人代撈實務不可行。但政策不禁自動化軟體代替鍵盤滑鼠操作報表軟體,只要遵循審查流程。

然後就又跟 VB6.0 槓上了。很大部份資料需透過一 VB6.0 報表軟體查詢。報表軟體上有 ListView 顯示用戶的多筆紀錄,操作者點選 ListView 上的紀錄,程式跳出對應該紀錄的進一步細節。

真人鍵盤滑鼠操作沒啥問題,用自動化 VB6 就開始不講武德。

在家中做模擬,就發現 MSDN 上的東西很多對 VB6 沒用。例如,MSDN 說 LVM_SETITEMSTATE 可以改變 ListView 目前被圈選的 item。實際使用畫面上 ListView 被 highlight 的 item 會變,但後續 side effect 不會觸發。又例如 MSDN 說 LVM_SETITEM 可改變 ListView 呈現的資料,結果實際使用只會改畫面上的資料,隨便重排資料修改就不見了。

那用 code injection 解決呢?很久前就試過,VB6 編出來的 code 本質是編成 native code 的虛擬機操作,大量意義不明的中間變數和莫名操作,一切 control flow 最終回歸 MSVBVM60.DLL 和元件庫。有效操作被嚴重稀釋。逆向天然自帶虛擬機的 binary 嚴重超過我業餘用戶的能力,我連自己寫的 mock 都沒辦法分析,生產環境中的報表軟體就不用試了。

最後,又一次倒在 VB6 鐵拳之下,還是只有模擬鍵盤滑鼠按鍵的方式可行。方案沒技術含量,而且使用期間電腦不能操作,但自動點選存資料還是弄出來了,之後走審查流程後就在公司內正式開發、使用。順利的話能解決分析需求,還有機會與另外一個 side project (搜尋引擎)形成連動,做成一條龍。

業餘 side project 坑好像越挖越大,一開始是好玩,然後是實用,現在目標變成發展產業鏈了 XDD。但還是要吐槽 VB6,根本就上個時代的遺毒...

全文連結

0 意見: