Aviso Legal: Este artigo é apenas para estudo e pesquisa, e é proibido de ser usado para fins ilegais, caso contrário você estará por sua própria conta e risco. Se houver qualquer violação, notifique e exclua, obrigado!
Descrição do Problema:
Pesquisei na Internet sobre o rastreador de aquisição de dados na página da Juchao , que parece ser diferente do que escrevi. Talvez não tenha lido com atenção. Deve ser porque eu costumava obter dados financeiros e outras informações, mas ele solicitou um parâmetro criptografado mcode no cabeçalho. Não há muito a dizer, abra o código diretamente.
solução:
1. Pegue a solicitação, aqui estão os 4 parâmetros principais do scode: sinal de código de estoque e rtype são combinações para obter um total de 16 interfaces (0-3 * 0-3), mcode é o parâmetro de criptografia solicitado, cada tempo válido de mcode é cerca de dois minutos sobre.
2. Em seguida, pesquise mcode diretamente, geralmente o primeiro link, clique diretamente, formate e pesquise mcode, você pode ver que mcode é gerado pelo método indexcode.getResCode (), portanto, só precisamos encontrar a entrada deste método, Pode encontrar o método de geração de mcode.
3. A saída do console para ver se existe esse método, é verdade, continue a clicar.
4. Você pode ver que o método window.JSonToCSV.missjson é usado e o carimbo de data / hora é passado.
5. Vamos deduzir esta função e apenas reescrevê-la.
function get_mcode(input) {
var keyStr = "ABCDEFGHIJKLMNOP" + "QRSTUVWXYZabcdef" + "ghijklmnopqrstuv" + "wxyz0123456789+/" + "=";
var output = "";
var chr1, chr2, chr3 = "";
var enc1, enc2, enc3, enc4 = "";
var i = 0;
do {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2)
+ keyStr.charAt(enc3) + keyStr.charAt(enc4);
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < input.length);
return output;
}
};
6. Em seguida, os parâmetros criptografados podem ser obtidos após a execução de pyexecjs e o código-fonte também é postado.
# -*- coding: utf-8 -*-
import time
import execjs
def get_mcode():
js_str = '''
function mcode(input){
var keyStr = "ABCDEFGHIJKLMNOP" + "QRSTUVWXYZabcdef" + "ghijklmnopqrstuv" + "wxyz0123456789+/" + "=";
var output = "";
var chr1, chr2, chr3 = "";
var enc1, enc2, enc3, enc4 = "";
var i = 0;
do {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < input.length);
return output
}
'''
input = str(int(time.time()))
js = execjs.compile(js_str) # 编译执行js代码
jschl_answer = js.call('mcode', input) # 调用函数
return jschl_answer