• js逆向解析技巧


    js逆向解析技巧

    一、总结

    一句话总结:

    1、chrome浏览器的使用--js断点调试 找到js加密的关键部位
    2、使用execjs或者pyV8等比较主流的python调用js模块

    以对美团店铺抓取时需要破解的_token加密为准。


    二、js逆向解析技巧

    转自或参考:js逆向解析技巧--selenium_JavaScript_weixin_34235457的博客-CSDN博客
    https://blog.csdn.net/weixin_34235457/article/details/91469725

       下面内容以对美团店铺抓取时需要破解的_token加密为准。

    1. chrome浏览器的使用--js断点调试

        以美团为例,点进美团的美食页面,使用f12打开开发者工具。清空当前产生的各种请求,然后点击下一页,会发现重新生成大量的请求。切换到xhr页面观察是否通过ajax进行的请求,我们发现getPoiList开头的请求返回了我们需要的结果。

       然而观察该请求所携带的参数我们发现,大多数参数是可以通过找规律的办法得到解决的,但_token这个参数是被加密过得,我们无法获取到它的值,这就需要通过反编译来解决问题。

       通常情况下,我们可以全局搜索_token来看是否能找到对其进行加密的js,但有的时候,数据的整个键值对都是被加密过得(参考知乎登陆的加密),我们无法通过键找到对应值得加密算法。这时候可以尝试搜索请求url中的关键部分来定位加密部位。

       我们可以看到,根据getPoiList我们找到了_token的的值为d,d又是通过Rohr_Opt.reload(p)方法进行加密得到想要的结果的。

       我们在这个位置打上断点,再次执行下一页,当执行到reload时,我们进入找到了_token的加密js,打上断点继续观察就可以看到加密的整个流程了,如果你是js高手,可以尝试解密js,然后用python重写,这样结果的性能会好一些,但我这里使用了python直接调用js的方法进行加密。

       以上就是js加密的关键部位了。到这里chrome的断点调试完成。

    2. python实现js代码的调用

       通常来讲,使用execjs或者pyV8是比较主流的python调用js模块,但因为我两者都安装失败了,暂时没法使用,因此使用selenium的execute_script方法进行js调用。首先,我们将其改造成一个html文件rohr.html,并且为其添加一个可被外界调用的返回函数ssss,如下:

    1. <html>
    2. <head>
    3. <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    4. <title>Checkbox</title>
    5. <script type="text/javascript">
    6. var Rohr_Opt = new Object;
    7. Rohr_Opt.Flag = 100007;
    8. Rohr_Opt.LogVal = "rohrdata";
    9.  
    10. (function() { var _$_543c = ["x75x6Ex64x65x66x69x6Ex65x64",
    11. .................
    12. ])})();
    13.  
    14. function ssss(url){
    15. return Rohr_Opt.reload(url);
    16. }
    17. </script>
    18. </head>
    19. <body></body>
    20. </html>复制代码

       使用python对其进行调用:

    1. from selenium import webdriver
    2. import os
    3.  
    4. file_path = 'file:///' + os.path.abspath('rohr.html')
    5. print(file_path)
    6. browser = webdriver.Chrome()
    7. browser.get(url=file_path)
    8. jv = "https://bj.meituan.com/meishi/api/poi/getPoiList?cityName=北京&cateId=0&areaId=0&sort=&dinnerCountAttrId=&page=3&userId=&uuid=7dc6d913fda1472c8d42.1552289338.1.0.0&platform=1&partner=126&originUrl=https://bj.meituan.com/meishi/pn3/&riskLevel=1&optimusCode=1"
    9. data = browser.execute_script('return ssss()', jv) # 这里使用execute_script调用了ssss函数,并传入参数jv
    10. print(data) # data即我们加密后的_token
    11. browser.close()复制代码

    第一行是rohr.html文件的绝对路径,第二行即我们所需要的_token的加密结果

    转载于:https://juejin.im/post/5c893dd36fb9a049a712adc5

     
  • 相关阅读:
    TDSS 0.0.3 测试版发布,分布式存储系统
    beego中文文档完成+部分新功能和bugfix
    BDD工具Cucumber开发团队扩大且修复了大量Bug
    传微软明年推 Windows 8.2
    试用了Eric4,打算在Eric4中使用Pyqt4写个GUI程序
    玩转Google开源C++单元测试框架Google Test系列(gtest)之八 打造自己的单元测试框架
    代码覆盖率工具大全
    程序员的共鸣 读《卓有成效的程序员》
    玩转Google开源C++单元测试框架Google Test系列(gtest)之二 断言
    玩转Google开源C++单元测试框架Google Test系列(gtest)之五 死亡测试
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/12650390.html
Copyright © 2020-2023  润新知