天天看點

居然有單個首字母混淆的JS加密

老規矩,直接上加密的源代碼

function g(A, B, C) {
    var P = L;
    C(e[A[P(0x1db)]]);
}
function h(A, B, C) {
    var Q = L;
    if (A['key'] == Q(0x1eb) && A[Q(0x1ee)] != null) {
        if (!A[Q(0x1ee)][Q(0x1a7)]) A[Q('0x1ee')][Q('0x1a7')] = B[Q(0x1d0)]['id'];
    }
    e[A['key']] = A['value'],
        C != null && C();
}
function i(A, B, C) {
    var R = L,
        D = d[A[R('0x1db')]];
    if (D && D != '' && D[R('0x1b2')](0x0, 0x1) == '{') C(JSON[R(0x1ef)](D));
    else C(D);
}
function j(A, B, C) {
    var S = L;
    d[A[S(0x1db)]] = A[S(0x1ee)],
        C(A['value']);
}
function k(A, B, C) {
    var T = L,
        D = decodeURIComponent(A[T('0x1ae')]);
    chrome[T(0x1e3)]['executeScript'](B[T(0x1d0)]['id'], {
        'code': D,
        'allFrames': !![]
    }),
        C({});
}      

解密後

function getAryCal(prm, obj, ref) {
    ref(cache[prm.key]);
}

function setLocalSCur(prm, obj, ref) {
    if (prm.key == "CurrentOrder" && prm.value != null) {
        if (!prm.value.tabId) {
            prm.value.tabId = obj.tab.id;
        }
    }

    cache[prm.key] = prm.value;
    ref != null && ref();
}

function getLocalSJsonCal(prm, obj, ref) {
    var value = localS[prm.key];

    if (value && value != '' && value.substr(0, 1) == '{') {
        ref(JSON.parse(value));
    } else {
        ref(value);
    }
}

function setLocalSCal(prm, obj, ref) {
    localS[prm.key] = prm.value;
    ref(prm.value);
}

function execInputCode(prm, obj, ref) {
    var code = decodeURIComponent(prm.inputScript);
    chrome.tabs.executeScript(obj.tab.id, {
        'code': code,
        'allFrames': true
    });
    ref({});
}      

關鍵點

第一次見到用單個的A-Za-z來做混淆的加密方法,這種方法很危險,因為字母就26個 有很大的局限性。這種加密解起來還算簡單,就是比較費眼睛。。