飄云閣(PYG官方)

 找回密碼
 快速注冊

QQ登錄

只需一步,快速開始

查看: 826|回復: 12
打印 上一主題 下一主題

[原創] PTGui離線激活驗證機制分析

[復制鏈接]
  • TA的每日心情
    開心
    2020-1-1 17:46
  • 簽到天數: 6 天

    [LV.2]偶爾看看I

    跳轉到指定樓層
    樓主
    發表于 2020-1-15 14:05:59 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
    本帖最后由 BinCrack 于 2020-1-15 14:05 編輯

    飄云閣全網首發,未經許可,禁止轉載

    昨天分析了一款不知道做什么的軟件,我們對軟件自身功能并不關心,僅作為學習交流的目的分享此次分析思路。個人認為,不管作為軟件開發人員還是逆向分析人員,本軟件的離線激活機制都有一定學習意義。本文將盡可能詳細的闡述該軟件離線激活功能相應的驗證機制,并班門弄斧提出一些軟件的驗證缺陷。由于本人能力有限、軟件本身驗證也有些混亂,涉及到多種算法(RSA、AES、MD5、BASE64、BASE16)的識別,如有描述不清的地方還望見諒。
    1.切入驗證點

           如下圖所示,當我們啟用離線激活功能,軟件會獲取當前系統硬件信息并進行加密生成一組“激活請求碼”。之后我們在激活網站上輸入這串代碼和合法的用戶名與產品密鑰,服務器便會計算出對應的“激活響應碼”,此時只需輸入到下圖輸入框即可離線激活成功。

    我們此次的任務便是僅通過分析軟件,去逆推出PTGui客戶端與服務端的激活交互機制,實現激活服務器的功能。
           當我們隨便輸入響應代碼時,軟件會提示格式有誤,根據提示很容易定位到格式校驗的函數。


    因此只需要構造符合格式的“響應碼”即可繞過格式檢驗。
    2.RSA解密
    繼續向下分析,會看到程序讀取內存中的一段hex數據,并將其解密(這里的解密算法是什么完全不用理會,將其摳出即可)。


           真不清楚作者是腦子有坑還是拿我們當智障,有了私鑰可以直接生成對應的公鑰,RSA算法的非對稱加密已經失去意義。我們可以在不改動程序一個字節的情況下寫出注冊碼完全是拜這點所賜。
           接著就是rsa解密的相關函數,挑出需要注意的部分如下圖所示。此時我們使用RSA算法加密的一個塊大小剛好是0x200,程序要求數據必須大于0x200+0x10,而且解密出來的大小必須為32個字節。逆推回去就是先使用RSA加密32字節的數據,得到0x200的密文塊,再填充0x10字節即可滿足驗證。


    3.AES解密

          后續看到程序會將0x200+0x10后的數據讀取到padding2充當aes算法的密文,而上面提到的32字節的數據剛好是aes密鑰,0x10的數據剛好是iv。




    4.激活請求碼生成
           注意,這里需要打斷一下,上述的aes函數第五個參數“1”代表解密,自然能聯想到“0”代表加密,再聯想到“激活請求碼”的生成時也許用到了這個算法。我們再該函數下斷點,重新運行程序生成“激活請求碼”時會斷下來,此時直接拿到了明文數據如下。不幸的是這次的rsa算法是公鑰加密,也就是說,我們無法通過“激活請求碼”的密文解密出明文(因為沒有私鑰)。所以在分析中我也完完全全分析了整個“激活請求碼”的生成過程,流程剛好是軟件解析“激活響應碼”的逆過程,因此不再贅述,繼續分析剛剛的aes解密后的數據驗證。

    [AppleScript] 純文本查看 復制代碼
    {
            "productid": 2,
            "productversion": 112000,
            "minlicensedate": 1.4304384e12,
            "licenses_seatkey_preferred": null,
            "activationsubactionid": 100,
            "h": {"version":1,"os":2,"numbits":32,"osversion":[6,1,7601],"computername":"HTKUVBW5WJSRJ5V","cpu":"Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz","disk":"a8d34713 (20478 MB)","memsize":2047,"serial":"None","gpus":[
                    "RDP Encoder Mirror Driver",
                    "RDP Reflector Display Driver",
                    "RDPDD Chained DD",
                    "VMware SVGA 3D"
            ]}
    }
    

    5.AES解密數據構造
    分析到這里,大體的加解密框架都已經清晰,然而接下來的才是最費勁的時刻。因為aes解密后的明文才是程序最關心的數據,而我們完全不知道這些數據是什么。sub_57BFC0函數為數據解析函數,先上一張讓人一臉懵逼的圖片。



           Sub_49c470函數為ASSERT函數,一旦執行就會觸發“Assertion failed:”錯誤。起初看到上述流程我簡直懷疑正版用戶這里都無法通過,耐著性子分析sub_D93CA0函數最終柳暗花明又一村。

    結合以上函數,我們果斷推測AES解密后的數據正是JSON格式,而剛剛讓我們蒙蔽的那些變量正是為了驗證JSON中相關字段存在與否。如果有正版用戶的“響應碼”,我們可以毫不費力的拿到JSON數據?上]有,所以后續的分析是一個攻堅戰,我只能在N次錯誤中去斷定哪些字段該存在以及其對應的數據類型,而且JSON數據是嵌套的,當程序解析某個字段又會遞歸調用一次JSON解析函數,總之秀到你頭皮發麻,后續會直接提供合法的JSON數據。如果你感興趣可以自己嘗試將JSON數據逆推出來。
    6. BASE16編碼識別

           在我們解析到‘rec’時,程序會驗證數據的格式,對應函數sub_8BD020,由合法字符范圍推測可能是base16編碼。



    7.合法JSON數據構造



    可能有朋友會問,請求碼的密文我們無法解密,那么請求碼明文我們該如何獲得呢。一種是通過調試程序獲得,結果準確但適用性差;第二種是自行讀取當前系統的信息,因為這些數據都很好獲取,也不存在什么隨機數。
    8.MD5校驗
           最終程序還會在sub_57FAB0函數校驗signature,通過下圖紅框的數據(
    MD5的鏈接變量)秒認出為md5加密算法。Md5校驗的數據正好是rec的json明文,奇葩的是要求數據必須大于16字節,因此我們計算出md5后在后面在填充一字節00即可。




    9.手算激活響應碼

           最后帶著大家手算一次響應碼,加深一下印象(其實是懶得寫程序了)。
    將RSA私鑰保存為private.pem,使用命令生成公鑰:
    [Bash shell] 純文本查看 復制代碼
    openssl rsa -in private.pem -pubout -out public.pem

    隨便取兩組hex數據作為AES算法的key和iv:
    [Bash shell] 純文本查看 復制代碼
    Key:
    5A 18 C9 08 53 8B 2F 47 54 71 65 76 A4 28 4B E6 
    1E 1B F8 42 0A 55 71 DB 0B C8 5B F7 F8 A4 29 12 
    
    Iv:
    6D 1B 4D 4F 0C A3 FD B0 20 65 F7 12 41 A2 48 62
    

    將key以hex的方式存儲到message.txt,使用rsa公鑰加密
    [Bash shell] 純文本查看 復制代碼
    openssl rsautl -encrypt -inkey public.pem -in message.txt -pubin -out enc.txt

    將iv對應的hex填充到enc.txt后面
    將計算出的json數據保存為plain.txt
    使用上述key,iv進行aes-cbc加密:

    [Bash shell] 純文本查看 復制代碼
    openssl enc -aes-256-cbc -in plain.txt -out encrypt.txt -iv 6D1B4D4F0CA3FDB02065F71241A24862 -K 5A18C908538B2F4754716576A4284BE61E1BF8420A5571DB0BC85BF7F8A42912

    將aes密文再次填充到enc.txt后面,最后將其進行base64編碼并填上響應碼的開頭結尾格式即可。

    10.軟件驗證設計缺陷

    1. 客戶端內置RSA私鑰,使得RSA發揮不出存在的意義。
    2. 硬件配置校驗生硬,雖然“請求碼”攻擊者無法解密,但完全可以在不利用“激活請求碼”的情況下,攻擊者自行讀取。
    3. 提示字符串過多,RSA和AES完全可以通過字符串提示猜到,而md5,base16,base64憑經驗也可識別。
    4. rec中簽名校驗未在注冊時觸發,不排除是作者設置的暗樁。







    評分

    參與人數 11威望 +19 飄云幣 +24 收起 理由
    sxchsky + 1 + 1 感謝發布原創作品,PYG有你更精彩!
    gagmeng + 5 + 5 感謝發布原創作品,PYG有你更精彩!
    飛天 + 1 + 1 感謝發布原創作品,PYG有你更精彩!
    俠骨留香 + 1 + 1 吃水不忘打井人,給個評分懂感恩!
    F-T + 1 + 1 感謝發布原創作品,PYG有你更精彩!
    linuxchao + 1 + 1 PYG有你更精彩!
    smallhorse + 1 + 1 贊一個,這個帖子很給力!
    phm335 + 1 + 1 原創精品 感謝分享!
    pentium450 + 1 + 1 原創精品 感謝分享!
    Rooking + 10 感謝發布原創作品,PYG有你更精彩!

    查看全部評分

    分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
    收藏收藏9 轉播轉播 分享分享 分享淘帖 頂 踩 掃碼贊助微信 微信分享
  • TA的每日心情
    開心
    5 小時前
  • 簽到天數: 803 天

    [LV.10]以壇為家III

    沙發
    發表于 2020-1-15 14:10:28 | 只看該作者
    前排收藏學習
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2019-3-25 15:21
  • 簽到天數: 487 天

    [LV.9]以壇為家II

    藤椅
    發表于 2020-1-15 14:14:19 | 只看該作者
    前排膜拜學習 試試看能不能手動算一組
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2020-2-12 12:06
  • 簽到天數: 21 天

    [LV.4]偶爾看看III

    板凳
    發表于 2020-1-15 14:34:35 來自手機 | 只看該作者
    非常期待的文章!前排就座學習,謝謝!
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2019-3-17 22:44
  • 簽到天數: 132 天

    [LV.7]常住居民III

    報紙
    發表于 2020-1-15 18:54:23 | 只看該作者
    膜拜~ 自帶公鑰了啊,多么痛的領悟~
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    前天 22:40
  • 簽到天數: 830 天

    [LV.10]以壇為家III

    地板
    發表于 2020-1-15 20:07:46 | 只看該作者
    自帶私鑰了啊
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2019-2-26 11:14
  • 簽到天數: 459 天

    [LV.9]以壇為家II

    7#
    發表于 2020-1-16 08:23:09 | 只看該作者
    666
    雖然自帶鑰匙   但是我還是不懂
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    前天 09:32
  • 簽到天數: 54 天

    [LV.5]常住居民I

    8#
    發表于 2020-1-16 14:06:01 | 只看該作者
    不錯不錯哦~~~~~~~~~~~
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2020-1-19 09:29
  • 簽到天數: 89 天

    [LV.6]常住居民II

    9#
    發表于 2020-1-16 17:03:27 | 只看該作者
    精品,感謝分享。。!
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    奮斗
    昨天 09:41
  • 簽到天數: 173 天

    [LV.7]常住居民III

    10#
    發表于 2020-1-17 17:17:13 | 只看該作者
    牛逼,分析思路值得學習
    回復 支持 反對

    使用道具 舉報

    您需要登錄后才可以回帖 登錄 | 快速注冊

    本版積分規則

    關閉

    站長推薦上一條 /1 下一條

    小黑屋|手機版|Archiver|飄云閣安全論壇 ( 粵ICP備15107817號-2 )|掃碼贊助

    Powered by Discuz! X3.3© 2001-2017 Comsenz Inc.

      
    快速回復 返回頂部 返回列表
    北单赔率为什么高