<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    frida復現某app算法

    VSole2023-01-11 10:44:51

    獲取數據

    某app的登錄界面抓包,發現參數都加密了

    查驗一下殼,未加殼,可以進行反編譯

    使用jadx進行反編譯,嘗試搜索一下參數名”Encrypt”,發現兩個JsonRequest類的方法存在

    運用frida及其下面的代碼在java層進行hook,發現只調用了addRequestMap方法

    Java.perform(function (){
        console.log("hook demo")
        var jsonRequest = Java.use("com.online.http.JsonRequest");
        jsonRequest.addRequestMap .overload('java.util.Map', 'int').implementation = function (addMap,a){
            console.log("jsonRequest.addRequestMap is called");
            this.addRequestMap(addMap,a);
        }
        jsonRequest.paraMap.implementation = function (addMap){
            console.log("jsonRequest.paraMap is called");
            this.paraMap(addMap);
        }
    });
    

    跟進addRequestMap方法,了解其使用des加密,hook該方法可獲取明文及加密結果

    hook代碼

    Java.perform(function () {
        var requestUtil = Java.use("com.online.http.RequestUtil");
        requestUtil.encodeDesMap.overload('java.lang.String', 'java.lang.String', 'java.lang.String').implementation = function (code,desKey,desIV){
            console.log("requestUtil.encodeDesMap is called")
            console.log("code:",code,"desKey:",desKey,"desIv:",desIV)
            var encodeDesMap = this.encodeDesMap(code,desKey,desIV);
            console.log("cncodeDesMap:",encodeDesMap);
            return encodeDesMap;
        }
    });
    

    保存一下獲得的數據

    code: {"equtype":"ANDROID","loginImei":"Android353627076818049","sign":"659E9DABB1D2F8B5DB14B40E99E87FAB","timeStamp":"1671622897913","userPwd":"123456","username":"13000000000"} desKey: 65102933 desIv: 32028092
    cncodeDesMap: NIszaqFPos1vd0pFqKlB42Np5itPxaNH//FDsRnlBfgL4lcVxjXii8evWfX6JfTMfsYOA4+U92V8
    mjn/SBdwCqLUJu44fM3zNeGVKZD6MFQWLguggVL6k55XB7aoJ+ZRBAgKzq5Q69AeVzzkrW7ljbx9
    O24XBjMdNIKIWHkE5JL5MnS1ph86fs18lEqa3ilNtvTZFOVz8DX72SSPgVVHRnOavHemZ5807s9P
    wmTqWlw=
    

    明文中存在desKey和desIv,跟進代碼,可以看到這兩值是固定的

    數據中還有sign值不知道怎么來的

    code數據都為paraMap方法中得來

    跟進該方法,md5加密前對數據進行了處理,hook該Utils.md5的方法的傳參即可了解加密得到sign值的明文

    hook代碼

    Java.perform(function () {
        var requestUtil = Java.use("com.online.http.RequestUtil");
        requestUtil.encodeDesMap.overload('java.lang.String', 'java.lang.String', 'java.lang.String').implementation = function (code,desKey,desIV){
            console.log("requestUtil.encodeDesMap is called")
            console.log("code:",code,"desKey:",desKey,"desIv:",desIV)
            var encodeDesMap = this.encodeDesMap(code,desKey,desIV);
            console.log("cncodeDesMap:",encodeDesMap);
            return encodeDesMap;
        }
    });
    

    保存一下獲得的數據

    string: equtype=ANDROID&loginImei=Android353627076818049&timeStamp=1671624199001&userPwd=123456&username=13000000000&key=sdlkjsdljf0j2fsjk
    sign: d13d25dc2dc064491b748d5c97430398
    

    有一個key值

    跟進發現為固定值

    以上就獲取了所有需要的信息,可以嘗試進行加密算法復現了

    sign明文:
    string:equtype=ANDROID&loginImei=Android353627076818049&timeStamp=1671624199001&userPwd=123456&username=13000000000&key=sdlkjsdljf0j2fsjk
    sign: d13d25dc2dc064491b748d5c97430398
    加密算法:md5
    des明文:
    code: {"equtype":"ANDROID","loginImei":"Android353627076818049","sign":"659E9DABB1D2F8B5DB14B40E99E87FAB","timeStamp":"1671622897913","userPwd":"123456","username":"13000000000"} desKey: 65102933 desIv: 32028092
    加密算法:des
    

    還需要了解des算法的工作模式和填充方式

    跟進encodeDesMap方法

    跟進DesSecurity類的實例化,了解到工作模式為CBC,填充方式為PKCS5Padding

    至此,所有需要的信息都收集完畢了

    算法復現

    借助CryptJS獲取sign的值

    function getSign(user, pass, time) {
        var plaintext = "equtype=ANDROID&loginImei=Android353627076818049&timeStamp=" + time + "&userPwd=" + pass + "&username=" + user + "&key=sdlkjsdljf0j2fsjk";
        return CryptoJS.MD5(CryptoJS.enc.Utf8.parse(plaintext)).toString();
    }
    console.log(getSign("13000000000","123456","1671624199001"))
    

    重新加密,由于填充方式為PKCS5Padding,每次填充的值不一樣,每次加密整體結果不同,但未填充部分加密結果一樣

    function encrypt(user, pass, time) {
        var sign = getSign(user,pass,time);
        var plaintext = '{"equtype":"ANDROID","loginImei":"Android353627076818049","sign":"' + sign + '","timeStamp":"' + time + '","userPwd":"' + pass + '","username":"' + user + '"}';
        var key = CryptoJS.enc.Hex.parse(CryptoJS.MD5("65102933").toString());
        var iv = CryptoJS.enc.Utf8.parse("32028092");
        var result = CryptoJS.DES.encrypt(plaintext, key, {
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        }).toString();
        return result;
    }
    console.log(encrypt("13000000000","123456","1671622897913"))
    

    sign韓劇
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    Ida的trace功能,這種方法本身是非常好的一種方法,因為大部分的情況下這種方法更有效也更簡單,但目前這種方式已知存在一些問題導致這種方式的使用受限。①慢,ida trace的方式會很慢,所以一般都是在縮小范圍后再使用這種trace的方式來操作。
    買車報價APP sign分析
    2023-01-12 11:14:54
    數字企業殼懂得都懂不可能全部脫下來的只能用哪些類就脫哪些了,略微麻煩點。想著通過url的地址去找對應的發請求的位置是不是可以,于是通過搜索url路徑找到了一個類。這是具體的加密方法,沒啥難度了。
    首先使用jadx對apk進行逆向。?搜索關鍵字 QDSign,可以直接找到對應的類,可以看到參數經過加密得到。??進一步跟蹤,發現了c類中有如下三個so方法,還有3個loadlibrary,分別進行了hook,發現c-lib動態注冊了sign,sos動態注冊了s,沒有發現crypto有動態注冊。
    timestamp: d}并在第1886行,找到了有關n的聲明此時發現password被md5加密后,與pwdkey的值,進行字符串拼接后,在進行一次md5加密。直接搜索pwdkey,并在第27589行,找到了該值,發現該值是不變的。
    準備◆iOS 12.5.5◆frida 14.0.0◆ipa 5rG96L2m5LmL5a62 11.33.5抓包1.抓包使用 charles,請自行安裝并配置證書。使用假賬密測試抓包 123456 / 123456,能夠抓包成功。分析1、登錄頁面需要輸入3個信息,分別是賬號 / 密碼 / 驗證碼,對應字段 logincode / userpwd / validcode。
    嘗試掃了一下,雖然發送了很多payload,但沒有發現任何漏洞。最后通過自己努力和改造,終于挖到了XSS漏洞。XSS是web安全中最為常見的漏洞,XSS全稱是Cross Site Script。XSS攻擊通常指黑客通過“HTML注入”篡改了網頁,插入了惡意腳本,
    為了抵御網絡黑客的攻擊,許多人選擇了通過 1Password 等密碼管理器來規劃針對不同線上服務的復雜密碼組合,以避免在數據泄露事件發生時被“一鍋端”。不過從本周開始,1Password 又拓展了一項服務 —— 允許用戶隱藏真實的電子郵件地址。
    逆向某平臺分析過程指導
    遠程辦公時代的生產力工具
    關鍵詞漏洞安全研究人員發現,用于數百線上服務的知名開發框架Expo出現可劫持賬號的重大漏洞。Expo框架主要
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类