色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ollvm|Android字符串加密淺析

哆啦安全 ? 來源:小道安全 ? 作者:小道安全 ? 2022-11-29 09:08 ? 次閱讀

背景

字符串加密是一個非常傳統的代碼保護方案,在Android的逆向過程中會涉及到Java代碼和CC++代碼,通常在對APP做逆向過程中第一步一般就是反編譯后查看代碼中是否有包含一些可以作為突破口分析的字符串信息

作為開發者一般應用中的字符串信息都是保存相對敏感的信息,字符串一般信息會保存著如客戶端和服務端通信信息,操作文件相關信息。

04a97cec-6f71-11ed-8abf-dac502259ad0.png

(so部分的字符串加密)

04bbe418-6f71-11ed-8abf-dac502259ad0.png

(java部分的字符串加密)

由于字符串信息中存儲著很多關鍵的信息,因此在做逆向的過程中從字符串入手可以猜測、分析定位出一些關鍵的加解密算法、關鍵的邏輯結構。因此字符串也是一種提高被靜態逆向分析的一個很重要的門檻。

字符串信息的加密的影響只到靜態的逆向分析這一步,字符串信息信息在實際業務運行過程中必然需要進行對字符串的操作,那這個就涉及到了對加密字符串的解密過程。這個運行態也就是在對app進行利用動態調試分析過程中都是赤裸裸的展現出來。這是時候字符串的加密就顯得蒼白無力了。因此可以通過反調試和字符串加密這兩者的入門的動態和靜態方式結合,稍微提高代碼的安全性。

字符串加密算法基礎

所謂字符串加密技術是指將一個信息(或稱明文)經過加密鑰匙及加密函數轉換,變成無意義的密文,而接收方則將此密文經過解密函數、解密鑰匙還原成原字符串。

字符串加密免不了采用加解密的算法,加解密算法的加解密方式和加解密強度直接決定了被攻破的時間成本。

字符串加密算法有簡單的異或方式;通用的AES、DES、RSA、Base64、MD5散列函數等等;相對有難度的自實現加解密算法、冷門的加解密算法。

不過一般情況下,作為開發者一般不太可能自己去造輪子寫加解密算法,一般都是直接就套用網絡上穩定的、標準的加解密算法。其實如果從相對安全性來說,可以找那些冷門的加解密算法用于保護字符串。這樣相對網絡公開資料比較少,并且分析的人相對比較少,分析起來時間成本就相對比較高。

下面就分析下so文件加密用的比較多的字符串加密是怎么實現的。

ollvm字符串加密原理

Ollvm中字符串加密的公開版本有很多個版本,并且每個版本功能實現雖然大同小異,但是各個版本也各有缺點。

這些缺點有:

1.無法加密字符串數組;

2.無法加密unicode編碼和非const的字符串數組;

3.無法加密全局char和wchar字符串常量和結構體變量。

基于以上原因,實現自己定制修改字符串加密功能代碼就顯得很重要了。

下面就分析下ollvm中基于某版本字符串加密的實現和調用

Ollvm項目中,字符串加密實現主要功能在項目存儲在如下的路徑中

聲明和實現的代碼

ollvmincludellvmTransformsObfuscationStringObfuscation.h

ollvmlibTransformsObfuscationStringObfuscation.cpp

初始化隨機數因子和調用字符串加密

ollvmlibTransformsIPOPassManagerBuilder.cpp

添加編譯StringObfuscation.cpp文件

ollvmlibTransformsObfuscationCMakeLists.txt

CMakeLists.txt配置要編譯的StringObfuscation.cpp文件

04d610b8-6f71-11ed-8abf-dac502259ad0.png

下面的聲明的靜態全局變量,主要是為了實現編譯時候識別 -mllvm -sobf指令的標識,全局開關通過參數來判斷是否要開啟字符串加密。

04e483b4-6f71-11ed-8abf-dac502259ad0.png

隨機數因子的初始化。

050a5ea4-6f71-11ed-8abf-dac502259ad0.png

在populateModulePassManager 函數中,新增掛載新的pass代碼,這樣就可以根據全局開關來判斷是否啟用當前pass。

051e8636-6f71-11ed-8abf-dac502259ad0.png

StringObfuscation.h文件分析

這個函數就聲明了createStringObfuscation函數,看起來非常簡單,這個函數也就是這個字符串加密的關鍵函數。

05570c40-6f71-11ed-8abf-dac502259ad0.png

StringObfuscation.cpp文件分析(基于Armariris版本的字符串加密)

