痞酷網_PIGOO

 找回密碼
 立即註冊
!!! [系統偵測到廣告阻擋軟體] !!!

如果您覺得痞酷網對您有些許幫助,或者您認同痞酷網的理想,

那麼希望您將痞酷網設定為白名單.

並請在上論壇的時候,動動您的手指,用行動支持我們.

謝謝!
痞酷網_PIGOO 門戶 原創精選 查看內容

COSMIC for STM8S C Compiler 8K/32k Limited DIY成全功能版

2018-5-8 12:06 AM| 發佈者: wish| 查看: 2512| 評論: 0|原作者: jojoling

摘要: 最近真有趣,剛在摸什麼東東時,就剛好有人會跟你聊到這些東東~ 這篇是來自另一篇: http://bbs.pigoo.com/thread-54529-1-1.html 就順手又手癢自己動手改了它~ 像這種全功能只是大小限制的,決對不用怕功能會被閹 ...
最近真有趣,剛在摸什麼東東時,就剛好有人會跟你聊到這些東東~
這篇是來自另一篇:
http://bbs.pigoo.com/thread-54529-1-1.html
就順手又手癢自己動手改了它~

像這種全功能只是大小限制的,決對不用怕功能會被閹割掉。

先來介紹介 8K limited 這版吧,最愛這版了,因為它並沒有外加  FlexNet的商業保護限制。但事實證明,8K 它直接把 clib 移除不放進來。

先設好使用  8k limited 這版。
2014-12-13_024818.png

修改程式,另其超出8K 並產生  error message。
2014-12-13_025043.png


由上圖可得到2個訊息:
cxstm8 是 cosmic 的 C Compiler
2014-12-13_025538.png

castm8為 cosmic 的Assembler ,會被 cxstm8所呼叫。
2014-12-13_025552.png

用一隻非常有名的工具軟體 w32dasm 8.93~歷久不衰, 躺在我的硬碟超過15年以上
打開並反組譯它~
很好,發現沒殼加密。
觀查程式碼,很好,很標準的 C 語言產生的機器碼。
看來跟小菜一盤一樣。
2014-12-13_025701.png

打開 string data references。
很好,資料區段完全的明碼,沒被加密。
找到我們需要的 error message 並點下去。
2014-12-13_025741.png

2014-12-13_025819.png

2014-12-13_025843.png

找到我們需要的程式片段~發現一個有趣的數字 0x2400
並猜測後修改它。
2014-12-13_025904.png
2014-12-13_025952.png


雖然 error message 不再出現在,但程式還是回傳錯誤結束。
那就簡單的搜尋一下程式碼吧~利用 0x2400這個字找一下看看。
是不是有別的地方也有這種數字。
結果發現共有3處地方,看起來都滿像是這種檢查,二話不說,動手改掉。

2014-12-13_030855.png

2014-12-13_030930.png

2014-12-13_031014.png

搞定第一步,真的是沒什麼技術性。
緊接著發現有另一隻需要改: clnk.exe
2014-12-13_031616.png

重覆上述的簡單工作:
切入 error message 產一點~
尋找可能發生片段,又找到魔法數字 0x2400
改了它並全域搜索一遍,發現共2處。
patch它。
2014-12-13_031759.png

2014-12-13_031839.png

2014-12-13_032007.png

2014-12-13_032040.png

8K 限制版到此搞定。但發現只版沒有 clib.exe
2014-12-13_032600.png


只有再次開工,搞搞 32k 限制版:
2014-12-13_033335.png

以字串 "too much code" 來切入~~
有找到檢查點~
但發現靜態分析沒法看到是誰對記憶體的運算~
2014-12-13_033513.png

2014-12-13_033611.png

2014-12-13_033640.png

下一步,準備拿出動態分析工具~
因此程式(castm8 比較特太,直接載入會有 working path 的問題,所以設定從命令列啟動。
同時做一隻 t.asm 來產生 error.asm
2014-12-13_041208.png

確定可正確產生 error message 後,準備從命令列啟動一隻也是很多年很有名的程式,躺在硬碟10年了。百用不過時。
2014-12-13_041419.png

此畫面是我慣用的配色 ^^
常時間下來,眼睛比較因光線而吃力。
2014-12-13_044539.png

運行到主程式起點後。選擇搜尋列出程式內,所有可能對映的字串與呼叫位址。(因為沒加殼保護,所以簡單就可以開始追蹤了)
2014-12-13_044637.png
2014-12-13_044705.png

直接切入到了產生 error message 的程式碼。
2014-12-13_044739.png

往上看就會發現我們這次的目標記憶體位址  0x53670C 裏的值變化。
設定一下畫面,令底下 記憶體視窗可以直接觀查到它。
2014-12-13_044818.png

我們需要來  trace 誰動了它~
2014-12-13_044920.png


reset 後重跑,系統會停了下來,代表真的有人去動它,這是好事,因為很快就可以收工了。假設都好像是對的。
此2張圖,會發現在同一個副程式讀取後產生中斷停下來,離開前又寫入產生中斷停下來。
2014-12-13_045050.png
2014-12-13_045158.png

停了下來,我們就看底下視窗的數字變化,發現這個副程式 run 了2遍,在離開前寫入的值就變成了 0x8000~
發現了這個魔法數字 (0x8000 = 32K bytes)~
其實就是這個程式片段是用來解密用的,用一個程式設計師常用的小手段  XOR 來加密與解密。
任一數,只要對同一個值 xor 2次,都會得到原值。
任一個bit,對1 XOR 會得到反相。
任一個bit,對0 XOR 會得到同值。

同時圖上發現了加密的值存在 0x51A02C ,加密的key存在  0x51A030
分析此加密值與加密的key
2014-12-13_045218.png
2014-12-13_045613.png

當然就是修改它了喔~快快收工去~
結果改完後,當然又是 error message 不會出來了,但程式還是產生  error code而結束。
此時回到我們之前的分析,其實它有另外一個檢查機制會與這個位址比較值相不相同
0x536744這個位址,在前幾張圖裏有出現,當時有說了一下需注意。
2014-12-13_050051.png

對記憶體址0x536744 重作一次上述的動作,也會找到一小段程式碼,也是來 XOR之類的動作。
只是,這次位址的順序有點不同,它是固意的(其實設計的人以為耍這個小聰明,等於是多了一個保護機制)。
就依此圖改了它吧。讓它早點去睡覺。
2014-12-13_050404.png

2014-12-13_054440.png

2014-12-13_055117.png

2014-12-13_055404.png

[attach]180592[/attach]


這步也搞定了。
2014-12-13_050936.png


此文章目前只描述了修改 8K/32K限制。
其實在 32K 版裏,存在著一個商業保護,只是它是無限期的評證。但是都需要取得它。
那個是有名的 FlexNet (以前的名字為 FlexNet)。
這個10幾年就聽過了,一直沒玩過它。不過網路上有很多文章在討論它。


報告完畢~







到底這2隻有多久呢?
show  一下~
2014-12-13_051827.png









補充內容 (2014-12-14 01:22 AM):
錯誤修正: FlexNet (以前的名字為 Flexlm)
6

鮮花

握手

雷人

路過

雞蛋

剛表態過的朋友 (6 人)

相關分類

關閉

站長小叮嚀上一條 /1 下一條

禁閉室|手機版|連繫我們|痞酷網電子技術論壇

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.