阿正 发表于 2017-4-9 19:22:45

读学易语言第十一章|阿正_网页数据解密之找出改写

读学易语言第十一章 | 阿正


网页数据解密之定位关键函数





本章适用于有一定易语言基础想发展学习POST方面的人

阅读,文章根据个人学习经验所写,如果有错误请指出。





上章我们简单明白了js解密中的定位函数,这一章我们接着来搞事情----扣出函数+放

到易语言里面调用。


https://docs.zoho.com.cn/writer/image.do?imgurl=60c55005f04ed37632305f71b7e9afae3fd45a483c18d082be8ab0d0638f329c58b8aa7e4386ab430278ba2932fe2867


我们来到这里可以看到准确的函数调用地方。


然后双击就可以去到函数头部


https://docs.zoho.com.cn/writer/image.do?imgurl=60c55005f04ed37632305f71b7e9afae3fd45a483c18d082be8ab0d0638f329c343a2eb73855661076b2499caf06f5ad


过来之后我们就可以看到这里是这样的函数的申明。


简单的看看这个函数,含有有两个参数,第一个通过我们之前的看到的数据,第一

个就是我们的明文密码,然后后面的这个参数是固定的整数类型的16,这里我们可

以注意下,这里第二个参数是固定的。


那么我们把这个函数扣下来,放到js调试软件里面


