麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

一種保護函數調用的方法及裝置與流程

文檔序號:11156103閱讀:379來源:國知局
一種保護函數調用的方法及裝置與制造工藝

本發明涉及通信技術領域,尤其涉及一種保護函數調用的方法及裝置。



背景技術:

目前,對于Android應用程序開發,大多數Android應用開發者會將比較重要的功能使用C語言或者C++語言來編寫,這樣可以顯著的提高程序的安全性。

而對于HACK來說,是可以通過逆向的方法分析到Android應用程序通過調用的動態庫SO文件中的函數對加密數據進行解密的,一旦分析清楚了解密函數的調用后,HACK也可以模擬正常的Android程序一樣,通過調用解密函數來獲取到明文數據,降低了安全性。



技術實現要素:

針對現有技術存在的問題,本發明實施例提供了一種保護函數調用的方法及裝置,用于解決現有技術中在調用函數時,調用方法容易被破解,導致數據安全性降低的技術問題。

本發明提供一種保護函數調用的方法,所述方法包括:

檢測所述函數的調用者信息;

基于所述調用者信息判斷所述調用者是否為正常用戶,若不是正常用戶,則斷開此次調用。

上述方案中,所述檢測所述函數的調用者信息,判斷所述調用者是否為正常用戶,包括:

建立第一全局變量及第二全局變量;

在調用所述函數之前,利用哈希算法計算所述第一全局變量的第一哈希值;

在調用所述函數時,利用所述哈希算法計算所述第二全局變量的第二哈希值;

判斷所述第一哈希值與所述第二哈希值是否一致,若不一致,則確定所述調用者不是正常用戶。

上述方案中,所述建立第一全局變量及第二全局變量之前,所述方法還包括:

構造數據結構;

將所述數據結構設置為所述函數的調用參數類型。

上述方案中,所述第一全局變量的初始值與所述第二全局變量的初始值相同。

上述方案中,所述檢測所述函數的調用者信息,判斷所述調用者是否為正常用戶,還包括:

獲取所述函數的調用鏈信息;

判斷所述調用鏈信息與預設的調用鏈信息是否一致;

若所述調用鏈信息與所述預設的調用鏈信息不一致,則確定所述調用者不是正常用戶。

上述方案中,所述獲取所述函數的調用鏈信息,包括:

獲取用于存儲所述調用鏈信息內存地址的參數buffer;

利用轉化函數將所述內存地址轉化為函數名稱信息;

基于所述函數名稱信息獲取所述函數調用鏈的函數名稱信息;

基于所述函數調用鏈的函數名稱信息獲取所述函數的調用鏈信息。

本發明還提供一種保護函數調用的裝置,所述裝置包括:

檢測單元,用于檢測所述函數的調用者信息;

判斷單元,用于基于所述調用者信息判斷所述調用者是否為正常用戶,若不是正常用戶,則斷開此次調用。

上述方案中,所述檢測單元用于:

建立第一全局變量及第二全局變量;

在調用所述函數之前,利用哈希算法計算所述第一全局變量的第一哈希值;

在調用所述函數時,利用所述哈希算法計算所述第二全局變量的第二哈希值;

所述判斷單元用于:判斷所述第一哈希值與所述第二哈希值是否一致,若不一致,則確定所述調用者不是正常用戶。

上述方案中,所述裝置還包括:

構造單元,用于構造數據結構;

設置單元,用于將所述數據結構設置為所述函數的調用參數類型。

上述方案中,所述檢測單元還用于:獲取所述函數的調用鏈信息;

所述判斷單元還用于:判斷所述調用鏈信息與預設的調用鏈信息是否一致;

若所述調用鏈信息與所述預設的調用鏈信息不一致,則確定所述調用者不是正常用戶。

本發明提供了一種保護函數調用的方法及裝置,所述方法包括:檢測所述函數的調用者信息;基于所述調用者信息判斷所述調用者是否為正常用戶,若不是正常用戶,則斷開此次調用;如此,在調用函數之前首先根據調用者信息判斷調用者是否為正常用戶,若不是正常用戶,則斷開此次調用過程,這樣就避免出現非法調用函數的情況,從而提高了數據的安全性。

附圖說明

圖1為本發明實施例一提供的保護函數調用的方法流程示意圖;

圖2為本發明實施例二提供的保護函數調用的裝置結構示意圖。

具體實施方式

