Re: [請益] 要如何繞過Keypro的驗證?

看板Soft_Job作者 (ggg)時間13年前 (2012/03/16 22:48), 編輯推噓1(1012)
留言13則, 3人參與, 最新討論串6/6 (看更多)
: 推 purplebfly:重買一套或是換套新的吧...別自己找自己麻煩了 02/10 18:38 : → ofese0207:會不會 新電腦裝備太新 軟體不支援 新電腦的等級是? 02/10 19:08 : → ofese0207:該不會是用六核心電腦灌win98吧 02/10 19:09 : 怎麼可能= =" : 隨便找了一台P4的電腦就灌起來當Server了 : → ggg12345:keypro是硬體應該不隨意壞,常用LPport位址與中斷要設對. 02/11 00:38 : 最後整個資訊室的人都解決不了 只能採購新設備Orz 前面有高人提到 如果使用 DEBUG 這類工具讀出的會跟原來 keypro 讀出的不同. 對此種解釋法, 個人是不太同意. 另有高人提出 anti-debug 利用 8086 的 prefetch instruction queue 已讀到 指令 進 processor 中無法被 self modifying code 就 queue 中指令立即覆蓋, 若用 debug 一步步做跟放其快速做再遮斷, 結果會不 同. 前一測試已說明 P4 cpu 不會有此種差異, 結果都跟一步一步做相同. 特地再從倉庫找了一台 80486-DX2 測試, 這個 CPU 就明顯有 self modifying code 對 PFIQ 的效應. 就前一例的測式結果在 80486-DX2 為: -d190 19f 14CC:0190 73 06 06 06 06 06 06 06-06 06 06 06 06 06 06 06 ======= 1. 假如 keypro 用了類似此種手法防追蹤, 那就會變成 P4 CPU 與 80486-DX2 不 相容. 若原來是舊機器那就得用 PFIQ 相容的 8086 (如 486-DX2)cpu才是. 2. 使用 Vmware 或 其他 VM OS (如 QEMU) 提供 8086cpu 與 dos/win98 模擬環 境的虛擬機時應該會有 PFIQ 相容的選項適當設定才能達到完全相容.

03/16 23:06, , 1F
咦, 不是很鐵? 怎麼跟spec 寫的不一樣了, 太神奇了.
03/16 23:06, 1F

03/17 10:38, , 2F
這個結果是否證明pre-fetch防debug的技術在目前主流硬
03/17 10:38, 2F

03/17 10:38, , 3F
體環境已經失效呢?
03/17 10:38, 3F
8086 pfiq 的副作用應該是設計時的一種失誤. self modifying code 一直都是 精簡程式與迷惑追蹤者的手段, 只是她更利用了 PFIQ 這個設計失誤的副作用. 會使得追蹤者掉入陷井增加難度. prefetch 是用來加快執行的, 利用 pipleline 的構思使 fetch cycle 與 execution cycle 可以併時平行加快速度. 原設計不 是用來防 debug 的.

03/17 14:20, , 4F
原設計的目的是一回事 可以這樣做是另一回事...
03/17 14:20, 4F
沒有這個副作用, 也是可照用這種 self-modifying code 來迷惑追蹤者, 但 對有經驗的, 不論那一種招, 很快就看穿過關了. keypro 靠的是要認證這個 "keypro信物" 的存在, 只是不讓人知道檢驗的程 式在何處, 何時會被執行, 因此會防追蹤. 理論上, 虛擬機更容易偵測到這 種 i/o 動作的發生. 若是永遠不變的信物更容易被模擬出來.