function calcMD5(sInp, typemd5) {


   


    /* Calculate length in machine words, including padding */


    wLen = (((sInp.length + 8) >> 6) + 1) << 4;


    var X = new Array(wLen);


   


    /* Convert string to array of words */


    j = 4;


    for (i = 0; (i * 4) < sInp.length; i++)


    {


      X[i] = 0;


      for (j = 0; (j < 4) && ((j + i * 4) < sInp.length); j++)


      {


            X[i] += (sAscii.indexOf(sInp.charAt((i * 4) + j)) + 32) << (j * 8);


      }


    }


   


    /* Append padding bits and length */


    if (j == 4)


    {


      X[i++] = 0x80;


    }


    else


    {


      X[i - 1] += 0x80 << (j * 8);


    }


    for (; i < wLen; i++) {


      X[i] = 0;


    }


    X[wLen - 2] = sInp.length * 8;


   


    /* hard-coded initial values */


    a = 0x67452301;


    b = 0xefcdab89;


    c = 0x98badcfe;


    d = 0x10325476;


   


    /* Process each 16-word block in turn */


    for (i = 0; i < wLen; i += 16) {


      aO = a;


      bO = b;


      cO = c;


      dO = d;


      


      a = R1(a, b, c, d, X[i + 0], 7, 0xd76aa478);


      d = R1(d, a, b, c, X[i + 1], 12, 0xe8c7b756);


      c = R1(c, d, a, b, X[i + 2], 17, 0x242070db);


      b = R1(b, c, d, a, X[i + 3], 22, 0xc1bdceee);


      a = R1(a, b, c, d, X[i + 4], 7, 0xf57c0faf);


      d = R1(d, a, b, c, X[i + 5], 12, 0x4787c62a);


      c = R1(c, d, a, b, X[i + 6], 17, 0xa8304613);


      b = R1(b, c, d, a, X[i + 7], 22, 0xfd469501);


      a = R1(a, b, c, d, X[i + 8], 7, 0x698098d8);


      d = R1(d, a, b, c, X[i + 9], 12, 0x8b44f7af);


      c = R1(c, d, a, b, X[i + 10], 17, 0xffff5bb1);


      b = R1(b, c, d, a, X[i + 11], 22, 0x895cd7be);


      a = R1(a, b, c, d, X[i + 12], 7, 0x6b901122);


      d = R1(d, a, b, c, X[i + 13], 12, 0xfd987193);


      c = R1(c, d, a, b, X[i + 14], 17, 0xa679438e);


      b = R1(b, c, d, a, X[i + 15], 22, 0x49b40821);


      


      a = R2(a, b, c, d, X[i + 1], 5, 0xf61e2562);


      d = R2(d, a, b, c, X[i + 6], 9, 0xc040b340);


      c = R2(c, d, a, b, X[i + 11], 14, 0x265e5a51);


      b = R2(b, c, d, a, X[i + 0], 20, 0xe9b6c7aa);


      a = R2(a, b, c, d, X[i + 5], 5, 0xd62f105d);


      d = R2(d, a, b, c, X[i + 10], 9, 0x2441453);


      c = R2(c, d, a, b, X[i + 15], 14, 0xd8a1e681);


      b = R2(b, c, d, a, X[i + 4], 20, 0xe7d3fbc8);


      a = R2(a, b, c, d, X[i + 9], 5, 0x21e1cde6);


      d = R2(d, a, b, c, X[i + 14], 9, 0xc33707d6);


      c = R2(c, d, a, b, X[i + 3], 14, 0xf4d50d87);


      b = R2(b, c, d, a, X[i + 8], 20, 0x455a14ed);


      a = R2(a, b, c, d, X[i + 13], 5, 0xa9e3e905);


      d = R2(d, a, b, c, X[i + 2], 9, 0xfcefa3f8);


      c = R2(c, d, a, b, X[i + 7], 14, 0x676f02d9);


      b = R2(b, c, d, a, X[i + 12], 20, 0x8d2a4c8a);


      


      a = R3(a, b, c, d, X[i + 5], 4, 0xfffa3942);


      d = R3(d, a, b, c, X[i + 8], 11, 0x8771f681);


      c = R3(c, d, a, b, X[i + 11], 16, 0x6d9d6122);


      b = R3(b, c, d, a, X[i + 14], 23, 0xfde5380c);


      a = R3(a, b, c, d, X[i + 1], 4, 0xa4beea44);


      d = R3(d, a, b, c, X[i + 4], 11, 0x4bdecfa9);


      c = R3(c, d, a, b, X[i + 7], 16, 0xf6bb4b60);


      b = R3(b, c, d, a, X[i + 10], 23, 0xbebfbc70);


      a = R3(a, b, c, d, X[i + 13], 4, 0x289b7ec6);


      d = R3(d, a, b, c, X[i + 0], 11, 0xeaa127fa);


      c = R3(c, d, a, b, X[i + 3], 16, 0xd4ef3085);


      b = R3(b, c, d, a, X[i + 6], 23, 0x4881d05);


      a = R3(a, b, c, d, X[i + 9], 4, 0xd9d4d039);


      d = R3(d, a, b, c, X[i + 12], 11, 0xe6db99e5);


      c = R3(c, d, a, b, X[i + 15], 16, 0x1fa27cf8);


      b = R3(b, c, d, a, X[i + 2], 23, 0xc4ac5665);


      


      a = R4(a, b, c, d, X[i + 0], 6, 0xf4292244);


      d = R4(d, a, b, c, X[i + 7], 10, 0x432aff97);


      c = R4(c, d, a, b, X[i + 14], 15, 0xab9423a7);


      b = R4(b, c, d, a, X[i + 5], 21, 0xfc93a039);


      a = R4(a, b, c, d, X[i + 12], 6, 0x655b59c3);


      d = R4(d, a, b, c, X[i + 3], 10, 0x8f0ccc92);


      c = R4(c, d, a, b, X[i + 10], 15, 0xffeff47d);


      b = R4(b, c, d, a, X[i + 1], 21, 0x85845dd1);


      a = R4(a, b, c, d, X[i + 8], 6, 0x6fa87e4f);


      d = R4(d, a, b, c, X[i + 15], 10, 0xfe2ce6e0);


      c = R4(c, d, a, b, X[i + 6], 15, 0xa3014314);


      b = R4(b, c, d, a, X[i + 13], 21, 0x4e0811a1);


      a = R4(a, b, c, d, X[i + 4], 6, 0xf7537e82);


      d = R4(d, a, b, c, X[i + 11], 10, 0xbd3af235);


      c = R4(c, d, a, b, X[i + 2], 15, 0x2ad7d2bb);


      b = R4(b, c, d, a, X[i + 9], 21, 0xeb86d391);


      


      a = add(a, aO);


      b = add(b, bO);


      c = add(c, cO);


      d = add(d, dO);


    }


    if (typemd5 == 32) {


      return hex(a) + hex(b) + hex(c) + hex(d)


    }


    ;


    if (typemd5 == 16) {


      return hex(b) + hex(c)


    }


    ;


}








