Zeno

python爬取百度搜索链接

今日分享的是一个利用python的BaidySpider库实现的百度搜索爬取

关键词自己在query那边修改就好了, 目前提取了的就只有百度的链接, 如果需要其他信息, 可以自己打断点对其他数据也清洗入库即可

 

Posted in 随便说Leave a Comment on python爬取百度搜索链接

AST对抗某网站的Js抽取型混淆

因为网站比较敏感, 所以具体网站就不说了, 直接说逻辑部分

为了降低数据提取的错误率, 所以使用了python的slimit库对js代码进行提取处理

对网站源码的JavaScript进行分析后, 发现在其中一个script标签内的js代码是利用抽取混淆的, 并用flashvars开头的变量存储

 

首先用python将该js代码进行提取

将该部分代码格式化后可以看到键名为mediaDefinitions的值是数组, 数组内存储着videoUrl

在这里可以看到, 链接是被抽取的进行拼接后即可还原真实地址

下面会使用到python的slimit库的ast进行还原

通过smlit的Parser类的parse方法, 对js代码转换为ast结构树

获取到结构树后, 需要自定义类, 并继承ASTVisitor, 自定义访问者遍历节点对节点进行抽取

下面代码我先对mediaDefinitions和qualityItems对象进行抽取还原

还原mediaDefinitions和qualityItems对象后, 继续创建访问者对抽取链接进行还原

进入的节点仍然是VarStatement, 因为视频的链接由多个变量并且不定数量进行拼接, 所以下面使用递归方式并使用了get_Identifier方法对抽取变量进行获取还原

下面是完整代码:

 

Posted in 随便说Leave a Comment on AST对抗某网站的Js抽取型混淆

[python] Django宝塔线上部署踩坑记录

原本的Django本地运行的时候是正常的, 当部署线上的时候就一大堆问题出现了.

因为我对Linux并不熟悉, 所以就选择了宝塔的python项目管理器来部署

在部署上线之前, 要添加几个文件.

常规的要在项目根目录加上uwsgi.ini文件, 文件内容如下

以上内容需要注意的是, wsgi-file填写的是wsgi.py文件的绝对路径加上文件夹名字. 网上很多都是只填路径的, 部署后会直接报错. 而wsgi.py是Django在建项目的时候就自带了的, 不需修改

部署成功之后, 如果有域名可以映射到域名上, 点击上面的映射填上域名即可, 映射成功之后可以使用域名访问

如果有使用Django自带的admin后台, 会发现项目部署后admin后台的样式会没了. 找了好几天百度都没有解决, 后来还是看官方文档解决的…

首先是要在settings.py下加上STATIC_ROOT, 然后在这个路径下手动创建一个static文件夹

然后再去主app下的urls.py修改以下代码

修改完之后去服务器切换到你Django所使用的python环境, 去到你Django项目的目录, 然后运行以下命令

官方文档链接: https://docs.djangoproject.com/zh-hans/3.2/howto/static-files/

注: 记得每次修改后重启一下服务才能生效

Posted in 随便说Tagged , Leave a Comment on [python] Django宝塔线上部署踩坑记录

某车号标准加密

这次分析的是某车号的一个列表请求头参数加密

网站: aHR0cHM6Ly9oYW8ueWljaGUuY29tLw==

接口: aHR0cHM6Ly9oYW8ueWljaGUuY29tL3NpdGVfd2ViL2hhby9hcGkvZ2V0X2xhdGVzdF9hcnRpY2xlX2xpc3Q=

参数分析:

初步抓包发现部分可疑参数:

x-sign: 目测疑似md5加密

CIGUID, UserGuid,x-user-guid: 相等, 看似uuid之类的随机生成id

至于其他的x-city-id, x-ip-address应该是记录该次请求的ip和ip所在地域, 其他参数并无可疑之处

直接全局搜索x-sign之后只有一个结果, 点击进去查看发现就只有一个地方有x-sign:

打断点后重新发起请求发现r值是32位大写的字符串, 并且下面的sign加密是需要用到该值的, 所以需要分析r值的获取方法

分析o的方法之后 发现这个值可以固定, 是由e.headerEncryptKeys对象里面根据请求头的x-platform获取的不一样的固定值, 因为他的默认请求是phone所对应的value所以r就可以固定为该值

u值就是由字符串拼接而成的, e.cid也是固定默认值601, i是请求体的json格式, r是上面所获得的固定值, e.timestamp自然就是13位的时间戳

u值获取之后, 就到了下面的yicheUtils.md5方法, 看名字是md5, 但是需要验证一下是否md5和是否标准加密. 可以在console里面试一下加密固定值的md5(例如123456) 是否跟标准md5加密一致

确认是标准md5加密算法, 本次分析完毕.

再加一句, 里面的x-user-guid其实是随机的py的uuid随便搞

Posted in 随便说Tagged , Leave a Comment on 某车号标准加密