飄云閣(PYG官方)

 找回密碼
 快速注冊

QQ登錄

只需一步,快速開始

查看: 426|回復: 15
打印 上一主題 下一主題

[macOS] MDB ACCDB Viewer 2.2.7 授權機制純靜態分析

  [復制鏈接]
  • TA的每日心情
    開心
    2016-6-16 14:07
  • 簽到天數: 10 天

    [LV.3]偶爾看看II

    跳轉到指定樓層
    樓主
    發表于 2020-4-20 15:37:48 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
    # MDB ACCDB Viewer 2.2.7 授權機制純靜態分析

    0x00 目標介紹

    MDB ACCDB Viewer使您可以在macOS上打開Microsoft Access數據庫。官方網站:<https://eggerapps.at/mdbviewer/>

    前幾天順便看了下論壇有個求助帖需要分析mdb的加密方式,順便找到了這個App,由于授權比較簡單,所以采用純靜態方式做個教程。

    0x01 尋找切入點

    打開App,在界面左上角出現了“Free Trial”的友好提示。如下圖所示。



    通過查看各項菜單,均未發現有輸入注冊碼的地方,由此可得出兩個結論:

    1.該App為純Demo版本,購買后會提供另外一個完整版。
    2.該App采用了keyfile(授權文件)方式授權。

    為了盡快的弄清楚到底是上面哪一種情況,筆者先打開該App的官方,發現了一段信息,如下圖所示。



    這里很明顯的說明了,該App提供了完整的功能,只是導出數據有限制。順手測試一下如下圖所示。



    接下來只要分析出keyfile格式就可以破解它了。

    搜索字符串“Free Trial”,很順利找到兩處交叉引用,如下圖所示。



    很顯然第一處引用就是顯示授權信息的地方,進去一眼看出“Free Trial”字符串由``-[MDBAppDelegate isTrial]``方法控制,如下圖所示。





    切入點已經找到,接下來由此方法展開深入分析。

    0x02 分析試用版控制邏輯

    查看``-[MDBAppDelegate isTrial]``偽代碼很簡短,先判斷了``licenseData``是否有數據,無數據的話直接返回``true``進入試用狀態。返回值保存在v5變量中,如下圖所示。



    這里出現的``licenseData``是關鍵,而且是個字典類型(第五行有類型提示),需要有一個``ProductBundleId``字段,其內容為應用的BundleIdentifier,然后調用``-[MDBAppDelegate isLicenseInvalidated:]``方法校驗數據來控制最終的返回結果。

    到這里試用版控制邏輯就分析完畢了,如果僅僅爆破的話,直接將v5改為``false``即可,本文目的顯然不是爆破,F在的任務是先找到``licenseData``的賦值點,才能進行授權機制分析。

    0x03 分析licenseData來源

    由``self->licenseData;``一句可知,``licenseData``是``MDBAppDelegate``的成員,那么在該類中必定存在某個方法會對該成員進行賦值。在IDA的函數列表中,按照類名``MDBAppDelegate``過濾,找到一些看似有關聯的方法,其中``-[MDBAppDelegate readLicense]``方法有很大嫌疑,如下圖所示。


    進入該方法查看偽代碼,依然很簡短,首先讀取了一個特定的文件,然后判斷文件是否存在,存在的話就調用``sub_1000223E3``函數,它的返回值就是``licenseData``,如下圖所示。



    接著按照該邏輯逐個分析,現在確定授權文件路徑。

    授權文件URL由``-[MDBAppDelegate licenseFileURL]``方法獲取,進入查看偽代碼如下圖所示。



    這里雖然是一些常規的操作,但第一眼看過去,只能確定文件名為``license.mdbviewer-license``,且上一級路徑取自App自身的BundleIdentifier,打開Info.plist查看可知為``at.eggerapps.mdbviewer``,如下圖所示。



    因此路徑格式``xxxx/at.eggerapps.mdbviewer/license.mdbviewer-license``,``xxxx``來源于``NSFileManager``類的``"URLsForDirectory:inDomains:``方法,也就是應用的沙盒相關的路徑,傳入的兩個參數分別為14和1。該方法原型如下:

    [Objective-C] 純文本查看 復制代碼
    - (NSArray<NSURL *> *)URLsForDirectory:(NSSearchPathDirectory)directory inDomains:(NSSearchPathDomainMask)domainMask
    


    第一個參數類型為NSSearchPathDirectory,第二個參數類型為NSSearchPathDomainMask。在Xcode里面查看一下宏定義,分別如下圖所示。





    因此可以知道授權文件位于沙盒的``Library/Application Support``子目錄中。沙盒主目錄固定為:`` /Users/{你的用戶名}/Library/Containers/{應用的BundleIdentifier}/Data/``,所以在筆者機子上得到的授權完整路徑為:

    [Bash shell] 純文本查看 復制代碼
    /Users/piao/Library/Containers/at.eggerapps.mdbviewer/Data/Library/Application Support/at.eggerapps.mdbviewer
    


    0x04 授權文件結構

    前面分析過了licenseData是個字典類型,那么``at.eggerapps.mdbviewer``文件自然就是個plist文件。先結合之前的分析偽造一點數據作為本節的分析。


    [XML] 純文本查看 復制代碼
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>ProductBundleId</key>
        <string>at.eggerapps.mdbviewer</string>
        <key>Unknow</key>
        <string>88888888</string>
    </dict>
    </plist>
    


    4.1 必要字段

    進入``sub_1000223E3``函數,先調用``CFURLCreateDataAndPropertiesFromResource``函數校驗了文件,接著繼續調用``sub_100022343``函數處理數據,如下圖所示。



    進入``sub_100022343``函數,可以看到授權文件里面如果存在``Signature``字段,則把剩下的內容傳出去(沒有對Signature字段做任何校驗,僅僅是個擺設,因此可以隨便亂輸入一些東西),否則傳出空字典,如下圖所示。



    因此修正``at.eggerapps.mdbviewer``文件內容:

    [XML] 純文本查看 復制代碼
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Signature</key>
        <string>Cracked By PiaoYun/P.Y.G</string>
        <key>ProductBundleId</key>
        <string>at.eggerapps.mdbviewer</string>
        <key>Unknow</key>
        <string>88888888</string>
    </dict>
    </plist>
    


    4.2 數據驗證

    ``licenseData``里面已經有數據,現在是時候回過頭來看看``-[MDBAppDelegate isLicenseInvalidated:]``方法了,這是最后的堡壘,如下圖所示。



    這里很明顯,只要有個``Order``字段,且不是黑名單中的``EGG130624-6895-78104``、``EGG130805-1334-17112`` 即可,除此之外無任何其他校驗。

    繼續修正``at.eggerapps.mdbviewer``文件:

    [XML] 純文本查看 復制代碼
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Signature</key>
        <string>Cracked By PiaoYun/P.Y.G</string>
        <key>ProductBundleId</key>
        <string>at.eggerapps.mdbviewer</string>
        <key>Order</key>
        <string>123454</string>
    </dict>
    </plist>
    


    0x05 光明之巔

    按照邏輯來說此時應該是授權狀態了。運行App測試一下功能正常,但是授權信息后面沒有顯示具體用戶名,而是顯示匿名用戶(``Anonymous User``),如下圖。



    雖然這個顯示無傷大雅,但不留個大名在上面,總覺得欠缺點什么,繼續分析。字符串查找``Anonymous User``交叉引用,找到``-[MDBAppDelegate licenseeName]``方法,偽代碼如下圖所示。



    這里已經非常清楚了,如果存在``Company``或者``Name``字段,才會顯示具體的用戶名,否則顯示``Anonymous User``,那么還等什么,繼續修正``at.eggerapps.mdbviewer``文件:

    [XML] 純文本查看 復制代碼
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Signature</key>
        <string>123454</string>
        <key>ProductBundleId</key>
        <string>at.eggerapps.mdbviewer</string>
        <key>Order</key>
        <string>88888888</string>
        <key>Company</key>
        <string>[url=http://www.225859.buzz]www.225859.buzz[/url]</string>
    </dict>
    </plist>
    


    再次運行,飛向光明之巔,如下圖所示。



    0x06 本文小結

    本例子采用經典的keyfile校驗的方式,且無任何加密算法,非常適合練手和熟悉macOS應用的一些常規文件目錄操作流程。

    評分

    參與人數 3威望 +7 飄云幣 +12 收起 理由
    Arsage + 1 + 1 PYG有你更精彩!
    Rooking + 5 + 10 學習使我快樂,愛學習愛運動
    不破不立 + 1 + 1 感謝發布原創作品,PYG有你更精彩!浪里個.

    查看全部評分

    分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
    收藏收藏5 轉播轉播 分享分享 分享淘帖 頂1 踩 掃碼贊助微信 微信分享
  • TA的每日心情
    開心
    2016-6-16 14:07
  • 簽到天數: 10 天

    [LV.3]偶爾看看II

    沙發
     樓主| 發表于 2020-4-20 16:02:08 | 只看該作者
    感謝R版糾正細節~~

    點評

    LCC
    真想不出還有什么平臺能阻擋住飄云大大的腳步。!  詳情 回復 發表于 2020-4-22 09:06
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    12 小時前
  • 簽到天數: 898 天

    [LV.10]以壇為家III

    藤椅
    發表于 2020-4-20 17:30:31 | 只看該作者
    好貼收藏有機會實踐,浪里個浪
    回復 支持 反對

    使用道具 舉報

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

    [LV.9]以壇為家II

    板凳
    發表于 2020-4-20 17:38:48 | 只看該作者
    學習使我快樂,愛學習愛運動
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    無聊
    13 小時前
  • 簽到天數: 123 天

    [LV.7]常住居民III

    報紙
    發表于 2020-4-20 19:54:55 | 只看該作者
    跟隨大神的步伐,征戰macOS
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2020-4-28 00:14
  • 簽到天數: 29 天

    [LV.4]偶爾看看III

    地板
    發表于 2020-4-21 00:15:33 | 只看該作者
    好貼收藏有機會實踐,浪里個浪
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    奮斗
    11 小時前
  • 簽到天數: 262 天

    [LV.8]以壇為家I

    7#
    發表于 2020-4-21 09:54:21 | 只看該作者
    感謝飄大的分享,mark一下 以后學習研究
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    昨天 09:24
  • 簽到天數: 96 天

    [LV.6]常住居民II

    8#
    發表于 2020-4-21 13:26:49 | 只看該作者
    來跟著大佬學習了,&#128513; 謝謝
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    奮斗
    2020-4-24 10:42
  • 簽到天數: 6 天

    [LV.2]偶爾看看I

    9#
    發表于 2020-4-21 19:22:58 | 只看該作者
    飄哥,你這篇文章寫的太棒了,能不能對我那個mdb文件解密需求出個教學貼呀

    點評

    等哪天我有心情玩Windows了再說  詳情 回復 發表于 2020-4-21 21:55
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2016-6-16 14:07
  • 簽到天數: 10 天

    [LV.3]偶爾看看II

    10#
     樓主| 發表于 2020-4-21 21:55:45 | 只看該作者
    [quote][url=forum.php?mod=redirect

    等哪天我有心情玩Windows了再說
    回復 支持 反對

    使用道具 舉報

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

    本版積分規則

    關閉

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

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

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

      
    快速回復 返回頂部 返回列表
    捕鱼达人3最早的版本