iT邦幫忙

0

請問C++用Win API Hook 可以在程式產生或更新文字檔前攔截嗎?

匿名 2015-02-14 08:47:284439 瀏覽

大大好,
我們公司有一支監控程式,
每天零時會產生一個監控的txt檔在指定目錄,
一天一個,然後當天不定時將監控的資訊更新到那個檔案,
所以檔案會越來越大,

現在老闆希望說,
能夠在程式產生了記錄文字後,要更新至txt檔之前,
先攔截文字,修改一些地方,再寫入txt檔,
因為該監控程式不是我們家做的,無法直接更改程式碼,
印象中用Hook似乎可以做到這樣的功能,

小弟上網查到了一堆Hook攔截滑鼠、鍵盤....等等的方式,
但是找不到Hook攔截程式IO磁碟的方式,
能否請大大給點提示呢?
或是可以買哪本相關書籍? 台灣好少Win API的書,都找不到。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
slime
iT邦大師 1 級 ‧ 2015-02-14 09:06:27
最佳解答

如果那個檔案只有公司內使用, 可以在存檔後, 要另外使用(例如: 分析)前改掉就好.

如果那個檔案是外部稽核檔, 建議您換工作.

匿名 檢舉

感謝大大的回答,
檔案是公司內部監控儀器使用的,所以應該不用換工作落寞

問題在於實際上的限制,必須要將另一台儀器產生的資訊同步寫入txt檔,
可以說是差了一秒都不行,
原本這樣的需求必須改監控程式讓它同時監控兩個儀器才對,
問題除了卡在錢,也卡在時間,所以直接放棄改原本程式的想法了。

還是很感謝大大回答,小弟在老闆放棄之前只能先找找看有沒有方法做到。汗

slime iT邦大師 1 級 ‧ 2015-02-14 21:59:07 檢舉

印象中 .txt 檔並不會有被鎖定的問題,
所以就算兩支不同程式, 可以用"累加(append)"於檔案最後, 而不影響.

所以可能要麻煩再說明一下:"將另一台儀器產生的資訊同步寫入txt檔"的流程?
比如: A 機器寫入 -> 需要同時記錄環境需要 -> 呼叫 B 機器 -> 記錄 B 機器的記錄.
那我會考慮: 不管幾時, 讓 B 機器一直寫入, 而當 A 機器寫入後, 再去比對 A 機器寫入的前一筆及後一筆資料.

(因為原本的描述, 讓我以為是要"篡改"記錄.... XD )

slime iT邦大師 1 級 ‧ 2015-02-14 22:08:16 檢舉

比如:

(個人推測您老闆的期望)
A: 10:30 監控器看見美女
B: 10:30 當時室溫 33 度, 老闆體溫 38 度.

(個人會想)
B: 10:25 當時室溫 25 度, 老闆體溫 20 度. (冷血動物...)
B: 10:26 當時室溫 26 度, 老闆體溫 20 度.
B: 10:27 當時室溫 27 度, 老闆體溫 20 度.
B: 10:28 當時室溫 28 度, 老闆體溫 20 度.
B: 10:29 當時室溫 29 度, 老闆體溫 20 度.
A: 10:30 監控器看見美女
B: 10:30 當時室溫 30 度, 老闆體溫 38 度.
B: 10:31 當時室溫 31 度, 老闆體溫 38 度.

之後再用程式去撈取 A 記錄與 B 的 10:29~10:30 的記錄.

2
player
iT邦大師 1 級 ‧ 2015-02-14 17:01:10

1.你要先分析出那隻應用程式是用那些API做檔案寫入功能的
2.去找Hook API的Code來改寫出你要的功能 (Hook API的運作原理有好幾種)
基本上有些難度, 除非你有用過Hook API寫過遊戲外掛的經驗
不然建議別這麼做

0
ramonliu
iT邦新手 4 級 ‧ 2015-02-15 11:42:57

嗯, 給您另一個思考方向...
建立一個背景程式, 隨時隨地監視該檔案的狀況,
正所謂山不轉路轉, 這個方式比較沒什麼技術,
要想學技術, 可以去了解一下 "SERVICE DESCRIPTOR TABLE" "ssdt"
很底層喲!! ^O^

0
erictaiwan
iT邦研究生 5 級 ‧ 2015-02-15 22:19:32

我的建議如下,算是三十六計之偷天換日:
Step 1: 監控程式產生一個監控的txt檔在指定目錄 <-- 將目錄改到 \temp 去
Step 2: 客制新程式去定期讀取 \temp\監控的txt檔
Step 3: 加上要的資料後,更新到指定目錄.
Step 4: 收工

我要發表回答

立即登入回答