【原創】FastStone Capture 軟體註冊算法破解及註冊機編寫

2021-02-21 吾愛破解論壇

作者壇帳號:暴龍獸

FastStone Capture 註冊算法分析前言

前幾日準備找一個可以將錄屏轉成gif圖的軟體,無意間發現了FastStone Capture。安裝之後還需要註冊碼,碰巧還要申請一個大學的暑假實習,就花了四五天來分析一下註冊算法,並寫一下註冊機。溫馨提示:想要註冊碼的可以直接到文章結尾去下代碼,跑一跑就出來了。

註冊算法總流程圖

用戶名: 可以輸入任意長度的內容。
註冊碼: 輸入20個字節的字母,其中不能有數字。每五個字符之間用橫線分割,如:ZYXWV-UTSRQ-PONML-KJIHG。
註冊算法主要分為兩部分的驗證,將註冊碼分為三部分: rcode_one(前8位元組),rcode_two(中間8位元組),rcode_three(後4位元組).

驗證算法一

關鍵函數0x6D4FEC --> 0x6D472C

交叉過程

# 交叉函數涉及的數據只有username和rcode_one
def character_intersect(uname, rcode):
    uname_length = len(uname)
    rcode_length = len(rcode)
    s = ''
    i = j = num = 0
    while i < uname_length and j < rcode_length:
        if num % 2 == 0:
            s += uname[i]
            i += 1
        else:
            s += rcode[j]
            j += 1
        num += 1
    if j != rcode_length:
        s += rcode[j:8]
    if i != uname_length:
        s += uname[i:]
    return s.upper()

加密函數

加密函數涉及IDEA和BlowFish,Hash函數涉及Sha1和Sha512函數.
加密的內容: username和rcode_one 交叉的部分.

注意事項: 加密的方法有些不同,下面用代碼講解

# 由於字符串編碼為byte時, 會出現一個字節變成兩個字節的情況, 所以使用latin1編碼。
plain_text = t_third # username和registeration code的交叉部分
first_cipher = str()
# blowfish_encrypt_result 作為初始化的
blowfish_encrypt_result = bf.main_transform(0, 0)
for i in range(len(plain_text)):
    tmp = bf.main_transform(blowfish_encrypt_result[0], blowfish_encrypt_result[1])
    # 明文部分與得到結果的一個字節異或
    first_cipher += chr(((tmp[0] >> 24) & 0xff) ^ ord(plain_text[i]))
    # blowfish_encrypt_result 在內存中循環左移一個字節
    blowfish_encrypt_result[0] = ((blowfish_encrypt_result[0] << 8) & 0xffffffff) | blowfish_encrypt_result[1] >> 24
    blowfish_encrypt_result[1] = ((blowfish_encrypt_result[1] << 8) & 0xffffff00) | ((tmp[0] >> 24) & 0xff) ^ ord(plain_text[i])

first_cipher_base64 = base64.b64encode(first_cipher.encode('latin1'))

plain_text = first_cipher_base64 # IDEA 加密的部分是blowfish得到的base64結果
two_cipher = str()
IDEA_zero_byte = b'\x00\x00\x00\x00\x00\x00\x00\x00'
IDEA_encrypt_result = idea.encrypt(IDEA_zero_byte)

for i in range(len(plain_text)):
    tmp = idea.encrypt(IDEA_encrypt_result)
    # 明文部分與得到結果的一個字節異或
    two_cipher += chr(tmp[0] & 0xff ^ plain_text[i])
    IDEA_encrypt_result = IDEA_encrypt_result[1:] + chr(tmp[0] & 0xff ^ plain_text[i]).encode('latin1')

two_cipher_base64 = base64.b64encode(two_cipher.encode('latin1'))

函數0x6C4D78

(Sha1, blowfish)和(sha512, IDEA)都在此函數中完成,但傳入的參數不同,應該是使用面向對象中的某些性質. 此函數主要完成hash函數和子密鑰的生成.

校驗部分

提取密文中的大寫字符,與rcode_two進行比較.

驗證算法二

函數0x6D50C0 --> 0x6D4BB8, 交叉函數和驗證算法一一樣.

加密函數

加密函數涉及IDEA和BlowFish,Hash函數涉及Sha1和Sha512函數。
加密的內容: username和rcode_one交叉的部分。

