【OCR識別】使用OCR技術還原加密字體文字

文章目錄

  • 1. 寫在前面
  • 2. 頁面分析
  • 3. 字符知識
  • 4. 加密分析

【作者主頁】:吳秋霖
【作者介紹】:Python領域優質創作者、阿里云博客專家、華為云享專家。長期致力于Python與爬蟲領域研究與開發工作!
【作者推薦】:對JS逆向感興趣的朋友可以關注《爬蟲JS逆向實戰》,對分布式爬蟲平臺感興趣的朋友可以關注《分布式爬蟲平臺搭建與開發實戰》
還有未來會持續更新的驗證碼突防、APP逆向、Python領域等一系列文章

1. 寫在前面

??目前市面上有不少的網站使用了字體加密技術,像一些重要的數字內容使用字體加密很常見!從早期的靜態固定字體文件隨著不斷的對抗演進到目前的動態字體文件,從PC端的應用到目前APP頁面的普及使用

本期文字將以紅色小番茄為例,咱們使用OCR識別技術來攻克一下字體加密

2. 頁面分析

我們打開首先網站分析一下,可以看到響應的HTML內容中網頁顯示的本文內容,均是看起來晦澀難懂的字符,這就是字體加密。如下所示:

在這里插入圖片描述

對于Web端的字體加密,我們可能都知道會有相應的woff類型的文件,存儲著自定義的字體,它的作用則是讓網站能夠使用這些自定義的字體來顯示加密的文本內容,如下所示:

在這里插入圖片描述

3. 字符知識

在真正的內容分析開始之前,我們需要了解的一些知識點。這里不知道的朋友認真學,所有的中文漢字它都自己對應的一串數字碼,也叫做Unicode碼點,這是一種國際化的字符編碼標準!為世界上幾乎所有的字符集提供了一個唯一的標識

它們是一個非負整數,如下作者隨機打印了幾個示例:

在這里插入圖片描述

同理我們使用Python的內置函數ord可以查看字符的碼點,chr函數則將碼點轉換為字符

4. 加密分析

接下來,這里將網頁中加密的文本拿一小段下來簡單的進行一個測試。使用ord打印一下所有字符的碼點,可以看到一個特征!就是每一個被加密的字體對應的碼點都是58…這樣的,如下所示:

在這里插入圖片描述

這個時候我們則需要將上面提到的woff文件下載下來,并使用fontTools庫來加載字體并解析其結構,代碼如下:

from fontTools.ttLib import TTFonturl = 'https://lf6-awef.bytetos.com/obj/awesome-font/c/dc027189e0ba4cd-700.woff2'response = requests.get(url).content
with TTFont(BytesIO(response)) as font_parse:u_d = font_parse.getBestCmap())

將會得到一個碼點與字體編碼對應的字典,如下所示:

{58344: 'gid58344', 58345: 'gid58345', 58346: 'gid58346', 58347: 'gid58347', 58348: 'gid58348', 58349: 'gid58349', 58350: 'gid58350', 58351: 'gid58351', 58352: 'gid58352'}

接下來,我們需要將gid編碼對應的文字信息拿到,并建立字典。方便我們后續在對文本內容進行還原的時候調用,加密字體編碼如何對應明文數據,代碼實現如下:

unicode_reuslt = []
for key, _ in u_d.items():unicode_reuslt.append(key)
char_list = [chr(ch_unicode) for ch_unicode in unicode_reuslt]
normal_dict, error_dict = font_to_img(char_list, ttf_name)
new_dict = {ord(key): value for key, value in normal_dict.items()}
print(new_dict)

在這里將使用到OCR識別技術,去還原加密字體的文字,這也是當前比較主流的一種方案,代碼實現如下所示:

def font_to_img(code_list, filename, score=0.95):normal_dict = {}ocr = CnOcr()for char_list in code_list:char_code = char_list.encode().decode()img_size = 1024img = Image.new('img', (img_size, img_size), 255)draw = ImageDraw.Draw(img)font = ImageFont.truetype(filename, int(img_size * 0.7))x, y = draw.textsize(char_code, font=font)draw.text(((img_size - x) // 2, (img_size - y) // 2), char_code, font=font, fill=0)img = img.convert("RGB")word = ocr.ocr_for_single_line(np.array(img))normal_dict[char_code] = word["text"]return normal_dict

如上代碼,這里簡單解讀一下!score參數表示OCR對該文本的識別得分,上面代碼中沒有使用的原因是有較小概率的丟失率!這個問題可以找一些更精準的模型來識別

再說說識別文字的流程與原理,上面使用Image來創建了一個白色的背景圖像,然后使用ImageDraw在圖像上繪制出字符,字體大小為圖像大小的70%

然后將圖像轉換為RGB格式,最后使用Ocr對圖像進行單行識別,獲取識別結果以及識別得分,結果如下所示:

在這里插入圖片描述

接下來,我門需要做的就是對加密的文本內容進行遍歷,對每一個字符進行編碼轉換,得到對對應的碼點!提取碼點為58特征的加密字體,然后從上面字典獲取對應的文字,如下所示:

在這里插入圖片描述

最終我們再通過上述的代碼將加密打散還原出來的加密字體文字,拼接成完整的句子。這里的話我們將所有加密特征與非加密文字內容完成組裝即可,最終內容還原如下所示:

在這里插入圖片描述

以上是加密字體文字內容還原的全部流程,如需要完整的Python代碼進行測試或學習,可聯系作者獲取!

??好了,到這里又到了跟大家說再見的時候了。創作不易,幫忙點個贊再走吧。你的支持是我創作的動力,希望能帶給大家更多優質的文章

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711018.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711018.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711018.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

減少頁面加載時間:提升用戶體驗的關鍵

?? 祝屏幕前的您天天開心,每天都有好運相伴。我們一起加油!?? 🎈🎈作者主頁: 喔的嘛呀🎈🎈 目錄 引言 一、為什么頁面加載時間重要? 二、如何減少頁面加載時間? …

qiankun微前端使用

微前端是什么? 微前端就是頁面的某個功能可以獨立為一個項目進行開發、部署。比如:自己的項目使用iframs引入百度 qiankun qiankun是一個基于single-spa的微前端實現庫,qiankun 對于用戶而言只是一個類似 jQuery 的庫,你需要調…

Mysql 數據類型的轉換之 cast()

語法 cast( value as type) value 要進行數據轉換的值(可以為任何類型)。type 要轉換為的數據類型。type 的常見的類型可以為 : decimal十進制浮點數。可以使用可選的 M 和 D 參數指定最大位數 (M) 和小數點后的位數 (D)float浮點數dou…

信息安全應急響應方法詳解

預防措施 定期進行安全漏洞掃描和修復強化身份驗證和訪問控制加強網絡安全防護和監控建立災難恢復和應急預案 應急響應步驟 識別和確認安全事件 監控系統日志和警報,快速發現異常行為利用安全信息和事件管理系統(SIEM)進行實時監控 隔離受…

華潤置地品牌虛擬代言人IP“吉吉”,開啟地產數字化營銷新場景

在數字化營銷時代,房地產品牌通過虛擬人技術,可以有效鏈接購房者,占領客戶心智,優化購房體驗,塑造年輕化、數字化的品牌形象。 華潤置地積極擁抱數字變革,通過廣州虛擬動力「現場虛擬主持技術服務」與「虛…

leetcode-數字轉換為十六進制

405. 數字轉換為十六進制數 題解: 首先,我們需要創建一個映射表,將十進制數0-15映射到十六進制數的字符0-f。然后,我們需要處理負數的情況。對于負數,我們首先將其轉換為補碼形式,然后再進行轉換。接下來…

【Unity】使用Unity實現雙屏顯示

引言 在使用Unity的時候,有時候會需要使用雙屏顯示 簡單來說就是需要在兩個顯示器中顯示游戲畫面 雙屏顯示注意點: ①雙屏顯示需要電腦有兩個顯示 ②雙屏顯示只能用于PC端 ③不僅僅可以雙屏,Unity最大支持8屏顯示 1.相機設置 ①我們打開Un…

Untiy webgl iis服務器加載ab包報404.3,需要為AB包添加MIMI映射

首選確定一下文件在不在 這里是缺少對于AB包文件類型的映射,因為AB包沒有后綴名,我們為服務器添加通用的映射 1 開始菜單搜索iis管理器,先選中我們的服務器,然后雙擊進入MIME類型 2 右側點擊添加按鈕 3 添加如下內容 文件擴展名為. 類型為…

JAVA學習-控制執行流程.函數

一、Java中的控制執行流程的主要方式有以下幾種: 1. 條件語句(if-else語句、switch語句): 根據條件選擇不同的執行路徑。 2. 循環語句(for循環、while循環、do-while循環): 重復執行某段代碼…

性能測試-并發測試心得

一些關鍵名詞 吞吐量 指的是在一定時間內系統處理請求或傳輸數據的能力,具體到性能測試中的話,就是指單位時間內系統處理并完成的請求數量或者是系統傳輸的數據量。 例如,吞吐量可以表示為系統每秒處理HTTP請求次數,或者是系統…

服務器git安裝python包失敗,如何手動下載github項目包并安裝到虛擬環境中(簡單易懂)

背景: 想要復現一個項目,建立好虛擬環境后,準備安裝項目需要的包,故輸入命令pip install -r requirements.txt requirements.txt如下圖 其他包我都安裝成功了,只有最后一個包失敗了,是需要服務器git鏈接…

【學習心得】解決無限debugger的常用方法

一、什么是無限debugger 有些網站為了防止爬蟲或其他惡意行為,會故意設置無限debugger作為一種簡單的反爬機制,它會在開發者工具打開的情況下不斷暫停執行。這對于想要分析其他代碼邏輯、排查問題或進行正常開發調試工作的開發者來說極為不便。 二、解決…

Sora學習筆記

Sora - 探索AI視頻模型的無限可能 隨著人工智能技術的飛速發展,AI視頻模型已成為科技領域的新熱點。而在這個浪潮中,OpenAI推出的首個AI視頻模型Sora,以其卓越的性能和前瞻性的技術,引領著AI視頻領域的創新發展。讓我們將一起探討…

ios 使用window.location.href 不能跳轉微信短鏈處理過程以及解決方法

需求背景: 由h5提供頁面,通過后臺請求微信api生成對應的schemal短鏈,該h5頁面嵌入到原生的ios以及安卓app上,當用戶點擊后通過短連接跳轉到其他小程序中 以下為生成微信scheme代碼示例,生成后短鏈為:weixi…

linux常見signal信號總結

文章目錄 SIGSEGVSIGALRMSIGINTSIGCHLD SIGSEGV 在POSIX兼容的平臺上,SIGSEGV是當一個進程執行了一個無效的內存引用,或發生段錯誤時發送給它的信號 SIGALRM 已到通過調用alarm函數注冊的時間 SIGINT 輸入cltrlc SIGCHLD 子進程終止

【分享】在 Python 編程中提高效率的技巧

在 Python 編程中,有許多技巧可以幫助提高效率,從代碼優化到工作流程改進。 以下是一些可以分享的技巧: 1、使用列表推導式和生成器表達式:列表推導式和生成器表達式是 Python 中的一種簡潔而高效的方法,用于快速創建…

Azure[Sky] Dynamic Skybox

Azure[Sky] Dynamic Skybox是一個完整而穩健的天空系統,它可將你的項目提升大到其他層次。 Azure[Sky] 不僅適合使用現實圖片的項目,事實上,該系統用在風格化圖片的項目也很不粗,甚至效果更好。使用 Azure,每種風格都能實現最佳效果。 性能: 在開發此資源的過程中,性能是…

【Android】屬性動畫

在屬性動畫出現之前,Android 系統提供的動畫只有幀動畫和 View 動畫。View 動畫我們都了解,它提供了 AlphaAnimation、RotateAnimation、TranslateAnimation、ScaleAnimation 這4種動畫方式,并提供了 AnimationSet 動畫集合來混合使用多種動畫…

35. 【Linux教程】Linux 修改用戶組

前面小節介紹了如何添加用戶組,本小節介紹如何給已經添加的新用戶組修改信息,從 /etc/group 文件信息可以看到,用戶組的信息比用戶信息項少,和 usermod 命令類似,用戶組的信息可以使用 groupmod 命令修改。 1. groupmo…

為了董宇輝,老婆跟我打起來了!寫下一份深刻檢討

兩個月前,因為討論董宇輝小作文事件,跟老婆吵起來了。起因就為了兩句話,寫了這份檢討!給大家分享一下。 老婆在網上刷了兩晚關于董宇輝小作文的視頻,一直為董宇輝喊冤、打抱不平。起初,我跟老婆的想法&…