為了在調用函數時,解決調用方法容易被破解,導致數據安全性降低的技術問題,本發明提供了一種保護函數調用的方法及裝置,所述方法包括:檢測所述函數的調用者信息;基于所述調用者信息判斷所述調用者是否為正常用戶,若不是正常用戶,則斷開此次調用。

下面通過附圖及具體實施例對本發明的技術方案做進一步的詳細說明。

實施例一

本實施例提供一種保護函數調用的方法,如圖1所示,所述方法包括:

S101,檢測所述函數的調用者信息。

本步驟中,所述函數一般為重點函數,比如數據解密函數等,在檢測所述函數的調用者信息時,可以通過兩種方法來檢測,第一種是通過設置全局變量的方法來檢測所述函數的調用者信息;第二種是通過檢測函數的調用堆棧信息,獲取調用鏈信息來檢測所述函數的調用者信息。

具體地,當通過設置全局變量的方法來檢測所述函數的調用者信息時,具體包括:在動態庫SO文件中建立第一全局變量variable1及第二全局變量variable2;所述第一全局變量variable1及第二全局變量variable2的初始值相同,本實施例中,將所述第一全局變量variable1及第二全局變量variable2的初始值賦值為0。

在調用所述函數之前,利用哈希HASH算法計算所述第一全局變量vable1的第一哈希值;具體地,利用函數variable1=HASH(variable1)計算所述第一哈希值。

在調用所述函數時,利用所述哈希HASH算法計算所述第二全局變量的第二哈希值;具體地,利用函數variable2=HASH(variable2)計算所述第二哈希值。這里,所述哈希HASH算法可以包括:MD5函數算法、MD4函數算法或SHA-1函數算法。

這里,為了使得函數本身的邏輯更為復雜,避免輕易被破解,在建立第一全局變量及第二全局變量之前,所述方法還包括:構造數據結構;并將所述數據結構設置為所述函數的參數類型,所述數據結構可以為較為復雜的數據結構,比如:類結構、STL的數據結構或list數據結構。

以解密函數來說,解密函數的參數包括:傳遞密文信息的參數及傳送明文信息的參數;那么就可以將這兩個參數構造成一個數據結構,比如C++的類結構,因為類結構會比簡單的數據類型傳遞參數要復雜些。當然,也可以使用STL的數據結構,比如利用MAP來存儲需要解密的字符串,或者是list這種結構來存儲解密后的明文信息的傳出參數等。其中,所述MAP是一種關聯容器,存是儲相結合形成的一個關鍵值和映射值的元素。

這樣,就可以把函數的調用參數變得更為復雜。

而通過檢測函數的調用堆棧信息,獲取調用鏈信息來檢測所述函數的調用者信息時,具體包括:

通過系統函數int backtrace(void**buffer,int size)獲取用于存儲所述調用鏈信息內存地址的參數buffer;所述buffer中存儲的是上層函數的調用地址,是一個內存地址;

然后利用轉化函數char**backtrace_symbols(void*const*buffer,int size)將所述內存地址轉化為函數名稱信息;基于所述函數名稱信息獲取所述函數調用鏈的函數名稱信息;將所述函數名稱信息上傳至服務器中,所述服務器就可以基于所述函數調用鏈的函數名稱信息獲取所述函數的調用鏈信息。

為了更清楚地闡述調用鏈信息,這里舉例說明:函數調用鏈是指當前的函數是從上層函數調用過來的,這個調用過程就是函數調用鏈;比如:函數A調用函數B再調用函數C,那么在函數C中可以獲取到的調用鏈新就是函數C、B、A,由此可以知道當前的函數最起始調用點是函數A。

S102,判斷所述調用者是否為正常用戶,若不是正常用戶,則斷開此次調用。

本步驟中,有兩種方法來判斷所述調用者是否為正常用戶;第一種方法是:根據第一哈希值及第二哈希值來判斷所述調用者是否為正常用戶;第二種方法是根據函數調用鏈信息來判斷所述調用者是否為正常用戶。

具體地,當根據第一哈希值及第二哈希值來判斷所述調用者是否為正常用戶時,具體包括:判斷所述第一哈希值與所述第二哈希值是否一致,若所述第一哈希值與所述第二哈希值不一致,則確定所述調用者不是正常用戶。這里是因為在正常的調用程序下,由于兩個全局變量的初始化的值一樣,并且變量計算HASH的次數也一樣,所以兩個變量的值總是相等的。因此,一旦所述第一哈希值與所述第二哈希不一致時,即可確定調用者不是正常用戶,此時,斷開此次調用過程,并將所述第一哈希值與所述第二哈希值通過加密算法加密后發送到服務器,服務器接收到該信息后,將所述調用者標記為異常用戶。