這個版本的加密效果:可加密所有類型的ANSI, UNICODE字符串常量, 但是無法加密字符串數組, 因為字符串數組的全局符號名不是.str開頭。

這個文件中主要有字符串加密函數和字符串解密函數2個函數組成的。

0560ac1e-6f71-11ed-8abf-dac502259ad0.png

上文截圖代碼根據.str和.str.名稱判斷是否為字符串,并且過濾掉特定區段:Llvm.metadata,__objec_methname不進行字符串加密。

056f13da-6f71-11ed-8abf-dac502259ad0.png

上面截圖中的代碼,可以看到字符串加密的就是進行簡單的字符串異或加密。

057dd30c-6f71-11ed-8abf-dac502259ad0.png

用于往字符串加密的程序插入以“.datadiv_decode+隨機數”為結構的加密函數,用于實現對字符串進行加密處理。

防止破解者能夠快速識別是基于ollvm實現的字符串加密,可以重點修改下這個函數的實現和“.datadiv_decode+隨機數”的特征。

有了以上的關鍵調用和流程,那么就可以基于以上的流程和規則進行做字符串加密功能的定制實現了,可以通過添加一些邏輯代碼加強字符串加密的強度。

ollvm字符串加密后表現

1.直接用標準的ollvm的字符串加密,在字符串信息和導出函數中和init_arrayq區段會存在.datadiv_decode,這種采用的是一個字節和一個字節進行隨機異或的加密方式。

數據都存儲在數據段中,程序運行前就是初始化的時候就將加密的字符串全部解密出來,等待著使用。

058ad692-6f71-11ed-8abf-dac502259ad0.png

05c1f83e-6f71-11ed-8abf-dac502259ad0.png

05cc03e2-6f71-11ed-8abf-dac502259ad0.png

2.通過基于ollvm的源代碼,簡單修改定制olllvm的源碼,將解密函數名字修改成為非標準的,但是這種的字符串加密在init_array區段中依然會有展示,只不過展示的是非標準的函數信息。這種加密也是通過疑惑的方式進行加密。

字符串數據都存儲在數據段中,程序運行起來后就是初始化時候,就一次性全部將字符串解密。

05d9687a-6f71-11ed-8abf-dac502259ad0.png

3.通過基于ollvm的源代碼進行定制,字符串信息都存儲在.bss區段中,程序運行初始化的時候并沒有進行做解密,只有在程序運行使用到那里才會解密到那里。其它的沒使用的字符串是沒有進行解密的。

05e3a2cc-6f71-11ed-8abf-dac502259ad0.png

小結

從字符串成為破解者第一道門檻的的痛點,在到字符串加密僅是為了提高破解者靜態分析的成本的大背景下進行,全文大篇幅的主要是以ollvm這個項目中的字符串加密為主線進行展開的,展開的方向主要以加密的實現原理和加密后的表現形式。

對ollvm字符串的解密相信是對大家來說比字符串加密是更感興趣,篇幅有限先以字符串加密進行簡單做下原理性的分析,后面再分享ollvm字符串解密

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Android
    +關注

    關注

    12

    文章

    3935

    瀏覽量

    127352
  • JAVA
    +關注

    關注

    19

    文章

    2966

    瀏覽量

    104707
  • 字符串
    +關注

    關注

    1

    文章

    578

    瀏覽量

    20508

原文標題:ollvm|Android字符串加密淺析