然后加载出来,加载好了,我们填入参数,去调用,我们可以发现提示错误。


https://docs.zoho.com.cn/writer/image.do?imgurl=60c55005f04ed37632305f71b7e9afae3fd45a483c18d082be8ab0d0638f329c6262cdf0bcb8bd79497dae5b02d7a31e





然后我们去找找sAscii这个函数定义的地方,我们去浏览器里面搜索下。


https://docs.zoho.com.cn/writer/image.do?imgurl=60c55005f04ed37632305f71b7e9afae3fd45a483c18d082be8ab0d0638f329c38a362909829c53a69d60321d2e369e6


搜索结果是这样的,然后我们可以看到这里有几个定义的地方


这里我们先简单看看,859和860明显是连着的,也就是说,他先定义了这个函数,

然后在第二行里面在尾部加上了一点东西,这样就成了这样的一个样子


https://docs.zoho.com.cn/writer/image.do?imgurl=60c55005f04ed37632305f71b7e9afae3fd45a483c18d082be8ab0d0638f329cb6bfd277098b56cef421dad2c9a4bb3a





我们从


https://docs.zoho.com.cn/writer/image.do?imgurl=60c55005f04ed37632305f71b7e9afae3fd45a483c18d082be8ab0d0638f329c02d2583992d969f20fa71c59b9d0e296


这个变量开始定义的地方开始一直复制到刚刚md5函数的末尾,这里这个sAscii变量

是个程序集变量,所以得带上,他们中间的那些方法先不管他,先丢进去,都是一

些字节相关的操作,这个是有很大几率是计算的一部分。


https://docs.zoho.com.cn/writer/image.do?imgurl=60c55005f04ed37632305f71b7e9afae3fd45a483c18d082be8ab0d0638f329c0a8cba500c4d90367e6e7cfd7a5c38f6


加载后,结果是323B453885F5181F


我们在浏览器上面https://docs.zoho.com.cn/writer/image.do?imgurl=60c55005f04ed37632305f71b7e9afae3fd45a483c18d082be8ab0d0638f329c8752ae75f2b6ed664449c74c10d4a71b


看蓝色部分,鼠标选中,然后鼠标放到上面就就会出现计算结果。


https://docs.zoho.com.cn/writer/image.do?imgurl=60c55005f04ed37632305f71b7e9afae3fd45a483c18d082be8ab0d0638f329ca8a84376b9c943715dc1d5dc026d2693


这里我们可以看大,这里的结果是一样的,也就是说,这里的123456789计算出来的

就是这样了。


然后把修改好了的js放到易语言文本常量里面,命名为“常量_加密”


然后我们加载一个乐易模块


https://docs.zoho.com.cn/writer/image.do?imgurl=60c55005f04ed37632305f71b7e9afae3fd45a483c18d082be8ab0d0638f329c7fb8e476359872aacd5fb8d7b694cd0a


代码这样写,然后我们这个命令第一个参数是js代码,第二个是要运行的函数名,第

三个是函数运行需要的参数一,第是个参数是函数运行的参数二。





https://docs.zoho.com.cn/writer/image.do?imgurl=60c55005f04ed37632305f71b7e9afae3fd45a483c18d082be8ab0d0638f329cae0e0046a54f8f6ba18386288833c7fb


结果正确,那么我们就可以去结合之前的网页知识去写代码了。














namelolo 发表于 2017-4-13 02:06:16

太棒了,感谢楼主,Mrak一下

505028150 发表于 2017-4-17 17:36:53

好东西啊 支持感谢

Royal丶Cs 发表于 2017-4-27 10:22:07

好东西啊 支持感谢
页: [1]
查看完整版本: 读学易语言第十一章|阿正_网页数据解密之找出改写