Skip to content

۲. استخراج کلیدهای رمزنگاری (Crypto Sniffing) ​

اپلیکیشن‌ها معمولا از استاندارد AES برای رمزنگاری داده‌ها استفاده می‌کنند. به جای اینکه ساعت‌ها وقت صرف مهندسی معکوس الگوریتم کنید، کافی است جایی که کلید ساخته می‌شود را هوک کنید.

در اندروید، اکثر اپلیکیشن‌ها از کلاس SecretKeySpec برای تعریف کلید استفاده می‌کنند. اگر این کلاس را هوک کنید، هر کلیدی که در برنامه ساخته شود، مستقیما در کنسول شما چاپ می‌شود.

کد فریدا (شکار کلید AES):

javascript
Java.perform(function () {
    var SecretKeySpec = Java.use("javax.crypto.spec.SecretKeySpec")

    /* هوک کردن سازنده کلاس کلید */    
    SecretKeySpec.$init.overload('[B', 'java.lang.String').implementation = function (key, algo) {
        console.log("*******************************************")
        console.log("[+] Crypto Key Detected!")
        console.log("[*] Algorithm: " + algo)
        
        /* تبدیل بایت‌های کلید به فرمت HEX برای خوانایی */        
        var buffer = Java.array('byte', key)
        var hexString = ""
        for (var i = 0; i < buffer.length; i++) {
            var b = (buffer[i] & 0xff).toString(16)
            if (b.length == 1) b = "0" + b
            hexString += b
        }
        
        console.log("[*] Key (HEX): " + hexString)
        console.log("*******************************************")
        
        return this.$init(key, algo)
    }
})

نکته استراتژیک

با این اسکریپت، حتی اگر کلیدها به صورت پویا از سرور گرفته شوند یا در لایه Native تولید شوند، به محض اینکه برای استفاده به لایه جاوا بیایند، لو خواهند رفت.