# IDEA encrypt
plain_text = (s_third).encode('utf-8')
plain_length = len(plain_text)
first_cipher = bytearray(plain_length)
IDEA_zero_byte = b'\x00\x00\x00\x00\x00\x00\x00\x00'
IDEA_encrypt_result = idea.encrypt(IDEA_zero_byte)
times = ord(register_code[0]) - 0x31
# 多次使用idea加密
for i in range(plain_length * times):
    tmp = idea.encrypt(IDEA_encrypt_result)
    #
    first_cipher[i % plain_length] = tmp[0] & 0xff ^ plain_text[i % plain_length]
    IDEA_encrypt_result = IDEA_encrypt_result[1:] + chr(tmp[0] & 0xff ^ plain_text[i % plain_length]).encode('latin1')

first_cipher_base64 = base64.b64encode(first_cipher)
print("the middle 8 character, IDEA base64 cipher" + str(first_cipher_base64))

# blowfish encrypt,明文部分為上一步加密之後的base64編碼
plain_text = first_cipher_base64
two_cipher = bytearray(len(plain_text))
blowfish_zero_byte = b'\x00\x00\x00\x00\x00\x00\x00\x00'
blowfish_encrypt_result = bf.main_transform(0, 0)
for i in range(len(plain_text)):
    tmp = bf.main_transform(blowfish_encrypt_result[0], blowfish_encrypt_result[1])
    # 明文與8位元組結果的一個字節異或
    two_cipher[i] = (tmp[0] >> 24) & 0xff ^ plain_text[i]
    blowfish_encrypt_result[0] = ((blowfish_encrypt_result[0] << 8) & 0xffffffff) | blowfish_encrypt_result[1] >> 24
    blowfish_encrypt_result[1] = ((blowfish_encrypt_result[1] << 8) & 0xffffff00) | ((tmp[0] >> 24) & 0xff) ^ plain_text[i]

two_cipher_base64 = base64.b64encode(two_cipher)

函數0x6C4D78

與驗證算法一中的一樣.

校驗部分

提取加密結果中的大寫字符,與rcode_three相比較。

<h3 id="32643451_破解思路">破解思路

整個驗證思路:

username和rcode_one進行組合,結果為intersection_string。

驗證算法一對intersection_string進行運算,提取前8個大寫字符,與rcode_two比較。

驗證算法二對intersection_string進行運算,提取前8個大寫字符,與rcode_three比較。

兩個比較結果都為真,即可驗證成功。
破解方法:

輸入用戶名username和隨機生成8位元組字符串s1,組合後結果為s。

驗證算法一對s進行運算,提取前8個大寫字符,作為s2。

驗證算法二對s進行運算,提取前4個大寫字符,作為s2。

最終的註冊碼為strcat(s1, s2, s3).

其他部分

以上內容介紹的是主要的驗證算法,還有其他的一些函數,順便介紹一些。

如何生成對應類型(Family、Educational、Corporate)的註冊碼? 下面用代碼來進行說明:

# 下面是生成對應類型的註冊碼,校驗方法也很簡單
# 提取rcode_one中的3、7、5、1四個位置的字符,分別與'M'、'D'、'I'、'O'四個字符相減
# 得到的四個數字依次拼接,與下面數字進行比較
# 1111 --> Family License that covers up to 5 computers
# 4997 --> Educational Site License
# 4998 --> Educational Worldwide License
# 4999 --> Corporate Site License
# > 5000 --> Corporate Worldwide License
# FVLQORJM -->  Educational Site License
def generate_8_upper_case():
    # Family License that covers up to 5 computers 1111
    family_registeration_code = "{0}{1}{2}{3}{4}{5}{6}{7}".format(randomString(1), 'P', randomString(1), 'N', randomString(1), 'K', randomString(1), 'E')
    # Educational Site License 4997
    education_site_registeration_code = "{0}{1}{2}{3}{4}{5}{6}{7}".format(randomString(1), 'V', randomString(1), 'Q', randomString(1), 'R', randomString(1), 'M')
    # Educational Worldwide License 4998
    education_worldwide_registeration_code = "{0}{1}{2}{3}{4}{5}{6}{7}".format(randomString(1), 'W', randomString(1), 'Q', randomString(10), 'R', randomString(1), 'M')
    # Corporate Site License 4999
    Corporate_site_registeration_code = "{0}{1}{2}{3}{4}{5}{6}{7}".format(randomString(1), 'X', randomString(1), 'Q', randomString(1), 'R', randomString(1), 'M')
    # Corporate Worldwide License  5000
    corporate_worldwide_registeration_code = "{0}{1}{2}{3}{4}{5}{6}{7}".format(randomString(1), 'T', randomString(1), 'R', randomString(1), 'K', randomString(1), 'E')

    return [family_registeration_code, education_site_registeration_code, education_worldwide_registeration_code, Corporate_site_registeration_code, corporate_worldwide_registeration_code]

