1. 程式人生 > >龍捲風介面 - 逆向解出請求歷史資料API

龍捲風介面 - 逆向解出請求歷史資料API

先貼兩張介面截圖:

      圖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。