最近真有趣,剛在摸什麼東東時,就剛好有人會跟你聊到這些東東~ 這篇是來自另一篇: http://bbs.pigoo.com/thread-54529-1-1.html 就順手又手癢自己動手改了它~ 像這種全功能只是大小限制的,決對不用怕功能會被閹割掉。 先來介紹介 8K limited 這版吧,最愛這版了,因為它並沒有外加 FlexNet的商業保護限制。但事實證明,8K 它直接把 clib 移除不放進來。 先設好使用 8k limited 這版。 修改程式,另其超出8K 並產生 error message。 由上圖可得到2個訊息: cxstm8 是 cosmic 的 C Compiler castm8為 cosmic 的Assembler ,會被 cxstm8所呼叫。 用一隻非常有名的工具軟體 w32dasm 8.93~歷久不衰, 躺在我的硬碟超過15年以上 打開並反組譯它~ 很好,發現沒殼加密。 觀查程式碼,很好,很標準的 C 語言產生的機器碼。 看來跟小菜一盤一樣。 打開 string data references。 很好,資料區段完全的明碼,沒被加密。 找到我們需要的 error message 並點下去。 找到我們需要的程式片段~發現一個有趣的數字 0x2400 並猜測後修改它。 雖然 error message 不再出現在,但程式還是回傳錯誤結束。 那就簡單的搜尋一下程式碼吧~利用 0x2400這個字找一下看看。 是不是有別的地方也有這種數字。 結果發現共有3處地方,看起來都滿像是這種檢查,二話不說,動手改掉。 搞定第一步,真的是沒什麼技術性。 緊接著發現有另一隻需要改: clnk.exe 重覆上述的簡單工作: 切入 error message 產一點~ 尋找可能發生片段,又找到魔法數字 0x2400 改了它並全域搜索一遍,發現共2處。 patch它。 8K 限制版到此搞定。但發現只版沒有 clib.exe 只有再次開工,搞搞 32k 限制版: 以字串 "too much code" 來切入~~ 有找到檢查點~ 但發現靜態分析沒法看到是誰對記憶體的運算~ 下一步,準備拿出動態分析工具~ 因此程式(castm8 比較特太,直接載入會有 working path 的問題,所以設定從命令列啟動。 同時做一隻 t.asm 來產生 error.asm 確定可正確產生 error message 後,準備從命令列啟動一隻也是很多年很有名的程式,躺在硬碟10年了。百用不過時。 此畫面是我慣用的配色 ^^ 常時間下來,眼睛比較因光線而吃力。 運行到主程式起點後。選擇搜尋列出程式內,所有可能對映的字串與呼叫位址。(因為沒加殼保護,所以簡單就可以開始追蹤了) 直接切入到了產生 error message 的程式碼。 往上看就會發現我們這次的目標記憶體位址 0x53670C 裏的值變化。 設定一下畫面,令底下 記憶體視窗可以直接觀查到它。 我們需要來 trace 誰動了它~ reset 後重跑,系統會停了下來,代表真的有人去動它,這是好事,因為很快就可以收工了。假設都好像是對的。 此2張圖,會發現在同一個副程式讀取後產生中斷停下來,離開前又寫入產生中斷停下來。 停了下來,我們就看底下視窗的數字變化,發現這個副程式 run 了2遍,在離開前寫入的值就變成了 0x8000~ 發現了這個魔法數字 (0x8000 = 32K bytes)~ 其實就是這個程式片段是用來解密用的,用一個程式設計師常用的小手段 XOR 來加密與解密。 任一數,只要對同一個值 xor 2次,都會得到原值。 任一個bit,對1 XOR 會得到反相。 任一個bit,對0 XOR 會得到同值。 同時圖上發現了加密的值存在 0x51A02C ,加密的key存在 0x51A030 分析此加密值與加密的key 當然就是修改它了喔~快快收工去~ 結果改完後,當然又是 error message 不會出來了,但程式還是產生 error code而結束。 此時回到我們之前的分析,其實它有另外一個檢查機制會與這個位址比較值相不相同。 0x536744這個位址,在前幾張圖裏有出現,當時有說了一下需注意。 對記憶體址0x536744 重作一次上述的動作,也會找到一小段程式碼,也是來 XOR之類的動作。 只是,這次位址的順序有點不同,它是固意的(其實設計的人以為耍這個小聰明,等於是多了一個保護機制)。 就依此圖改了它吧。讓它早點去睡覺。 [attach]180592[/attach] 這步也搞定了。 此文章目前只描述了修改 8K/32K限制。 其實在 32K 版裏,存在著一個商業保護,只是它是無限期的評證。但是都需要取得它。 那個是有名的 FlexNet (以前的名字為 FlexNet)。 這個10幾年就聽過了,一直沒玩過它。不過網路上有很多文章在討論它。 報告完畢~ 到底這2隻有多久呢? show 一下~ 補充內容 (2014-12-14 01:22 AM): 錯誤修正: FlexNet (以前的名字為 Flexlm) |
GMT+8, 2024-12-23 06:28 AM , Processed in 0.052488 second(s), 26 queries , Gzip On.
Powered by Discuz! X3.4 Licensed
© 2001-2023 Discuz! Team.