當根據函數調用鏈信息來判斷所述調用者是否為正常用戶時,具體包括:獲取所述函數的調用鏈信息;判斷所述調用鏈信息與預設的調用鏈信息是否一致;若所述調用鏈信息與所述預設的調用鏈信息不一致,則確定所述調用者不是正常用戶。

這里,如上述步驟所述,當獲取到函數名稱信息后,服務器可以通過正常的客戶端基于所述函數名稱信息獲取到正常的函數調用鏈信息,如果服務器確定當前的調用鏈信息與預設的調用鏈信息(正常的調用鏈信息)不同時,即可則可以確定調用者不是正常用戶,此時,斷開此次調用過程,并將所述調用者標記為異常用戶。

比如,現在有三個函數FuncA、FuncB、FuncC;調用關系是:FuncA中會調用FuncB,FuncB中會調用FuncC那么在函數C中獲取到的函數調用鏈信息是FuncB->FuncA。

而對于非法用戶來說,可能也會調用FuncC,那么他的函數可能是FuncX,那么在函數C中獲取到的函數調用鏈信息是FuncX。顯然這兩種種函數調用鏈信息是不一致的,則服務器獲取到兩種調用鏈信息后,可以確定第二種是一個非法調用,將所述調用者標記為異常用戶。

實施例二

相應于實施例一,本實施例還提供一種保護函數調用的裝置,參見圖2,所述裝置包括:檢測單元21及判斷單元22;其中,

所述檢測單元21用于檢測所述函數的調用者信息;

所述判斷單元22用于基于所述調用者信息判斷所述調用者是否為正常用戶,若不是正常用戶,則斷開此次調用。

在檢測所述函數的調用者信息時,所述檢測單元21可以通過兩種方法來檢測,第一種是通過設置全局變量的方法來檢測所述函數的調用者信息;第二種是通過檢測函數的調用堆棧信息,獲取調用鏈信息來檢測所述函數的調用者信息。

具體地,所述檢測單元21當通過設置全局變量的方法來檢測所述函數的調用者信息時,具體包括:在動態庫SO文件中建立第一全局變量variable1及第二全局變量variable2;所述第一全局變量variable1及第二全局變量variable2的初始值相同,本實施例中,將所述第一全局變量variable1及第二全局變量variable2的初始值賦值為0。

在調用所述函數之前,所述檢測單元21利用哈希HASH算法計算所述第一全局變量vable1的第一哈希值;具體地,利用函數variable1=HASH(variable1)計算所述第一哈希值。

在調用所述函數時,利用所述哈希HASH算法計算所述第二全局變量的第二哈希值;具體地,利用函數variable2=HASH(variable2)計算所述第二哈希值。這里,所述哈希HASH算法可以包括:MD5函數算法、MD4函數算法或SHA-1函數算法。

這里,為了使得函數本身的邏輯更為復雜,避免輕易被破解,所述裝置還包括:構造單元23及設置單元24;

在建立第一全局變量及第二全局變量之前,所述構造單元23用于構造數據結構;所述設置單元24用于將所述數據結構設置為所述函數的參數類型,所述數據結構可以為較為復雜的數據結構,比如:類結構、STL的數據結構或list數據結構。

以解密函數來說,解密函數的參數包括:傳遞密文信息的參數及傳送明文信息的參數;那么所述構造單元23就可以將這兩個參數構造成一個數據結構,比如C++的類結構,因為類結構會比簡單的數據類型傳遞參數要復雜些。當然,也可以使用STL的數據結構,比如利用MAP來存儲需要解密的字符串,或者是list這種結構來存儲解密后的明文信息的傳出參數等。其中,所述MAP是一種關聯容器,存是儲相結合形成的一個關鍵值和映射值的元素。

這樣,就可以把函數的調用參數變得更為復雜。

而通過檢測函數的調用堆棧信息,獲取調用鏈信息來檢測所述函數的調用者信息時,具體包括:

所述檢測單元21通過系統函數int backtrace(void**buffer,int size)獲取用于存儲所述調用鏈信息內存地址的參數buffer;所述buffer中存儲的是上層函數的調用地址,是一個內存地址;

然后利用轉化函數char**backtrace_symbols(void*const*buffer,int size)將所述內存地址轉化為函數名稱信息;基于所述函數名稱信息獲取所述函數調用鏈的函數名稱信息;將所述函數名稱信息上傳至服務器中,所述服務器就可以基于所述函數調用鏈的函數名稱信息獲取所述函數的調用鏈信息。

