Mais recente teste real de quebra de parâmetro de criptografia Juchao disponível

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.
Insira a descrição da imagem aqui

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.

Insira a descrição da imagem aqui


3. A saída do console para ver se existe esse método, é verdade, continue a clicar.
Insira a descrição da imagem aqui

4. Você pode ver que o método window.JSonToCSV.missjson é usado e o carimbo de data / hora é passado.

Insira a descrição da imagem aqui


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

Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/qq_26079939/article/details/108491371
Recomendado
Clasificación