文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    字符串的表示

    字符串的表示  隨著計算機在文字處理與信息管理中的廣泛應用, 字符串已成為最常用的數據類型之一, 許多計算機中都提供字符串操作功能, 一些計算機還給出讀寫字
    發表于 10-13 17:11 ?3065次閱讀
    <b class='flag-5'>字符串</b>的表示

    C語言教程之字符串加密和解密

    C語言教程之字符串加密和解密,很好的C語言資料,快來學習吧。
    發表于 04-25 15:49 ?0次下載

    LabVIEW的常用字符串操作教程免費下載

    字符串操作與信息的保存和顯示密不可分,而字符串操作運用也是LabⅥEW程序設計的一個難點,因此熟練使用字符串操作函數是使用LabⅥEW進行編程所必備的能力之字符串函數選板位于函數面板:
    發表于 08-21 14:51 ?26次下載
    LabVIEW的常用<b class='flag-5'>字符串</b>操作教程免費下載

    什么是復制字符串?Python如何復制字符串

    連續幾篇文章都在寫 Python 字符串,這出乎我的意料了。但是,有的問題,不寫不行,特別是那種靈機一動想到的問題,最后你發現,很多人根本不懂卻又誤以為自己懂了。那就繼續刨根問底,探究個明白吧
    發表于 11-25 10:32 ?3011次閱讀

    strtok拆分字符串

    大家好,我是驚覺,今天聊聊字符串字符串的使用場景非常之多,人機交互和雙機通信都會用到。比如:通過串口向單片機發送指令,以執行操作或配置參數。單片機讀取傳感器數據,數據格式是字符串。一般GPS數據
    發表于 01-13 15:46 ?8次下載
    strtok拆分<b class='flag-5'>字符串</b>

    2.2 python字符串類型

    2.2 python字符串類型 1. 如何定義字符串字符串是Python中最常用的數據類型之一。 使用單引號或雙引號來創建字符串,使用三引號創建多行
    的頭像 發表于 02-17 17:08 ?1424次閱讀

    字符串函數重寫練習

    字符串函數重寫練習:字符串比較、字符串拼接、字符串查找、字符串拷貝、內存比較、內存拷貝、內存初始化、內存比較、二維數組定義及基本使用、位運算
    的頭像 發表于 05-05 15:02 ?1992次閱讀

    字符串操作

    labview字符串操作
    發表于 06-28 15:09 ?2次下載

    C語言總結_字符串全方位練習

    C語言字符串全方位練習,涉及知識點:字符串解析、大小寫判斷、字符串插入、字符串刪除、字符串排序、字符串
    的頭像 發表于 08-14 09:41 ?1490次閱讀

    一文詳解JavaScript字符串

    JavaScript字符串是原始值。此外,字符串是不可變的。這意味著如果你修改一個字符串,你總是會得到一個新的字符串。原始字符串不會被改變。
    的頭像 發表于 12-08 16:36 ?1197次閱讀

    python字符串有哪些特定方法

    python字符串序列操作也適用于列表和元組。 python字符串還有獨有方法,即字符串對象的函數,其他對象不可調用,只有字符串對象可調用。
    的頭像 發表于 02-23 15:02 ?705次閱讀

    淺析python字符串模式匹配

    python字符串可以通過re模塊的模式匹配來處理文本。
    的頭像 發表于 02-23 15:04 ?2327次閱讀

    C語言字符串的引用方式

    在C語言程序中,字符串是存放在字符數組中的。 2. 用字符數組存放一個字符串,可以通過數組名和下標引用字符串中的一個
    的頭像 發表于 03-10 14:57 ?1915次閱讀

    字符串的相關知識

    TCL 中的數據類型只有一種:字符串。這些字符串可以是字母、數字、布爾值、標點符號等特殊字符的組合。在某些特殊命令的作用下,字符串可以向其他數據類型轉換。下面將系統的講解或回顧下
    的頭像 發表于 03-29 11:41 ?1147次閱讀

    labview字符串如何轉換為16進制字符串

    在LabVIEW中,將字符串轉換為16進制字符串是一個常見的需求,尤其是在處理數據通信和硬件接口時。LabVIEW提供了多種方法來實現這一轉換,包括使用內置函數、編寫VI(Virtual
    的頭像 發表于 09-04 15:54 ?2336次閱讀
    主站蜘蛛池模板: 老司机深夜福利ae 入口网站| 亚洲AV久久无码精品热九九| 久久99热成人精品国产| 国产人妻人伦精品9| 抽插的日日液液H| 被老总按在办公桌吸奶头| 99热在线免费观看| 99久久99久久久精品久久| 2022年国产精品久久久久 | 果冻传媒视频在线播放 免费观看| 高h乱一受多攻男男| 大学生第一次破女在线观看| xxx军人3p大gay| yellow高清免费观看日本| a视频在线观看免费| 成人网18免费韩国| 国语自产拍在线视频普通话| 国产色播视频在线观看| 国产一卡在线观看完整版| 一级毛片皇帝 宫女| 欧美一区二区视频97色伦| 高清mv视频免费观看| 亚洲人交性视频| 日本无吗高清| 国产在线亚洲v天堂a| 国产呻吟久久久久久久92| 亚洲人视频在线观看| 日本国产黄色片| 欧美AAAAAA级午夜福利视频| 午夜AV内射一区二区三区红桃视 | 999人在线精品播放视频| 伊人久久大香线蕉影院95| 天天色天天综合网| 午夜国产精品免费观看| 午夜免费福利片| 亚洲欧美中文日韩v在线| 亚洲一区日韩一区欧美一区a| 中国老女人xxhd69| 洲精品无码高潮喷水A片| JAVASCRIPTJAVA水多多| YELLOW在线观看高清视频免费 |