首页
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
Search
1
职教云小助手重构更新,职教云助手最新版下载地址【已和谐】
13,972 阅读
2
职教云-智慧职教,网课观看分析(秒刷网课)
11,335 阅读
3
gradle-5.4.1-all.zip下载
9,319 阅读
4
职教云-智慧职教,签到补签分析(逆天改命系列)
8,123 阅读
5
一个优秀的程序员从写文档开始:免费领14个月语雀云笔记会员
6,983 阅读
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
登录
/
注册
Search
Lan
累计撰写
615
篇文章
累计收到
629
条评论
首页
栏目
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
页面
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
搜索到
615
篇与
的结果
2021-09-28
腾讯云2h4g6m三年只需要180元
今晚七点,先购买180元三年的1h2g6m购买地址:https://curl.qcloud.com/P1hRigM2然后通过免费升配活动升级到2核4G6M升配地址:https://curl.qcloud.com/yJg6GL5C
2021年09月28日
717 阅读
0 评论
4 点赞
2021-09-26
FFmpeg常用指令
这两天的任务给我的感觉就是然后就是用.Net调用FFmpeg,在网上找了下开源程序发现了一个FFmpegCore结果没有找到文档,算了还是原生cmd调用吧。然后就有了这么个玩意获取视频截图:ffmpeg -i INPUT -r 1 -q:v 2 -f image2 image-%d.jpeg以下内容转载自:https://www.jianshu.com/p/f07f0be088d0FFmpeg选项一、主要选项1、-f fmt (input/output) 指定输入或者输出文件格式。常规可省略而使用依据扩展名的自动指定,但一些选项需要强制明确设定。2、-i filename (input) 指定输入文件。3、-y (global) 默认自动覆盖输出文件,而不再询问确认。4、-n (global) 不覆盖输出文件,如果输出文件已经存在则立即退出。5、-t duration(input/output) 限制输入/输出的时间。如果是在 -i 前面,就是限定从输入中读取多少时间的数据;如果是用于限定输出文件,则表示写入多少时间数据后就停止。duration可以是以秒为单位的数值或者 hh:mm:ss[.xxx] 格式的时间值。 注意 -to 和 -t 是互斥的,-t 有更高优先级。6、-to position (output) 只写入position时间后就停止,position可以是以秒为单位的数值或者 hh:mm:ss[.xxx]格式的时间值。 注意 -to 和 -t 是互斥的,-t 有更高优先级。7、-ss position (input/output)当在 -i 前,表示定位输入文件到position指定的位置。注意可能一些格式是不支持精确定位的,所以ffmpeg可能是定位到最接近position(在之前)的可定位点。position可以是以秒为单位的数值或者 hh:mm:ss[.xxx] 格式的时间值。8、-itsoffset offset (input) 设置输入文件的时间偏移。offset 必须采用时间持续的方式指定,即可以有-号的时间值(以秒为单位的数值或者 hh:mm:ss[.xxx] 格式的时间值)。偏移会附加到输入文件的时间码上,意味着所指定的流会以时间码+偏移量作为最终输出时间码。9、-timestamp date (output) 设置在容器中记录时间戳。10、-codec[:stream_specifier] codec (input/output,per-stream) 为特定的文件选择编/解码模式,对于输出文件就是编码器,对于输入或者某个流就是解码器。选项参数中 codec 是编解码器的名字,或者是 copy(仅对输出文件)则意味着流数据直接复制而不再编码。二、视频选项1、-vframes number (output) 设置输出文件的帧数,是 -frames:v 的别名。2、-r[:stream_specifier] fps (input/output,per-stream) 设置帧率(一种Hz值,缩写或者分数值)。3、-s[:stream_specifier] size (input/output,per-stream) 设置帧的尺寸。4、-vn (output) 禁止输出视频。5、-vcodec codec (output) 设置视频编码器,这是 -codec:v 的一个别名。6、aspect[:stream_specifier] aspect (output,per-stream) 指定视频的纵横比(长宽显示比例)。aspect 是一个浮点数字符串或者num:den格式字符串(其值就是num/den),例如"4:3","16:9","1.3333"以及"1.7777"都是常用参数值。音频选项1、-aframes number (output) 设置 number 音频帧输出,是 -frames:a 的别名。2、-ar[:stream_specifier] freq (input/output,per-stream) 设置音频采样率。默认是输出同于输入。对于输入进行设置,仅仅通道是真实的设备或者raw数据分离出并映射的通道才有效。对于输出则可以强制设置音频量化的采用率。3、-aq q (output) 设置音频品质(编码指定为VBR),它是 -q:a 的别名。4、-ac[:stream_specifier] channels (input/output,per-stream) 设置音频通道数。默认输出会有输入相同的音频通道。对于输入进行设置,仅仅通道是真实的设备或者raw数据分离出并映射的通道才有效。5、-an (output) 禁止输出音频。6、-acode codec (input/output) 设置音频解码/编码的编/解码器,是 -codec:a 的别名。字幕选项1、-scodec codec(input/output) 设置字幕解码器,是 -codec:s 的别名。2、-sn (output) 禁止输出字幕。3、-fix_sub_duration 修正字幕持续时间。4、-canvas_size size 设置字幕渲染区域的尺寸(位置)。FFmpeg命令示例1、转化格式ffmpeg -i input_test.mp4 -vn -acodec copy output_test.flvffmpeg -i input_test.aac -vn -acodec copy output_test.mp32、抽取画面中的音频ffmpeg -i input_test.mp4 -vn -y -acodec copy output_test.aacffmpeg -i input_test.mp4 -vn -y -acodec copy output_test.mp3ffmpeg -i input_test.mp4 -acodec copy -vn output_test.mp33、抽取画面中的视频ffmpeg -i input_test.mp4 -vcodec copy -an output_test.aviffmpeg -i input_test.mp4 -vcodec copy -an output_test.mp44、音频+视频合成ffmpeg -i input_test_1.mp4 -i input_test_2.mp3 -vcodec copy -acodec copy output_test.mp4ffmpeg -i input_test_1.mp4 -itsoffset 10 -i input_test_2.mp3 -vcodec copy -acodec copy output_test.mp4ffmpeg -ss 20 -t 5 -i input_test_1.mp4 -i input_test_2.aac -vcodec copy -acodec copy output_test.mp4音乐持续播放,视频只播放5秒ffmpeg -ss 20 -t 5 -i input_test_1.mp3 -i input_test_2.mp4 -vcodec copy -acodec copy output_test.mp4视频持续播放,音乐只播放5秒5、音频+音频合成ffmpeg -i input_test_1.mp3 -i input_test_2.mp3 -filter_complex amix=inputs=2:duration=shortest output_test.mp3ffmpeg -i input_test_1.mp3 -i input_test_2.mp3 -filter_complex amix=inputs=2:duration=longest output_test.mp3ffmpeg –i input_test_1.mp3 –i input_test_2.mp3 –vcodec copy –acodec copy output_test.mp3格式:ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT6、视频分离成图片ffmpeg -i input_test.mp4 -r 1 -f image2 output_image-%03d.jpeg7、图片合成视频ffmpeg -f image2 -i output_image-%03d.jpeg output_test.mp48、改变音量大小ffmpeg -i input_test.mp3 -af 'volume=0.5' output_test.mp39、音效淡入淡出效果ffmpeg -i input_test.mp3 -filter_complex afade=t=in:ss=0:d=4 output_test.mp3淡入效果:把 input_test.mp3 文件的前5s做一个淡入淡出效果,输出到 output_test.mp3文件中ffmpeg -i input_test.mp3 -filter_complex afade=t=out:st=20:d=6 output_test.mp3淡出效果:将 input_test.mp3 文件从20s开始,做6s的淡出效果,输出到 output_test.mp3 文件中10、截取音频ffmpeg -ss 10 -i input_test.mp3 -to 20 -vcodec copy -acodec copy output_test.mp3ffmpeg -ss 10 -i input_test.mp3 -t 5 -vcodec copy -acodec copy output_test.mp3ffmpeg -i input_test.mp3 -c copy -t 10 -output_ts_offset 120 output_test.mp311、容器时长获取ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 -i input_test.mp> 312、网络资源下载ffmpeg -i https://xxx.xxx.xxxxxx -c copy -f mp3 output_test.mp311、播放音频视频ffplay input_test.mp312、图片生成gif动图ffmpeg -i input_image_%03d.png -r 5 output_test.gif13、抽取PCM数据ffmpeg -i input_test.mp4 -vn -ar 44100 -ac 2 -f s16le output_test.pcm以下内容来自:https://www.ruanyifeng.com/blog/2020/01/ffmpeg.html一、概念介绍 FFmpeg 用法之前,需要了解一些视频处理的基本概念。1.1 容器视频文件本身其实是一个容器(container),里面包括了视频和音频,也可能有字幕等其他内容。常见的容器格式有以下几种。一般来说,视频文件的后缀名反映了它的容器格式。MP4MKVWebMAVI下面的命令查看 FFmpeg 支持的容器。$ ffmpeg -formats1.2 编码格式视频和音频都需要经过编码,才能保存成文件。不同的编码格式(CODEC),有不同的压缩率,会导致文件大小和清晰度的差异。常用的视频编码格式如下。H.262H.264H.265上面的编码格式都是有版权的,但是可以免费使用。此外,还有几种无版权的视频编码格式。VP8VP9AV1常用的音频编码格式如下。MP3AAC上面所有这些都是有损的编码格式,编码后会损失一些细节,以换取压缩后较小的文件体积。无损的编码格式压缩出来的文件体积较大,这里就不介绍了。下面的命令可以查看 FFmpeg 支持的编码格式,视频编码和音频编码都在内。$ ffmpeg -codecs1.3 编码器编码器(encoders)是实现某种编码格式的库文件。只有安装了某种格式的编码器,才能实现该格式视频/音频的编码和解码。以下是一些 FFmpeg 内置的视频编码器。libx264:最流行的开源 H.264 编码器NVENC:基于 NVIDIA GPU 的 H.264 编码器libx265:开源的 HEVC 编码器libvpx:谷歌的 VP8 和 VP9 编码器libaom:AV1 编码器音频编码器如下。libfdk-aacaac下面的命令可以查看 FFmpeg 已安装的编码器。$ ffmpeg -encoders二、FFmpeg 的使用格式FFmpeg 的命令行参数非常多,可以分成五个部分。$ ffmpeg {1} {2} -i {3} {4} {5}上面命令中,五个部分的参数依次如下。全局参数输入文件参数输入文件输出文件参数输出文件参数太多的时候,为了便于查看,ffmpeg 命令可以写成多行。$ ffmpeg \[全局参数] \[输入文件参数] \-i [输入文件] \[输出文件参数] \[输出文件]下面是一个例子。$ ffmpeg \-y \ # 全局参数-c:a libfdk_aac -c:v libx264 \ # 输入文件参数-i input.mp4 \ # 输入文件-c:v libvpx-vp9 -c:a libvorbis \ # 输出文件参数output.webm # 输出文件上面的命令将 mp4 文件转成 webm 文件,这两个都是容器格式。输入的 mp4 文件的音频编码格式是 aac,视频编码格式是 H.264;输出的 webm 文件的视频编码格式是 VP9,音频格式是 Vorbis。如果不指明编码格式,FFmpeg 会自己判断输入文件的编码。因此,上面的命令可以简单写成下面的样子。$ ffmpeg -i input.avi output.mp4三、常用命令行参数FFmpeg 常用的命令行参数如下。-c:指定编码器-c copy:直接复制,不经过重新编码(这样比较快)-c:v:指定视频编码器-c:a:指定音频编码器-i:指定输入文件-an:去除音频流-vn: 去除视频流-preset:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。-y:不经过确认,输出时直接覆盖同名文件。四、常见用法下面介绍 FFmpeg 几种常见用法。4.1 查看文件信息查看视频文件的元信息,比如编码格式和比特率,可以只使用-i参数。$ ffmpeg -i input.mp4上面命令会输出很多冗余信息,加上-hide_banner参数,可以只显示元信息。$ ffmpeg -i input.mp4 -hide_banner4.2 转换编码格式转换编码格式(transcoding)指的是, 将视频文件从一种编码转成另一种编码。比如转成 H.264 编码,一般使用编码器libx264,所以只需指定输出文件的视频编码器即可。$ ffmpeg -i [input.file] -c:v libx264 output.mp4下面是转成 H.265 编码的写法。$ ffmpeg -i [input.file] -c:v libx265 output.mp44.3 转换容器格式转换容器格式(transmuxing)指的是,将视频文件从一种容器转到另一种容器。下面是 mp4 转 webm 的写法。$ ffmpeg -i input.mp4 -c copy output.webm上面例子中,只是转一下容器,内部的编码格式不变,所以使用-c copy指定直接拷贝,不经过转码,这样比较快。4.4 调整码率调整码率(transrating)指的是,改变编码的比特率,一般用来将视频文件的体积变小。下面的例子指定码率最小为964K,最大为3856K,缓冲区大小为 2000K。$ ffmpeg \-i input.mp4 \-minrate 964K -maxrate 3856K -bufsize 2000K \output.mp44.5 改变分辨率(transsizing)下面是改变视频分辨率(transsizing)的例子,从 1080p 转为 480p 。$ ffmpeg \-i input.mp4 \-vf scale=480:-1 \output.mp44.6 提取音频有时,需要从视频里面提取音频(demuxing),可以像下面这样写。$ ffmpeg \-i input.mp4 \-vn -c:a copy \output.aac上面例子中,-vn表示去掉视频,-c:a copy表示不改变音频编码,直接拷贝。4.7 添加音轨添加音轨(muxing)指的是,将外部音频加入视频,比如添加背景音乐或旁白。$ ffmpeg \-i input.aac -i input.mp4 \output.mp4上面例子中,有音频和视频两个输入文件,FFmpeg 会将它们合成为一个文件。4.8 截图下面的例子是从指定时间开始,连续对1秒钟的视频进行截图。$ ffmpeg \-y \-i input.mp4 \-ss 00:01:24 -t 00:00:01 \output_%3d.jpg如果只需要截一张图,可以指定只截取一帧。$ ffmpeg \-ss 01:23:45 \-i input \-vframes 1 -q:v 2 \output.jpg上面例子中,-vframes 1指定只截取一帧,-q:v 2表示输出的图片质量,一般是1到5之间(1 为质量最高)。4.9 裁剪裁剪(cutting)指的是,截取原始视频里面的一个片段,输出为一个新视频。可以指定开始时间(start)和持续时间(duration),也可以指定结束时间(end)。$ ffmpeg -ss [start] -i [input] -t [duration] -c copy [output]$ ffmpeg -ss [start] -i [input] -to [end] -c copy [output]下面是实际的例子。$ ffmpeg -ss 00:01:50 -i [input] -t 10.5 -c copy [output]$ ffmpeg -ss 2.5 -i [input] -to 10 -c copy [output]上面例子中,-c copy表示不改变音频和视频的编码格式,直接拷贝,这样会快很多。4.10 为音频添加封面有些视频网站只允许上传视频文件。如果要上传音频文件,必须为音频添加封面,将其转为视频,然后上传。下面命令可以将音频文件,转为带封面的视频文件。$ ffmpeg \-loop 1 \-i cover.jpg -i input.mp3 \-c:v libx264 -c:a aac -b:a 192k -shortest \output.mp4上面命令中,有两个输入文件,一个是封面图片cover.jpg,另一个是音频文件input.mp3。-loop 1参数表示图片无限循环,-shortest参数表示音频文件结束,输出视频就结束。
2021年09月26日
752 阅读
0 评论
0 点赞
2021-09-23
Epubee整站电子书库
一年以前,我买了10年的Epubee会员,结果不到一年,他跑路了。。。无情呀,然后我也就没地方找电子书了,昨晚上看到有人在群里分享资源,Epubee整站电子书库,我顺手保存了一下。还挺多的,就在阿里云盘,也没当回事然后今天公司给我安排新项目了,不当人了,让我用代码剪视频,就是FFmpeg,所以在网上收集学习资料,然后看到一本电子书《FFmpeg从入门到精通》,我试着搜了一下,还真有但是好像阿里不能分享这么多文件了,所以有需要留言
2021年09月23日
3,374 阅读
9 评论
0 点赞
2021-09-10
猿人学第四题,雪碧图、样式干扰
两分钟后:里面用到了类似于字体加密,但是是把数字用base64转成了图片,但是有个规律就是每个数字都是固定的base64,然后就可以取到很多数字,然后有一个class用到了MD5和base64加密,最后删除包含这个class的img,就得到了四位数,但是四位数顺序是乱的,然后就需要根据style里面的margin去换位置,最终就可以将正确的数字取出来,如上图,然后再整一整就是下图了Python代码:import base64 import hashlib import parsel import requests pic2num = { 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAcCAYAAACOGPReAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAD0SURBVEhLY5RVUPvPQGXABKUJAA2GvzP3Mry6f5PhzfI4qBhuQNjQqD6Gzxc3Mjxzk2H4CRUiBHAYKs3wP7Gd4evhSwzPWr0ZPvBBhYkEqIaaBzL8nrmS4f3FfQzP6oIY3smwM/yFSpECkAyNY/g2q4PhhZsBwxegy/5BRZlfP2HgIdbfUIAnTD8xCGyuZ5AyW8jATqmhzD9fMwjumsUgbWPKwJu3AipKGkAydC8DZ24sg5SGDQNPei8D01OoMBkAydCnDIyHTkHZlAE8YUo+GDWU+mAEGfq46RCUhQAUGypbZwdlIcBoRFEfjBpKfUADQxkYAKYHOb9g+7HMAAAAAElFTkSuQmCC': 1, 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAYAAACqhkzFAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAKCSURBVEhLrZZLaBNRFIb/PDp5SFMxjqVOAjYLNUGUbhI3cdEGwaAgbmopWFIQBEUwFhQVldIqCuqilLoymEVVlCqWuNdVXRk31Y1uTKAQMRI0ycQk453JaWaSJjYPPxjmnJPwcefOuSfROXftlvAfaSAUIIXOITfuR9bBQzQBZfqEEzPgVuPY8uIeuMXPVK2lVnjoCrKzJ5F2mKqSZpi/xGCfCEOfpAKhCkPz+HEpgN9sRVpMoqjcJZMJBSVS0Wfeoz94CkaNVE93wOOqygyZr9i+cBnOwT3YsXe/cvUPDsMxHcPWTOU7MmWbD+m5i5RVUIUKGfQt38DOA0dgufuSauskoYuE0RuchV0jzQ8FIAqUMFShmIB9+jhs559SoQnJKKwLcZgpBVwoTFLIUIXXTsMaqdvhZjz8qBECRYeXog2P3CoJts8UMko2F0UdC90o2ihkcAl1mzoTnnGh0kwyGRhXKWR0IBRQOOZGnjL57RsjFDLaF87MI+1Ru9+ysgSOYpn2hKEovo+71RMjfoJtKkpJhRaFAsozr5C67kOOKvLe2e+cBVfXaZsLhSD+LD3DGluZum8p5RA06tt/C4/exK83D7A2xKNEJT07UfzV0aaHoImQHnFuDGlNv8kja2BkBObF5ieqgdDf8BG3PboAPrBx/tVTN7H9KMTuI+WxVQesIRUHPzWKnndU2ATNCgUUn9TKrB8eY8DbukxGFYZu4+dBVWZZYXPvxC3oKG8VEnqRn1R7rCfBfi/Gahu2VSpC3wRyDiViiOhdDre9snUqwsOCZnqkYHhLYSfIb9n5+psESerq6nvOPMylrLDEa7q3C7L7hrVt0z1Fu9Dor0g3AH8BJlTqZkAngxQAAAAASUVORK5CYII=': 2, 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAYAAACqhkzFAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAALaSURBVEhLrZVPSBRRHMe/O+rOuuaUyRoyBlGQfw5lh9xTekg8qIdMKSsQFKRAD0WUROhBCIlSBD1YQsJKQSB1iRa8VRf1Up4UQiNcRVw1nXVdx3V3euP+ZnZmR9EVP/CY3/vx5sPMe+/3nu3suYsKjhGrUCxB5GErNssKERIEyDzlIYOX/MgY+4r0zm5w85ROwCRU2j1Yu+fGhi7ZG072Iau3Bc6BacrE4ejJ6EKgySyzy+yrdptpIKJ8HlbahrHZKFImjnEcIeHU6FuIlfk4U3AJObstH2L9C7hmJKTQKEBg0h7sUE/DJLT5x5FbeRWZ99kcTVFSY9wDR/kN5Pxkn6vBFyPUTjFhEPYjs6YBqYkiE/NIfTeODOqpyEUNFMUwCNmy7bNyJr5M787pfuwxhwfhh+1YhWIxtgWKGXafh6IYSQuVjssIUgxMwdFLIZGc8IEHKxV5iFL3xGg37AnzfnAtu68jUlYFueIa1i4IiFDaOfYa2XcGqRfHKnzlxVzdeepYSZVmkfXyERwfrGWnktQvc7If6T62yrxhVRKwCvX6jTet3KK8C4EiN5Y6hrEw6YV811rLhzwPRSi19dhqqmFCFzvINPzI7rwN51B8ZQ4pNNA4iNW2UgTpVOL835Fb0qz/atL7EEPNyPrm01+MutwIPaUOI3khw9Y5aTggeISu1FN8RCHm5YQX7fQ8qlDk9WpR4eRlinQhW37rDtgXpc1Yz2xrsYtLg4StCHz+iHD1IazVPQgY6hnSLzgGKGbov6y4irHY58W/T13YKS2grIHCGoTfeLHcV4V1w9V6+v0zwz2j78MuSH9uYp2SKhwbnKbvYB5hJjHOmyo7OdIC4ckP6segL5wAb7rR1Jd5dslrzSxLYQeE6/ktXbYVCmJp0YfghpRQKbWPsVVXjs0iEWGBxzalVXhZQtrMFJwj/eCHJigbY2FuFpFI7EJNvvT2wPf3NxRF1QD/AbAv8WdRHzjKAAAAAElFTkSuQmCC': 3, 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAbCAYAAACTHcTmAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAHHSURBVEhLrZW9LwNhHMe/WrT10mrKVE2EROIfUAuTTQxMLISBQSxeIjQSTZRIsYgYhYVRIrWzaCxiMjFVoqjWaatPaR9Pe09bbfT6XHKf5Mn9vne9T+55fs/1qhxtnRRqWD1DcLILSR5Nfg+aR495ktHxoyBDiA8WhOVQJaXeKUgtPCggLrXPs6dsxzePSghLU9sjiBh4qICYtG8fUo8Z6UxNXlEvZc+WRUDaC+LpR5SnhssLGHldjopS6l1BpFWuda9XsEwH5KCAstS5iU/WHHkLSbAerAmtl8JvupH0DOCDN8d4e4q6wyc5VKCslHrdCHdwI7mHZXZHrgX4X9r3d9oElvMN1Io9ZJZ/pL1IeIbz06598KFx8UYOgpRI7fg52UWIdzszbev4Mqp4FKVYOrGJSG6Ts27btmZUTTtHQcrWUVpy4otHk39PuNulyFL7GOJ7hXWsCfhgK/mPVAOTstfwaAEhMz9DHmF1zalexyIcbj81UUqh0TBdr9OS7muDDoRAz4ZBxajmN2dggqJrepKE+g8fWFPvXPkeaPDhE0MzaeIrhpfnAGJRSTvp+1sQJBFHOBTUTppOp7LHzM7STGpusvEK+AUL4d3X/AgqvQAAAABJRU5ErkJggg==': 4, 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAcCAYAAACOGPReAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAIxSURBVEhLrZU/aBNRHMe/bWKexnoiaSg0FSSCaAfFwT+L7dKloUs7OqRVcHBwcZOCiCAOhk4dxAwdHFRwEEoRSjvoZNqhdDE4tC7aIYmWvOiV1941vnf51dy7S0ou6Qfu+P5+B9/7/e7e+72us+cuVHHE+EzF0jcUzlPQCjyH/itphChUdKub+bcCXv4tVQr7hsp0hmNqWXsob5ek6kWVqUxneNpPw1yfxi+nWo7Y02uIzjkPAuFUWucSrKNqvzEcoUWSAdFNbyewSxJK/SQZEN1U+0kCXaSCopvGGfZJgsv2SQbFY2rI+jqn+Y/ipbYr1dap/WYVWzfra0q98f/nkDDBcWwjj+j7WbC5Fcr6aV6pxG2oEMzAn8EbKDx+ja31jxBytTRCM7WNepVhIWRl6qKEB9tIovDsA8w7fuPWR9/QPezenQAfTmKHUg5iE32To4jkKJYc2r7G5ywiU6PoTWUQK7rKZ0lU7o9TUKN10wPyWUQfLOA0hQrz6jhs0orgporcI0TXXNUacVgkFe2ZSsI/iqT8tG162DBv23RvYICURG4K3xkVmKEZmIOkJWqXhUkrgpsm0tjJjKBCoRqRp+afkK7hMr2I6tgt0g1IXIf94h22l6dRkiPygMjXtzj5kgLCtaOeg3+fQNnR/u1pMaatRUVkYwHxyYfo9pwQTdpncnjol24o0PMpg74Rv6HCZbqC41/y6OG1QeKdpSGZO1HcRGz+FRKpyzgzlaUnXoB/3J2gmVZucHAAAAAASUVORK5CYII=': 5, 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAdCAYAAABFRCf7AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAANLSURBVEhLrZZNSFRRFMf/48e8UZtRktFkRsiEdCIKVwaikrlJbZG0MEGDwEWUIPaBQoiIZIJGG4mikoyyIBJKW4gbs4W66WOhtlAXzixq/HzGjG/8eN0378yb+5w3qdAPLnPOmXf/nHfvOfc+U+bR4zL+M/sTrW6F71Ih/CfskAQB2xQ2SyLMU5OwPr+HuEEPRfcSddXB96QeK04BOxQyZg7pWedhJi+GfiOp7sHqwC0s7RKMkyQIwaGfzGdmLFrUAbGlFOsC+ZBwaLwfjqoSZOSeQlpw5MBR1oQjw3NIoKdCGLz+Rfgn72PRTq7khr2tFpbX4TWLwJULTM+QY5Cp/PgGlkOCEJHauYegAieosEuUbUyxU1tDy9c3SOzdQ9AAvWh7ObeOblg7u8k+GJyoA4E8FzbJi5mdhGWCnAPCiVZhM5tMRuLsAFkHJyxakcu6hWy2QcL4pGpW3IR/6AsWZ35iYV4dnvkfWBp7C/+dMvWZ3SglFRzPpuR4WZYRHAtyWsFZ2fFhVha0mPEQFkbljALSoBHO1G7V1hMIQG54Cu+FY6zsVcyhTiI/hOQswq9PfdhyUIChiW7bbWQpOLDOBANMMknppLIcpIc6KasEzrYhJIv0KGPHlo/VrlrydBvFI2CDNXfyu+s4fLkVMdMUDuKBqbcRtvr3SA69BsN/phIByjaKKPvDPQLr7THyDPjcDOuwmxNwYaNBtaKKWse7YSI7GqbO70giWyHgVJdAE431covESipuah/t6fkGMzdNsruCv+FMveuIJzMavpMlEItryIskdGaERYc9XLnYsO0kk2Mr1YG1c3XkRZLgVXc0LDoxAYF7lY28yMm20ZfIbCkij5GfD4mrxFhRPQK5jepjR52XbEW0XCuRaOxcO40/ZLP1g+Wj2tqcKHMesZuRbKVEVl506O4eHRU9WCvWTnPEz47BMqjaOlFMNLJSErVgILsSiyMPsJ3Pp5yLnfY+LHeVclm6kdLWrJWgwR1VCGmkB7+z9V2u9H5wErv3uUZiiEh5xZK5G24UfaZBxiBcaUL6lIhYiigEFLFdgjHsUkztrNEJKvz7Y6K6A76rhfA5lS+TUB1KrHQ8SBztR8LDPpgMemR/nz0HAvgL80YzEyuMQpQAAAAASUVORK5CYII=': 6, 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAHhSURBVEhLrZY9LANhGMf/PprDVQkxyFXSVCKIwYStiZoqhoqEhTCQWCwiBBEDiUTMBpOJhKQDkw1L1YDFxoSlBi2tlurrrn2uH9xX2/sll/6f4X557n3e903LWhxtDCZSTr/mIXXY4thgjSHGwEp76o7amOkdmih8BHcMlDAULz4DW3htSlf8+RIaJn3Fd8i2ZxAiGeK3sK34UrE4oTCP6JAT31TWneyg8jmdixKyNQ/eOCqCF7AuBKgoRigs48NlR5LK+rP1PEnBwuRmfnf8Kn0rUZhQWEfEJU/if3cSBQmTmwN4o6zUnYRxobh2kb5sd7X+PcWXDQvZohthee3EfWedy042F4PCCXzmTLbGf4hKyn8xJtwYRthGGU/gd9OnQgkDwh7EXB2ZU2G5v0TVFRUK6At7xxCzUxbhb/YoKaMrTM724J2yNIxqha2Si47Qi1hndqtw9wHFYUS7+hF2jaeytnDKi2jGFwfv36GcT6JRQMg9ncqaF+zPwTVe+mi84uc2t4+qbhcZjQ49+GrN7BVYHu50ZRLqwt5BxLLLh6qHfUraqAtHnIhSFG8CcGfa05VRFSZahcxRQ/wZllPKOqgIPfi2yzeBSPAVFRT1UBF2I5GzflzwEWWU9TD5zxLwC1sVsHrJiVs0AAAAAElFTkSuQmCC': 7, 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAYAAACqhkzFAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAANtSURBVEhLrZXfS1NhGMe/rumZbR4nOcO2IA1CvQi8UW8y8EJqZCR1IQiKwvRCuiqTfomtkkrqIpN+EFSGNaFECL0IbzQvnH/A6EavNiinJVubO/5a73nPs51zNqf04wPjfJ8X9uV5n/d93ifr8JFjcfxHMhueuYS1dieiFTZIgoAtvihBCAVhnptErvshDAG+qGMHwzJsvh7Cj5MO9vfMGCQ/Ckb6sP/2F1pRMNCXsGPz/Vt8TzEzSiwz/qMFxrbgwEr7I0Tb7LSioDe8OYSVGhHbFOYEZ1DcVIfisuMo4r86ONxTyEsai1jpGcK6xlNj6MRaQznWKTL4p1BU5YLRqy1UAFmvumDtGEN+wlQoR7SnigKd4Qls2EiyDVs/dSGLojRmrsIyF6QAiFQ0ktIaslokspMzMT4gmQFDMEyK1ZO+MqqhL4x9JFn1EK8m+Yeohl4vu2Ok4UCsWa1LOmw3FaWkAbNfvTqaGg4jd86fXAjX34JUS0EK8YGX+FlBARZhfjpJWmfIbnlnHwoX6PiEUiy9mEVkwIV4ubKEWheksVksXSilekvI/9APwcsDTnqn2JsQ81zDikPQFTsdCXmf+2Ht9FCsoMuQE/DAdHkQBeqt2BHz9CDy3XozmZQM7dh+Pozlen3rGViUzRa22COxSWsycj8fcLfA9E69/JoM5T4exTeNWe7CBA6x1rOXKK1XXCK33gSsdBvkfg7eHdX1s5phG8ustxprPJCL3QWxW/+SJLE7Ib25h6WjghKHvCh2tsDIEqUMqxBrT5ixa+3zZDaTCUxCaPXAmtiKWI1f1M+KYXUr1hxcMSRYpvtJ70KgH7k+tdLhGhe/FYphvV1zCHv3cQLjguYlsjn4gSmGooANLv4N+TAUw2AIVF5GIbbaSO7BlqOQFEMK8cdFMRxZhIkLGRGRBhfp3XAhVimSZkbBgMYw8AQmH1ecWGVH2qzQEo3kYfVUGKvqtpA35+EPsmLIDiLn/hQsSsBgs6J3HKHHLYin+p5n47XtLMLP3MleN7DZY+me51rXevE741huLkeM4gQ5bOIp40BgM5qLJAZpEYUdpyHMUKx8FLJunIPtutpaCdZZD8vDPtXM5J/BwUbVTGaHQS9Thu0rF9kUrELEJmKDGSW2J7DTzPbNwzIyiOyPX2lVJYPh3wL8BvLZG6cpuRANAAAAAElFTkSuQmCC': 8, 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAMzSURBVEhLpZZPSBRhGMYfV9dpdV3UHDVXIw1KDUwJVy/VLTAVWugQRJqUpxAkFyuMIBMPWRGYiCGGC7J0KCRKL13Si9pBvKiH9NIYoavgqKvjujt9M/OuM+uustUPvpn3edl9eL/3+7Mbl3fqjIxoFDnhb76Bzcoi7No47FI6QRJxbHYKKQOdSPi8RFmdKIZ2BDt6sHazCNuUiY4E67cXSLvtJq1hojdhx57nPX4fMDOxL3OSMiihwmHzchu8njrSGmGGclc/Vit5BEibxEXw7bdgzy9BZqEyziLP5UH6Cn2AsV3ZBF+DnVTYlBuxNe/CGqcpSHPIdl6DeY60EXsdfCNtWLVp0rQyhhOORrU6vcKOamyEzNgUU4fuRTdTWHIj6fUkLCSDfCl2GrR433CvuAB+ipXqLM8iVzCMd29gFSiGDb4rWi/J0IE9fr88QFhEAoWHMwWzIFLMeplbAaV3ZFiIIPXjb4gXvBQx+Ax1MfUeGuEM1cYKZzMauhFv2Arg2X6k8CgCuRkUKaQgWGOo0CwYHLlS+LocJA7B3oKdMmOfOMi8wdDUy84nxQrrtU8h1egbNpyLkAbr9T1rQO/h5EtYJ0Q9wRVguXsYG30tCFwq1HJ2B4KtPdiY6cfyac3NrD4VJMQpk1ROij7uyJk/dmTIcgxjXT7+aUK27OsFOZN56BWqjIOrf4isWRHxlImOiLSh+0iaJqnCKmTPA4aMpREkVpcjx/UWGdOLSBZDNw0booC0iY/IuVoO6+NxoJjXbyVRK+LwCzYGAp7v+FWprbR5dhDZ1Z1RKowZB/y5+rbhhK/qO2bD/FMncb7kHClGRT07vxRDgGVgSo1iNrTZUnChrIQUm26zA5sUm4QZcJNa/G89bHDD+6SCFkRCem8Vkp9r1114hfbDToaBmlcQH4TMgMSFL0giM4Vww2Z2AqaGsd3qpIQB5We1bxTe7mqsh46ctIjU9kfq/gsRPuWuUfy8XkCCrRzbexTBz0yCpBRMzCzDdRfcgd/mIxdFYveiNsLNOGEMWc6qCDOFA4vCbu7WJmzXOrDF21SjEBz7x2Bm/xisQ90wf5inbCT/dVIiAf4ApbEnkB6qHqsAAAAASUVORK5CYII=': 9, 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAYAAACqhkzFAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAMTSURBVEhLrZY/TBNRHMe/bY82LeGA0Dp4NTGYqO1gdKEMwmQcGh38M5CQlGDSwWiMAwwYg2iCJsZJQ9CJ0ETsQMJgwuagLIUFXIAFXNoYcqDloLRXrq3v7v3aXktbSPCTXO77fZRvf/feu9+r5dz5iwX8R+oESigMPka6/wb2vSJUBx+1QoVD3kTz7DScb+f4YBVHA6U+ZKLPsON1IE9DtbDLP9AxEIawRgOEle4cKYSD+ZeQq8IcKquMXTbyOllPL7aiEWgSDRCmQAnahyHsiGQZruUvkIKXcObyFeM62zcOd1ylvwJ5MYDkuxA5Tjlw8A2S12iyGM7YODrujsFqfqTFCJw9L+CWyTPS3QPIBMgwKFBC9n4AaW4AdQVtQxEy1czBObkIJznAi9TDO6SLgVIYqt9QBq5YFEKCTC2momg2VXngD5bmnAc+uIqUIXQUOL/X3hJl5mHfUEgzPJ04pMUxAnN+CYeG1UlAmCLZANtqAk2kARG5m1zxQI9paWUZAsmGsArLnxOh0ZSxwCBypjwo2zQPxzCTgJ2kTtbbZ9zZ/7pRKO8WOOWqrX9iePyJiqnNGgTTuhRhgT5o5kc+JaeosDYssHbpx+OtXEziSIWqx0fqOFpg7ns2Zd24s8B1WE0V5h2mJW/ELTc0kjo2Zcm4s8ClikCIlR+si59tZpL66yosc2U8clM8bhgDkfVFUzuqR569rqXOqG7CPsOlEWiJJSraUaa/i3Q9upC94CHNCtr4WXoN+aJMzcFlakd73eGG5wnuhZHykmZ1tnx9TboYqDfNWLxoWDvqhfK+h0w1Pcg87cUBOavMmu1HMoxShuXJNNpNi7N3ewLJTyEUzIdQIIT0wgQ7EcmzxWifZMcEOZ3KY3Qwgp3RQOnbOfqJx5XGtlSOS4aK1tlHEIcXyHNsrW0dY6SBFX0ufShc70S21OwE5AR+lb+ZVfb5OVpGviGTTkHeSmBfScJqtdX55SAFoY0OsMXxISM6SvvNrshwrS7A9WoENupyv+O/oGm831sslno/RU6OsvsHu3+3yQH/AOyW6SvqnweCAAAAAElFTkSuQmCC': 0, } margin2num = { 'left:11.5px': 1, 'left:-11.5px': -1, 'left:-23.0px': -2, 'left:23.0px': 2, 'left:34.5px': 3, 'left:-34.5px': -3, 'left:0.0px': 0, 'left:0px': 0, } headers = { 'user-agent': 'yuanrenxue.project' } result = 0 for page in range(1, 6): response = requests.get(f'https://match.yuanrenxue.com/api/match/4?page={page}', headers=headers).json() delElClass = hashlib.md5(base64.b64encode(f"{response['key']}{response['value']}".encode('utf-8')).decode() .replace('=', '').encode('utf-8')).hexdigest() tds = parsel.Selector(response['info']) for td in tds.xpath('//td'): imageClass = td.xpath('img/@class').extract() imageSrc = td.xpath('img/@src').extract() imageStyle = td.xpath('img/@style').extract() num = [] change = [] for index, value in enumerate(imageClass): if delElClass not in value: change.append(margin2num[imageStyle[index]]) num.append(str(pic2num[imageSrc[index]])) source = num.copy() for i, c in enumerate(change): if c != 0: num[i + c] = source[i] result += int(''.join(num)) print(result)
2021年09月10日
1,033 阅读
0 评论
2 点赞
2021-09-09
169. 多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1:输入:[3,2,3]输出:3示例 2:输入:[2,2,1,1,1,2,2]输出:2class Solution(object): def majorityElement(self, nums): """ :type nums: List[int] :rtype: int """ for num in set(nums): if nums.count(num) > int(len(nums) / 2): return num来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/majority-element著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2021年09月09日
392 阅读
0 评论
1 点赞
2021-09-04
JS逆向之MD5加密
这两天碰到了两个MD5加密的js逆向,一个是猿人学第一题,还有一个就是在工作中。然后发现了些规律,一般MD5加密之后的字符串是32位,也有16位,这基本都知道但是在MD5加密的js代码中也有一些规律。这是我昨天在猿人学里面获取到的MD5加密代码var hexcase = 0; var b64pad = ""; var chrsz = 16; function hex_md5(a) { return binl2hex(core_md5(str2binl(a), a.length * chrsz)) } function b64_md5(a) { return binl2b64(core_md5(str2binl(a), a.length * chrsz)) } function str_md5(a) { return binl2str(core_md5(str2binl(a), a.length * chrsz)) } function hex_hmac_md5(a, b) { return binl2hex(core_hmac_md5(a, b)) } function b64_hmac_md5(a, b) { return binl2b64(core_hmac_md5(a, b)) } function str_hmac_md5(a, b) { return binl2str(core_hmac_md5(a, b)) } function md5_vm_test() { return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72" } function core_md5(p, k) { p[k >> 5] |= 128 << ((k) % 32); p[(((k + 64) >>> 9) << 4) + 14] = k; var o = 1732584193; var n = -271733879; var m = -1732584194; var l = 271733878; for (var g = 0; g < p.length; g += 16) { var j = o; var h = n; var f = m; var e = l; o = md5_ff(o, n, m, l, p[g + 0], 7, -680976936); l = md5_ff(l, o, n, m, p[g + 1], 12, -389564586); m = md5_ff(m, l, o, n, p[g + 2], 17, 606105819); n = md5_ff(n, m, l, o, p[g + 3], 22, -1044525330); o = md5_ff(o, n, m, l, p[g + 4], 7, -176418897); l = md5_ff(l, o, n, m, p[g + 5], 12, 1200080426); m = md5_ff(m, l, o, n, p[g + 6], 17, -1473231341); n = md5_ff(n, m, l, o, p[g + 7], 22, -45705983); o = md5_ff(o, n, m, l, p[g + 8], 7, 1770035416); l = md5_ff(l, o, n, m, p[g + 9], 12, -1958414417); m = md5_ff(m, l, o, n, p[g + 10], 17, -42063); n = md5_ff(n, m, l, o, p[g + 11], 22, -1990404162); o = md5_ff(o, n, m, l, p[g + 12], 7, 1804660682); l = md5_ff(l, o, n, m, p[g + 13], 12, -40341101); m = md5_ff(m, l, o, n, p[g + 14], 17, -1502002290); n = md5_ff(n, m, l, o, p[g + 15], 22, 1236535329); o = md5_gg(o, n, m, l, p[g + 1], 5, -165796510); l = md5_gg(l, o, n, m, p[g + 6], 9, -1069501632); m = md5_gg(m, l, o, n, p[g + 11], 14, 643717713); n = md5_gg(n, m, l, o, p[g + 0], 20, -373897302); o = md5_gg(o, n, m, l, p[g + 5], 5, -701558691); l = md5_gg(l, o, n, m, p[g + 10], 9, 38016083); m = md5_gg(m, l, o, n, p[g + 15], 14, -660478335); n = md5_gg(n, m, l, o, p[g + 4], 20, -405537848); o = md5_gg(o, n, m, l, p[g + 9], 5, 568446438); l = md5_gg(l, o, n, m, p[g + 14], 9, -1019803690); m = md5_gg(m, l, o, n, p[g + 3], 14, -187363961); n = md5_gg(n, m, l, o, p[g + 8], 20, 1163531501); o = md5_gg(o, n, m, l, p[g + 13], 5, -1444681467); l = md5_gg(l, o, n, m, p[g + 2], 9, -51403784); m = md5_gg(m, l, o, n, p[g + 7], 14, 1735328473); n = md5_gg(n, m, l, o, p[g + 12], 20, -1921207734); o = md5_hh(o, n, m, l, p[g + 5], 4, -378558); l = md5_hh(l, o, n, m, p[g + 8], 11, -2022574463); m = md5_hh(m, l, o, n, p[g + 11], 16, 1839030562); n = md5_hh(n, m, l, o, p[g + 14], 23, -35309556); o = md5_hh(o, n, m, l, p[g + 1], 4, -1530992060); l = md5_hh(l, o, n, m, p[g + 4], 11, 1272893353); m = md5_hh(m, l, o, n, p[g + 7], 16, -155497632); n = md5_hh(n, m, l, o, p[g + 10], 23, -1094730640); o = md5_hh(o, n, m, l, p[g + 13], 4, 681279174); l = md5_hh(l, o, n, m, p[g + 0], 11, -358537222); m = md5_hh(m, l, o, n, p[g + 3], 16, -722881979); n = md5_hh(n, m, l, o, p[g + 6], 23, 76029189); o = md5_hh(o, n, m, l, p[g + 9], 4, -640364487); l = md5_hh(l, o, n, m, p[g + 12], 11, -421815835); m = md5_hh(m, l, o, n, p[g + 15], 16, 530742520); n = md5_hh(n, m, l, o, p[g + 2], 23, -995338651); o = md5_ii(o, n, m, l, p[g + 0], 6, -198630844); l = md5_ii(l, o, n, m, p[g + 7], 10, 11261161415); m = md5_ii(m, l, o, n, p[g + 14], 15, -1416354905); n = md5_ii(n, m, l, o, p[g + 5], 21, -57434055); o = md5_ii(o, n, m, l, p[g + 12], 6, 1700485571); l = md5_ii(l, o, n, m, p[g + 3], 10, -1894446606); m = md5_ii(m, l, o, n, p[g + 10], 15, -1051523); n = md5_ii(n, m, l, o, p[g + 1], 21, -2054922799); o = md5_ii(o, n, m, l, p[g + 8], 6, 1873313359); l = md5_ii(l, o, n, m, p[g + 15], 10, -30611744); m = md5_ii(m, l, o, n, p[g + 6], 15, -1560198380); n = md5_ii(n, m, l, o, p[g + 13], 21, 1309151649); o = md5_ii(o, n, m, l, p[g + 4], 6, -145523070); l = md5_ii(l, o, n, m, p[g + 11], 10, -1120210379); m = md5_ii(m, l, o, n, p[g + 2], 15, 718787259); n = md5_ii(n, m, l, o, p[g + 9], 21, -343485551); o = safe_add(o, j); n = safe_add(n, h); m = safe_add(m, f); l = safe_add(l, e) } return Array(o, n, m, l) } function md5_cmn(h, e, d, c, g, f) { return safe_add(bit_rol(safe_add(safe_add(e, h), safe_add(c, f)), g), d) } function md5_ff(g, f, k, j, e, i, h) { return md5_cmn((f & k) | ((~f) & j), g, f, e, i, h) } function md5_gg(g, f, k, j, e, i, h) { return md5_cmn((f & j) | (k & (~j)), g, f, e, i, h) } function md5_hh(g, f, k, j, e, i, h) { return md5_cmn(f ^ k ^ j, g, f, e, i, h) } function md5_ii(g, f, k, j, e, i, h) { return md5_cmn(k ^ (f | (~j)), g, f, e, i, h) } function core_hmac_md5(c, f) { var e = str2binl(c); if (e.length > 16) { e = core_md5(e, c.length * chrsz) } var a = Array(16), d = Array(16); for (var b = 0; b < 16; b++) { a[b] = e[b] ^ 909522486; d[b] = e[b] ^ 1549556828 } var g = core_md5(a.concat(str2binl(f)), 512 + f.length * chrsz); return core_md5(d.concat(g), 512 + 128) } function safe_add(a, d) { var c = (a & 65535) + (d & 65535); var b = (a >> 16) + (d >> 16) + (c >> 16); return (b << 16) | (c & 65535) } function bit_rol(a, b) { return (a << b) | (a >>> (32 - b)) } function str2binl(d) { var c = Array(); var a = (1 << chrsz) - 1; for (var b = 0; b < d.length * chrsz; b += chrsz) { c[b >> 5] |= (d.charCodeAt(b / chrsz) & a) << (b % 32) } return c } function binl2str(c) { var d = ""; var a = (1 << chrsz) - 1; for (var b = 0; b < c.length * 32; b += chrsz) { d += String.fromCharCode((c[b >> 5] >>> (b % 32)) & a) } return d } function binl2hex(c) { var b = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; var d = ""; for (var a = 0; a < c.length * 4; a++) { d += b.charAt((c[a >> 2] >> ((a % 4) * 8 + 4)) & 15) + b.charAt((c[a >> 2] >> ((a % 4) * 8)) & 15) } return d } function binl2b64(d) { var c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var f = ""; for (var b = 0; b < d.length * 4; b += 3) { var e = (((d[b >> 2] >> 8 * (b % 4)) & 255) << 16) | (((d[b + 1 >> 2] >> 8 * ((b + 1) % 4)) & 255) << 8) | ((d[b + 2 >> 2] >> 8 * ((b + 2) % 4)) & 255); for (var a = 0; a < 4; a++) { if (b * 8 + a * 6 > d.length * 32) { f += b64pad } else { f += c.charAt((e >> 6 * (3 - a)) & 63) } } } return f }; window.f = hex_md5(mwqqppz)然后这是今天我发现的一个MD5加密代码define("sc-list/m/compare-full-layout/src/js/md5.js", [], function(require, e, t) { t.exports = function() { var e = 0; var t = ""; var i = 8; function a(e) { return w(u(y(e), e.length * i)) } function s(e) { return x(u(y(e), e.length * i)) } function n(e) { return _(u(y(e), e.length * i)) } function r(e, t) { return w(g(e, t)) } function o(e, t) { return x(g(e, t)) } function l(e, t) { return _(g(e, t)) } function c() { return a("abc") == "900150983cd24fb0d6963f7d28e17f72" } function u(e, t) { e[t >> 5] |= 128 << t % 32; e[(t + 64 >>> 9 << 4) + 14] = t; var i = 1732584193; var a = -271733879; var s = -1732584194; var n = 271733878; for (var r = 0; r < e.length; r += 16) { var o = i; var l = a; var c = s; var u = n; i = h(i, a, s, n, e[r + 0], 7, -680876936); n = h(n, i, a, s, e[r + 1], 12, -389564586); s = h(s, n, i, a, e[r + 2], 17, 606105819); a = h(a, s, n, i, e[r + 3], 22, -1044525330); i = h(i, a, s, n, e[r + 4], 7, -176418897); n = h(n, i, a, s, e[r + 5], 12, 1200080426); s = h(s, n, i, a, e[r + 6], 17, -1473231341); a = h(a, s, n, i, e[r + 7], 22, -45705983); i = h(i, a, s, n, e[r + 8], 7, 1770035416); n = h(n, i, a, s, e[r + 9], 12, -1958414417); s = h(s, n, i, a, e[r + 10], 17, -42063); a = h(a, s, n, i, e[r + 11], 22, -1990404162); i = h(i, a, s, n, e[r + 12], 7, 1804603682); n = h(n, i, a, s, e[r + 13], 12, -40341101); s = h(s, n, i, a, e[r + 14], 17, -1502002290); a = h(a, s, n, i, e[r + 15], 22, 1236535329); i = p(i, a, s, n, e[r + 1], 5, -165796510); n = p(n, i, a, s, e[r + 6], 9, -1069501632); s = p(s, n, i, a, e[r + 11], 14, 643717713); a = p(a, s, n, i, e[r + 0], 20, -373897302); i = p(i, a, s, n, e[r + 5], 5, -701558691); n = p(n, i, a, s, e[r + 10], 9, 38016083); s = p(s, n, i, a, e[r + 15], 14, -660478335); a = p(a, s, n, i, e[r + 4], 20, -405537848); i = p(i, a, s, n, e[r + 9], 5, 568446438); n = p(n, i, a, s, e[r + 14], 9, -1019803690); s = p(s, n, i, a, e[r + 3], 14, -187363961); a = p(a, s, n, i, e[r + 8], 20, 1163531501); i = p(i, a, s, n, e[r + 13], 5, -1444681467); n = p(n, i, a, s, e[r + 2], 9, -51403784); s = p(s, n, i, a, e[r + 7], 14, 1735328473); a = p(a, s, n, i, e[r + 12], 20, -1926607734); i = f(i, a, s, n, e[r + 5], 4, -378558); n = f(n, i, a, s, e[r + 8], 11, -2022574463); s = f(s, n, i, a, e[r + 11], 16, 1839030562); a = f(a, s, n, i, e[r + 14], 23, -35309556); i = f(i, a, s, n, e[r + 1], 4, -1530992060); n = f(n, i, a, s, e[r + 4], 11, 1272893353); s = f(s, n, i, a, e[r + 7], 16, -155497632); a = f(a, s, n, i, e[r + 10], 23, -1094730640); i = f(i, a, s, n, e[r + 13], 4, 681279174); n = f(n, i, a, s, e[r + 0], 11, -358537222); s = f(s, n, i, a, e[r + 3], 16, -722521979); a = f(a, s, n, i, e[r + 6], 23, 76029189); i = f(i, a, s, n, e[r + 9], 4, -640364487); n = f(n, i, a, s, e[r + 12], 11, -421815835); s = f(s, n, i, a, e[r + 15], 16, 530742520); a = f(a, s, n, i, e[r + 2], 23, -995338651); i = m(i, a, s, n, e[r + 0], 6, -198630844); n = m(n, i, a, s, e[r + 7], 10, 1126891415); s = m(s, n, i, a, e[r + 14], 15, -1416354905); a = m(a, s, n, i, e[r + 5], 21, -57434055); i = m(i, a, s, n, e[r + 12], 6, 1700485571); n = m(n, i, a, s, e[r + 3], 10, -1894986606); s = m(s, n, i, a, e[r + 10], 15, -1051523); a = m(a, s, n, i, e[r + 1], 21, -2054922799); i = m(i, a, s, n, e[r + 8], 6, 1873313359); n = m(n, i, a, s, e[r + 15], 10, -30611744); s = m(s, n, i, a, e[r + 6], 15, -1560198380); a = m(a, s, n, i, e[r + 13], 21, 1309151649); i = m(i, a, s, n, e[r + 4], 6, -145523070); n = m(n, i, a, s, e[r + 11], 10, -1120210379); s = m(s, n, i, a, e[r + 2], 15, 718787259); a = m(a, s, n, i, e[r + 9], 21, -343485551); i = v(i, o); a = v(a, l); s = v(s, c); n = v(n, u) } return Array(i, a, s, n) } function d(e, t, i, a, s, n) { return v(b(v(v(t, e), v(a, n)), s), i) } function h(e, t, i, a, s, n, r) { return d(t & i | ~t & a, e, t, s, n, r) } function p(e, t, i, a, s, n, r) { return d(t & a | i & ~a, e, t, s, n, r) } function f(e, t, i, a, s, n, r) { return d(t ^ i ^ a, e, t, s, n, r) } function m(e, t, i, a, s, n, r) { return d(i ^ (t | ~a), e, t, s, n, r) } function g(e, t) { var a = y(e); if (a.length > 16) a = u(a, e.length * i); var s = Array(16) , n = Array(16); for (var r = 0; r < 16; r++) { s[r] = a[r] ^ 909522486; n[r] = a[r] ^ 1549556828 } var o = u(s.concat(y(t)), 512 + t.length * i); return u(n.concat(o), 512 + 128) } function v(e, t) { var i = (e & 65535) + (t & 65535); var a = (e >> 16) + (t >> 16) + (i >> 16); return a << 16 | i & 65535 } function b(e, t) { return e << t | e >>> 32 - t } function y(e) { var t = Array(); var a = (1 << i) - 1; for (var s = 0; s < e.length * i; s += i) t[s >> 5] |= (e.charCodeAt(s / i) & a) << s % 32; return t } function _(e) { var t = ""; var a = (1 << i) - 1; for (var s = 0; s < e.length * 32; s += i) t += String.fromCharCode(e[s >> 5] >>> s % 32 & a); return t } function w(t) { var i = e ? "0123456789ABCDEF" : "0123456789abcdef"; var a = ""; for (var s = 0; s < t.length * 4; s++) { a += i.charAt(t[s >> 2] >> s % 4 * 8 + 4 & 15) + i.charAt(t[s >> 2] >> s % 4 * 8 & 15) } return a } function x(e) { var i = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var a = ""; for (var s = 0; s < e.length * 4; s += 3) { var n = (e[s >> 2] >> 8 * (s % 4) & 255) << 16 | (e[s + 1 >> 2] >> 8 * ((s + 1) % 4) & 255) << 8 | e[s + 2 >> 2] >> 8 * ((s + 2) % 4) & 255; for (var r = 0; r < 4; r++) { if (s * 8 + r * 6 > e.length * 32) a += t; else a += i.charAt(n >> 6 * (3 - r) & 63) } } return a } return a }() });且不看第一行,毕竟第一行直接表示他引用了MD5加密了。。。一对比发现,里面除了变量名改了一下,不能说很像,只能说一模一样。比如都有一个验证md5的function md5_vm_test() { return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72" }abc都一样。。。感觉大概看一下,基本上以后看到MD5都能发现了
2021年09月04日
675 阅读
0 评论
0 点赞
2021-09-03
JS逆向之跳过无限Debugger,搞定反调试之无限debugger
咳咳,今天上班的时候,有位大佬在钉钉群里发了一个链接,随后就撤回了,但还是被我看见了,便点进去看了一下然后回到首页,一看。哦吼,这不就激起我的好奇心了嘛。然后点进第一题。。。就开始了我的摸鱼之旅,搞了一上午总算把第一题弄出来了,只能说我还是太菜了。然后其中有一个无限Debugger,我最一开始是关掉了调试。然后找到了接口,看了一个参数m,不调试不行呀,然后我想到用Burpsuite在页面加载之前就把这两行引用代码干掉。发现不太行,页面一刷新他就又回来了,然后我想到反正只要不加载就行了,好像浏览器里面自带一个block request url右键这个js请求,然后block request url就可以了。搞定,但是好像此方法仅限于js中没有重要代码的。
2021年09月03日
663 阅读
0 评论
0 点赞
1
...
24
25
26
...
88