龍捲風介面 - 逆向解出請求歷史資料API
阿新 • • 發佈:2019-01-14
先貼兩張介面截圖:
圖1 龍捲風設定介面
圖2 龍捲風請求資料介面
CnStockDrv.dll 匯出函式:
其中,請求資料的有 QueryKData GetTradeData QueryTradeData GetMinData QueryMinData QueryManyReportData QueryReportData
GetMinData和GetKData函式是沒有程式碼的空函式,
QueryXXXX函式實際上通過lParam引數,傳送MSGID為0x07E8的訊息到龍捲風的設定視窗。然而我呼叫了這個函式也沒個卵用。
除此之外: GetTotalNumber ReInitStockInfo SCAskData SCStockInit SetNewsPath 都是保留相容性的空函式,沒有任何實現程式碼
------------ 以上的文字和圖 並沒有卵用 -------------
我跟蹤了“補充資料”按鈕的事件_TDfm_btnMendStartClick,請求歷史資料其實是發了個訊息給某個執行緒,而這個執行緒正是CnStockDrv中的的網路通訊執行緒TDownloadTask。這樣解決方法就用了,就是拼湊0x0856訊息的引數,發訊息到TDownloadTask執行緒,需要解決兩個問題: 1.引數格式; 2.獲取執行緒ID
a> 獲取引數格式,OllyDBG中在上圖發訊息前設定,檢視esi指向的記憶體內容即可獲知
引數esi 暫存器指向 一個字串(pascal 字串),字串格式如下:
個股F10 2|1|sh600688
當日分時 3|1|sh600688
日線歷史 4|1|sh600688 4|2|sh600688 4|3|sh600688
歷史5分鐘 5|1|sh600688 5|2|sh600688 5|3|sh600688
分筆成交 6|3|sh600688
除權資料 7|1|sh600688
財務資料 8|1|sh600688
資訊地雷 9|1|sh600688
b> 獲取執行緒ID 比較麻煩,不過我們知道執行緒處理函式 sub_4D5C60, 我們可以用MS 研究院的Detours工具劫持修改函式前幾個指令, 跳轉到我們自己的函式,然後呼叫一下GetCurrentThreadId獲取儲存該執行緒ID。