總結

雖然看雪上面也有一篇關於破解FastStone Viewer,但破解這個軟體還是花了四五天的時間。其實兩者驗證算法極其相識,但註冊碼還是不能通用,原因就是其中一個字符串不同,FastStone Viewer為96332, FastStone Capture為96338. 將FastStone Viewer這篇文章中提到的註冊機中的字符串96332修改為96338,生成的註冊碼也是可以用的.

心得

這是第一次真正的破解一個軟體,雖然看了別人破解內容,但自己實地操作還是遇到許多坑,尤其是面向對象的一些性質。另外,就是一些加密算法要非常熟悉,這樣才能整個數據的變化非常清楚,例如:FastStone Capture的BlowFish加密的內容不是用戶名和註冊碼交叉的部分。

註冊機

https://github.com/pwnmelife/FastStone-Capture-Key-Generate.git

--官方論壇

www.52pojie.cn

--推薦給朋友

公眾微信號:吾愛破解論壇

或搜微信號:pojie_52

相關焦點

  • faststonecapture怎麼改成中文?
    Faststonecapture是當下一款比較受歡迎的截圖小程序,那麼faststonecapture有沒有中文版呢?Faststonecapture怎麼改成中文?今天一起來看一下faststonecapture怎麼改成中文吧,一起來學習一下吧!
  • faststone下載後怎麼是英文版?faststone capture怎麼設置中文?
    看到好的文章想要分享,但是軟體裡面不能分享,只能截圖,一段一段的又很麻煩,所以嘗試使用FastStone的長截屏功能,但是FastStone下載後怎麼是英文版?Faststonecapture怎麼設置中文?還有就是滾動截屏怎麼用呢?
  • 某專業軟體的註冊碼分析破解+寫註冊機!
    請勿用於非法用途 下載後24小時內刪除(這個軟體我相信對於99.9%的人是沒用的)專業人士專用軟體 相信對於大多數人沒用,所以本文的目的是學習交流思路首先查看軟體註冊頁面 軟體360加固的 然後脫殼。。。
  • PSCC2020中文版軟體安裝教程和PS2020軟體破解教程
    、安裝好Adobe雲盤軟體後,打開軟體進行設置,關掉常規設置裡的按鈕,然後選擇應用程式,關閉自動更新,然後更改軟體安裝位置,除C盤以為的其他盤都可以安裝,安裝位置都必須是英文的9、設置完上面的內容之後,找到PS,點擊試用,軟體會自動進行PS軟體安裝10、軟體會自動安裝的進程中,等到安裝完成
  • 資料庫軟體Navicat Premium v15.0.13中文破解版
    小編帶來Navicat Premium v15.0.13中文破解版,親測可用,附帶註冊機和使用方法,有需要的朋友發送Navicat 即可獲取資源下載。默認安裝目錄【C:\Program Files\PremiumSoft\Navicat Premium 15】3、成功安裝,接下來進行破解操作;4、成功安裝後,點擊finish即可,先不要打開軟體,5、將Keygen激活工具複製到軟體安裝目錄下雙擊運行,先patch
  • AutoCAD2014軟體安裝詳細教程+註冊機的使用
    9、找到文件中的註冊機X-force,每個安裝包裡面都有這個註冊機,如果解壓後沒有這個程序,說明被你的防火牆自動刪除了,你可以先關閉防火牆,再進行解壓。10、註冊機X-force使用:右鍵以管理員方式打開,刪除兩行內的文字,在第一行複製軟體的申請號,點擊註冊機中的path,出現激活成功英文提示,如果沒有成功的英文提示可以看後面小編給你的解決方法。
  • Mac-圖像處理軟體破解套餐
    無註冊機安裝破解已破解,下載後直接拖入應用程式中使用。有【keygen】註冊機安裝破解後臺回復「Capture」1、斷網;2、先將軟體直接拖入應用程式中,然後打開「Capture One 12」,點擊 「Pro」 ,點擊 「激活」 ,出現條款,「勾選」 點擊 「接受」,出現註冊界面;3、雙擊打開下載文件中的 「keygen」 註冊機;4、
  • 軟體註冊碼破解
    寫在破解之前:::軟體破解的目的是:有些需要註冊的軟體,可是找不到註冊碼,將其破解之後,輸入任何註冊碼都會提示註冊成功。聲明:此貼適合從來沒接觸過軟體破解或編程的朋友學習。高級,寫出註冊機二.用w32dasm破解的一般步驟:1.看軟體的說明書,軟體註冊與不註冊在功能上有什麼區別,如何註冊2.運行此軟體,試著輸入你的姓名和任意註冊碼去註冊,有什麼錯誤提示信息,將錯誤提示信息記下來3.偵測有無加殼
  • 【Android 原創】某APK註冊機制分析與多思路破解方法
    於是簡單分析了下,並對so文件裡的算法進行了分析。原帖地址:http://www.52pojie.cn/thread-196268-1-1.html原帖的作者對破解技術進行了部分講解。下面我將以軟體註冊機制和多思路破解兩部分進行詳細講解--一 軟體註冊機制分析篇--首先,軟體安裝後,如圖所示, 在右上角提示註冊,點擊後提示找回註冊和註冊說明,並提示了註冊碼(在不同的模擬器中顯示不一樣)
  • 室內設計乾貨:3dsmax2020軟體的安裝及破解註冊方法與技巧
    Autodesk 3DS Max 2020註冊機是針對Autodesk 3DS Max 2020軟體而開發的產品激活碼生成器,通過這款軟體可以直接對軟體進行激活破解,此次破解必須在斷網的情況下進行,請大家知道。
  • AutoCAD2010註冊機如何用 CAD2010註冊機使用方法
    有很多小夥伴想要知道AutoCAD2010註冊機如何註冊產品,應該要怎麼操作呢?下面通過這篇文章給大家介紹一下cad2010如何使用註冊機,一起往下看。AutoCAD軟體版本:2010 正式版圖形圖像立即查看1、安裝AUTO CAD2010 序列號:356-72378422productkey:001B12、先把註冊機解壓到安裝目錄。
  • CAD2016簡體中文版含註冊機下載
    溪風博客整理:Autocad2016是一款工程製圖必備軟體
  • 【權威發布】吾愛破解論壇2020年優秀、精華TOP榜(上)
    .52pojie.cn/thread-1094212-1-1.html10kabeo由寄存器位數差異引發的漏洞利用https://www.52pojie.cn/thread-1094369-1-1.html11驚蟄【2020春節】解題領紅包之二 解題過程https://www.52pojie.cn/thread-1095326-1-1.html12solly[新春禮物]_0_1_0_Editor 註冊算法分析及全部版本註冊機
  • Adobe Photoshop CC 2018安裝破解
    :簡體中文如果這個版本不在您的狩獵範圍內,或者需要其它軟體,可關注公眾號:閒語茶杯,然後進入軟體模塊查找下載。4、完成安裝後,程序會自行打開軟體,並再次彈出登錄界面,點擊登錄按鈕,在彈出來的窗口裡輸入步驟2註冊的帳號就登錄就好了。
  • [Win] 軟體漢化工具Sisulizer Enterprise v4.0 中文版附帶註冊機
    Sisulizer Enterprise Edition是一款支持多國語言的本地漢化軟體,用戶通過該軟體能夠將任意應用程式自動翻譯為指定語言,完成這一切操作
  • 「軟體」達文西17軟體中文破解版安裝教程
    達文西調色17中文破解版是一款集專業8K剪輯、調色、視覺特效和音頻後期製作為一體的多功能後期處理軟體,各位使用這款軟體可以對視頻進行剪輯、調色、特效和音頻流程等一鍵設置,可以為各位帶來更加便利的視頻編輯工作平臺,作為一款優秀的後期處理工具,它所具備的強大後期處理功能受到了很多好萊塢影片
  • AutoCAD2016【CAD2016】官方破解中文版安裝圖文教程、破解註冊方法
    安裝前的準備:請先在文章下方下載【CAD2016】軟體內含破解文件
  • Adobe CC 2018全系列軟體下載更新99使用哦~
    Adobe家族最新更新註冊機2017版本(教程使用方法往下看 ↓↓↓ )註明:2017版本的註冊通用2017版本所有Adobe軟體以及2017版本以下的所有版本,也就是說,拿到這個註冊機可以破解所有Adobe的軟體。
  • 16位NE程序逆向調試:CrackMe012獨家全破(視頻+圖文+註冊機源碼)
    >【學習層次】能成功調試16位NE程序靜態+動態分析清楚算法解決精度誤差導致的無法破解的問題詳解視頻很長很刺激,獨破16位動態調試環境的搭建       00:00 至 00:18逆向分析算法                00:18 至 00:55
  • Maya 2019破解教程及示例
    Maya軟體介紹:Maya(瑪雅)是美國Autodesk公司於1998年出品的世界頂級三維動畫軟體,主要應用於專業的影視廣告、角色動畫、電影特技等方面。破解以及註冊機注意:破解前最重要的一項便是拔網線,只有在脫機情況下,才有可能破解成功。