03/18 11:50, , 5F
哪證明你不鐵就好了.
03/18 11:50, 5F
如果透過 debug 讀出來的結果跟其他程式讀出來的結果會不同, 那也不必用 debug 來驗證 prefetch instruction queue 的副作用了. 某些程式會干擾 debug 的執行, 但也未必就能全干擾得到, 那是看怎麼用. 用software做debug single step trace 的, 都知道 self-modifying code 會干 擾 next single step. 這現象不應說成 debug 可能會讀出不同的結果. 若是被監 測的與監測的產生相互干擾, 監測的儀器根本就不可能監測出被監測對象的正確效 應. 實況是選擇不相互干擾且正確必經的斷點觀測, 就能觀察出被監測程式的執行效應. A 程式使用 PFIQ 產生的效果, 跟用 B程式 也是同樣使用 PFIQ 的效果如果會不 同, 那這個執行程式的硬體不可能會被認定是穩定可靠. 若(A+B)程式交互或同時 執行, A與B若沒有相互干擾, 結果應該跟各別執行是相同的效果. debug 依舊是能判讀出某型 CPU 的 PFIQ 是否有副作用的問題. 檢驗法依舊是靠 極端特例的 self-modifying code. 此法本就會使下一步的執行受影響, 而難如正 常下, 不做特別干擾, 因此可於未執行前就事先觀察做預測. SMC是引入干擾使之 無法事先有可預測性, 必須待執行後才知曉, 但不影響執行後的可觀測性.

03/18 14:35, , 6F
不用再講了, 反正你鐵不了, 就這樣. 要賣老賣不成了....
03/18 14:35, 6F
一直還沒看你舉出一個 debug 跟 keypro 相關程式會讀出來不一樣的例子! 這疑問 跟誰老毫不相干. 這是個儀測的 load effect 基本問題.

03/18 18:00, , 7F
哦, 我沒例子呢, 你去買個keypro來玩吧, 加油。
03/18 18:00, 7F

03/18 18:00, , 8F
記得要小心prefech 哦。
03/18 18:00, 8F

03/18 18:02, , 9F
你既然知道debug step trace 會錯, 哪麼我之前講的
03/18 18:02, 9F

03/18 18:03, , 10F
方式就可以讓你step trace 走錯, 走錯讀出來的code 就
03/18 18:03, 10F

03/18 18:03, , 11F
可以錯了.
03/18 18:03, 11F
step trace 靠預測下一步先堵斷, 先預測錯誤可不是讀錯喔! self-modifying code 做那一步時覆蓋了debug先堵斷的位置, 使真正的下一步 指令變了. 這是執行那步後更改覆蓋. debug 讀的並沒錯, debug 先設的斷點被 覆蓋失效, 無法使斷點發生 int3 進入不了 debug , 可不是 debug 程式去讀讀 錯. debug step trace 是使每個單步執行前都事先預測可能的下一步,使之執行一步 前就覆蓋下一步的 op-code 為 int-3 , 靠 int 3 接回去 debug 顯示. 這動作 會改變實際執行次序, 使得逐步做跟快速放開隔距截斷的執行次序有所不同. 用 self-modifying code 更改 prefetch instruction queue 對應的記憶體位置, 將隨逐步接回 debug 的次序與放開快步做緊跟的指令次序有所不同, 有副作用 的 PFIQ 就因指令次序位置而產生不同結果. 這跟 debug 是否讀錯一點關係都 沒有. 沒有副作用的 P4 cpu PFIQ 就會照 self modifying code 的修改立即生效, 使 得逐步做跟放開快速做的結果都相同. 這是 CPU 硬體的特性問題, 不論是否有無 副作用, 都不會隨那種片段程式的執行而有差別性地因不同程式帶來差異. Debug 程式讀的跟 keypro 程式讀的, 都作用在同一個 cpu, 不會結果有所不同. 這些 cpu 硬體也沒有做成會認得某個程式就讀出給x, 認得另個程式就讀出給y.

03/18 20:16, , 12F
你回去好好看我之前講的吧, 別在扯了. 你加油吧.
03/18 20:16, 12F

03/18 20:17, , 13F
市面上的keypro 還很多, 花點錢去玩吧.
03/18 20:17, 13F
我在等你的程式例子. 別再拿self-modifying code 蒙混. ※ 編輯: ggg12345 來自: 140.115.4.90 (03/18 20:33)
文章代碼(AID): #1FOrAiA6 (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1FOrAiA6 (Soft_Job)