為了更清楚地闡述調用鏈信息,這里舉例說明:函數調用鏈是指當前的函數是從上層函數調用過來的,這個調用過程就是函數調用鏈;比如:函數A調用函數B再調用函數C,那么在函數C中可以獲取到的調用鏈新就是函數C、B、A,由此可以知道當前的函數最起始調用點是函數A。

當所述檢測單元21獲取到第一哈希值及第二哈希值、函數調用鏈信息后,所述判斷單元22有兩種方法來判斷所述調用者是否為正常用戶;第一種方法是:根據第一哈希值及第二哈希值來判斷所述調用者是否為正常用戶;第二種方法是根據函數調用鏈信息來判斷所述調用者是否為正常用戶。

具體地,當所述判斷單元22根據第一哈希值及第二哈希值來判斷所述調用者是否為正常用戶時,具體包括:判斷所述第一哈希值與所述第二哈希值是否一致,若所述第一哈希值與所述第二哈希值不一致,則確定所述調用者不是正常用戶。這里是因為在正常的調用程序下,由于兩個全局變量的初始化的值一樣,并且變量計算HASH的次數也一樣,所以兩個變量的值總是相等的。因此,一旦所述第一哈希值與所述第二哈希不一致時,即可確定調用者不是正常用戶,此時,斷開此次調用過程,并將所述第一哈希值與所述第二哈希值通過加密算法加密后發送到服務器,服務器接收到該信息后,將所述調用者標記為異常用戶。

當所述判斷單元22根據函數調用鏈信息來判斷所述調用者是否為正常用戶時,具體包括:獲取所述函數的調用鏈信息;判斷所述調用鏈信息與預設的調用鏈信息是否一致;若所述調用鏈信息與所述預設的調用鏈信息不一致,則確定所述調用者不是正常用戶。

這里,如上述所述,當獲取到函數名稱信息后,服務器可以通過正常的客戶端基于所述函數名稱信息獲取到正常的函數調用鏈信息,如果服務器確定當前的調用鏈信息與預設的調用鏈信息(正常的調用鏈信息)不同時,即可則可以確定調用者不是正常用戶,此時,斷開此次調用過程,并將所述調用者標記為異常用戶。

比如,現在有三個函數FuncA、FuncB、FuncC;調用關系是:FuncA中會調用FuncB,FuncB中會調用FuncC那么在函數C中獲取到的函數調用鏈信息是FuncB->FuncA。

而對于非法用戶來說,可能也會調用FuncC,那么他的函數可能是FuncX,那么在函數C中獲取到的函數調用鏈信息是FuncX。顯然這兩種種函數調用鏈信息是不一致的,則服務器獲取到兩種調用鏈信息后,可以確定第二種是一個非法調用,將所述調用者標記為異常用戶。

本發明提供的一個或多個實施例帶來的有益效果是:

本發明提供了一種保護函數調用的方法及裝置,所述方法包括:檢測所述函數的調用者信息;基于所述調用者信息判斷所述調用者是否為正常用戶,若不是正常用戶,則斷開此次調用;如此,在調用函數之前首先根據調用者信息判斷調用者是否為正常用戶,若不是正常用戶,則斷開此次調用過程;并且在判斷調用者是否為正常用戶時,可以通過兩種方法來檢測,第一種是通過設置全局變量的方法來檢測所述函數的調用者信息;第二種是通過檢測函數的調用堆棧信息,獲取調用鏈信息來檢測所述函數的調用者信息;可以進行雙重檢測避免出現非法調用函數的情況,從而提高了數據的安全性,并且,本發明還增加了函數本身的復雜度,進一步提高了破譯的難度。

以上所述,僅為本發明的較佳實施例而已,并非用于限定本發明的保護范圍,凡在本發明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發明的保護范圍之內。

當前第1頁1 2 3 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
主站蜘蛛池模板: 石河子市| 张家界市| 汶川县| 北京市| 赫章县| 内黄县| 玉田县| 岚皋县| 龙南县| 浦江县| 新营市| 定远县| 泗水县| 扶风县| 明溪县| 宁河县| 桂东县| 高碑店市| 平塘县| 大城县| 昌邑市| 通渭县| 集安市| 怀远县| 紫金县| 曲水县| 静乐县| 晋江市| 浦北县| 吴旗县| 铜川市| 哈密市| 长子县| 泰顺县| 宁德市| 岱山县| 东丰县| 广灵县| 朝阳区| 墨脱县| 麟游县|