JS逆向:猿人学爬虫比赛第十二题详细题解
技术博客

JS逆向:猿人学爬虫比赛第十二题详细题解

12009 57

实战地址 http://match.yuanrenxue.com/match/12 抓包分析 地址栏输入 地址,按下F12并回车,发现数据在这里: 仔细分析,无cookie,只有一个 加密的m参数,控制台atob解码一下: 暂时还无法发现规律,继续请求第二页,并将加密参数解码: 这下规律清楚了,很快,就写出了源代码: import base6...

JS逆向:猿人学爬虫比赛第十三题详细题解
技术博客

JS逆向:猿人学爬虫比赛第十三题详细题解

12558 26

实战地址 http://match.yuanrenxue.com/match/13 抓包分析 地址栏输入 地址,按下F12并回车,发现数据在这里: 如上分析,这是一个典型的cookie反爬,康康cookie相关的字段是啥: 第一次请求时,返回了一个sessionid的cookie: 第二次请求的cookie是这样的: 由于谷歌浏览器第一次请求...

二、设计模式的基本原则
技术博客

二、设计模式的基本原则

13840 36

设计模式的基本原则 1、单一职责原则 定义:就一个类而言,应该只有一个引起该类变化的原因。 一个类只有一个职责,如果职责过多,代码就会臃肿,可读性更差,也更难以维护,主要体现面向对象的高内聚低耦合。 2、开闭原则(Open Close Principle) 定义:软件实体(类、模块、函数)应该可以扩展,但是不可修改。 开闭原则的意思是:对扩展开放,对修改关...

JS逆向:Webpack打包后的代码怎么搞?猿人学爬虫比赛第十六题详细题解
技术博客

JS逆向:Webpack打包后的代码怎么搞?猿人学爬虫比赛第十六题详细题解

14594 22

实战地址 http://match.yuanrenxue.com/match/16 抓包分析 地址栏输入 地址,按下F12并回车,发现数据在这里: 查看cookie,无加密相关的字段。请求的接口倒是有个m的加密参数,看来这题的主要目的就是 看看m参数怎么进行加密的吧。 切换 Initiator,这请求也太明显了,点击下面所示的js文件: 跟进去并美...

JS逆向:Wasm文件导出函数的调用|猿人学爬虫对抗赛第十五题
技术博客

JS逆向:Wasm文件导出函数的调用|猿人学爬虫对抗赛第十五题

18769 29

实战地址 http://match.yuanrenxue.com/match/15 抓包分析 地址栏输入 地址,按下F12并回车,发现数据在这里: cookie无加密,有个params参数m,切换 Initiator,查看调用栈: 跟踪进去,直接就跟踪到了数据加密及发送的地方: 关键加密函数 window.q,控制台输入,发现无法跟进,看到上面...

JS逆向:猿人学爬虫比赛第十四题详细题解(上)
技术博客

JS逆向:猿人学爬虫比赛第十四题详细题解(上)

13839 52

实战地址 http://match.yuanrenxue.com/match/14 抓包分析 地址栏输入 地址,按下F12并回车,发现数据在这里: 没有加密参数,看看cookie字段: 有三个加密的字段,看上一个接口: http://match.yuanrenxue.com/api/match/14/m cookie请求是这样的: 带着 ...

二十三、命令模式
技术博客

二十三、命令模式

14593 41

命令模式 命令模式是一个比较难理解的模式,我看了好久、查阅了很多博客,根据我自己的理解记录如下: 命令模式:将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化 举例子:一个餐厅有广东厨师负责烧广东菜、四川厨师负责烧四川菜,一个服务员负责点菜、传菜; 那么他的整个运行流程是这样的,服务员记录客人点的菜----》通知后厨师傅开始做菜–》后厨师傅开始做自己负...

JS逆向|高频问题:为何Reres插件总是替换本地文件失败?
技术博客

JS逆向|高频问题:为何Reres插件总是替换本地文件失败?

15441 6

最近总被问到,使用Reres插件,总是替换失败,不知道原因在哪里,我已经回答过很多遍了,照着github 上面的教程来就不会错,不可能替换不成功。github地址如下: https://github.com/annnhan/ReRes 先将常规的检测项说一下吧。 一. 检查 允许访问文件网址 的选项是否打开: 二. 匹配的本地文件路径是否填写正确,最好...

Android高级UI开发(三十七)android Draw的绘制分发
技术博客

Android高级UI开发(三十七)android Draw的绘制分发

13164 37

android draw的绘制流程与measure测量流程类似,我们先来回顾一下measure的调用流程图,如下所示 今天我们要讲的是draw的绘制流程,所以直接从PerformDraw来开始分析(顺便纠正一下上图中的英文单词perfrom,应该是form). 这里就不贴ViewRootImpl.PerformDraw函数的源码了,通过看源码,它内部的调用...

AST反混淆实战:4行代码解决obfuscator解密函数反复赋值问题
技术博客

AST反混淆实战:4行代码解决obfuscator解密函数反复赋值问题

13839 49

前天打了个 安卓逆向 + JavaScript 逆向组合课 的广告,今天写在原创的东西,以飨读者。 更新了 obfuscator 混淆工具更新了,地址 https://obfuscator.io/ 之前的解混淆脚本都失效了,因为解密的字符串函数反复的赋值给其他的变量,所以遍历 CallExpression 表达式时,判断条件就失效了。举个简单的例子,打开 上...

JavaScript反混淆插件六:删除空行和空语句
技术博客

JavaScript反混淆插件六:删除空行和空语句

16402 24

在 反混淆插件五 这篇文章中,介绍了 options 的一些功能,忘记介绍如何删除空行了。也很简单,注意 retainLines 这个即可,代码如下: const output = generator(ast,opts = {"retainLines":true},code); 也可以利用 UltreEdit 这个工具的 正则替换来删除空行。即将 ^p^p 替换为...

AST反混淆实战:obfuscator解混淆四步走
技术博客

AST反混淆实战:obfuscator解混淆四步走

17500 18

第一步 处理CallExpression 下图是某个被obfuscator工具混淆了的代码部分截图: 这里有很多的 CallExpression,诸如: _0x552e53('3$kU', 0x1ab, 0x153, 0x261)_0x3be775('vrJS', 0x2cb, 0x307, 0x228)_0x3be775('mbUX', 0x432, 0x3...

工厂模式(21)
技术博客

工厂模式(21)

18767 34

工厂模式 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使类的实例化延迟到子类。 定义一个用于创建对象的接口:在虚工厂基类提供一个接口,用于创建产品接口; 让子类决定实例化哪一个类:产品虚基类提供一个创建产品的接口,具体实例化要子类实现。 #include<iostream> #include <assert.h> using namespace...

Pyqt5:Buttons基础介绍(一)
技术博客

Pyqt5:Buttons基础介绍(一)

20246 14

Buttons按键也是在Qt中常用的一种控件,Buttons常用的三种按键,pushbutton,checkbox,radiobutton。 UI界面: 其中有三个textBrowser用来显示打印信息,测试信号槽。 pushbutton: 连接信号与槽 connect代码: self.pushButton.clicked.connect(self.Pr...

Python:Pyqt5+VS2017 TabError
技术博客

Python:Pyqt5+VS2017 TabError

12557 63

昨天配置好Vs2017+python3.6,今天开始写代码,Tab换行时始终有错。错误提示如下: TabError: inconsistent use of tabs and spaces in indentation1 代码段如下图: 但是在Notpad++写代码时Tab键切换没有问题。猜想,可能是语法文本模版的问题,但是想起应该会自动切换,尝试无果。然后想...

每天一个IDA小技巧(二):基本代码转换
技术博客

每天一个IDA小技巧(二):基本代码转换

13838 21

重命名和注释 变量重命名 快捷键(y),若想恢复则更名为空白名称即可方法/寄存器重命名 快捷键(N)注释:常规注释(:)/可重复注释(;),「;」表示该行为注释 如果你所分析的文件类型与常见编译器生成的普通二进制可执行文件相差甚大,你可能需要对反汇编分析和显示过程进行更多的控制。在分析采用自定义文件格式(IDA无法识别)的模糊代码或文件时,情况更是如此。 此时便需...

每天一个IDA小技巧(一): 序言
技术博客

每天一个IDA小技巧(一): 序言

15440 24

前言 Native逆向大概是每个逆向人都敬畏又心存挑战的存在,但是又不知道从何下手,得益于汇编的繁琐,简单的高级语言在反编译成汇编指令之后分析起来复杂膨胀了无数倍,再加上对IDA Pro的一无所知,反编译阅读就是安卓ARM逆向的第一道难题,因此决定一步一步从《IDA Pro权威指南》开始积累知识点和学习经验,相信很多朋友也有一样的想法,但又苦于完整的阅读一本书,而且基...

每天一个IDA小技巧(四):结构体识别
技术博客

每天一个IDA小技巧(四):结构体识别

16401 42

之前提到IDA可以将一长串的数组数据声明变成一行数组声明,简化反汇编代码,对于结构体,IDA也同样支持通过各种设置工具来改善结构体代码的可读性。 这篇文章的目标是将[edx+10h]之类的结构体元素访问 变成 [edx+struct_filed5]之类。 只要发现一个程序正操纵某种数据结构,你就需要确定:你是否希望将结构体的字段名称合并到反汇编代码清单中,或者你是否...

每天一个IDA小技巧(五):C++基本特性
技术博客

每天一个IDA小技巧(五):C++基本特性

18767 19

C++类是C结构体面向对象的扩展,因此,在结束数据结构的讨论时,我们有必要介绍一下已编译的C++代码的各种特性。牢固掌握C++语言的基础知识,对于你理解已编译C++代码将大有裨益。在源代码层次上完全掌握继承和多态等面向对象的概念会非常困难。尝试在汇编语言层次上深入这些概念,但却不了解它们在源代码层次上的意义,毫无疑问,你会陷入困境。 this指针 this可以看成是...

每天一个IDA小技巧(三):全局、栈和堆分配的数组和结构体
技术博客

每天一个IDA小技巧(三):全局、栈和堆分配的数组和结构体

12007 48

正常程序中会包含许多的复杂数据结构,就内存布局而言,数组可以算是最简单的复合数据结构来。传统意义上的数组指包含同一数据类型的连续元素的连续内存块。用数组中元素的数量乘以每个元素的大小,即可直接计算出数组的大小。 访问数组元素的方式可以是整数常量偏移,也可能是索引*数组元素大小的动态计算的方式。 全局分配的数组 如果一个数组在程序的全局数据区内分配(例如,在.dat...

Pyqt5:信号与槽(一)
技术博客

Pyqt5:信号与槽(一)

12556 64

信号与槽是Qt特有的机制。 pyqt5的信号与槽官方地址:信号与槽 UI界面如下: 思路: 按下对应按键显示对应信号文字。 主要说自定义信号,qt控件自带信号就不说了。 信号定义需要调用库: QObejcet,pyqtSignal from PyQt5.QtCore import QObject, pyqtSignal12 类内部信号与槽: Cla...

Android高级UI开发(四十二)canva滤镜
技术博客

Android高级UI开发(四十二)canva滤镜

20244 49

一、矩阵简述 1、定义   M*n矩阵。 2、矩阵乘法   它的意思就是将第一个矩阵A的第一行,与第二个矩阵B的第一列的数字分别相乘,得到的结果相加,最终的值做为结果矩阵的第(1,1)位置的值(即第一行,第一列)。 同样,A矩阵的第一行与B矩阵的第二列的数字分别相乘然后相加,结果做为结果矩阵第(1,2)位置的值(即第一行第二列)。  矩阵A乘以矩阵B和矩...

PyQt5:PyChart绘制饼图
技术博客

PyQt5:PyChart绘制饼图

13837 31

PyQt5: QChart 绘制饼图 1.开发环境说明: 系统环境 :Win10 IDE:VS2017+PyQt5.12+Python3.7 12 2.相关调用库: from ui import Ui_Form from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtCore im...

Windows设备信息获取:(摄像头,声卡为例)Qt,WindowsAPI对比说明(2)
技术博客

Windows设备信息获取:(摄像头,声卡为例)Qt,WindowsAPI对比说明(2)

14589 30

Windows设备信息获取:(摄像头,声卡为例)Qt,WindowsAPI对比说明 补充说明问题QT摄像头相关信息获取(分辨率,图像格式)WindowsAPI,win10,win7不兼容问题兼容代码解决方案其他相关 补充说明 在上一篇文档中,文档末尾提到了,win10,win7兼容问题,QCamera未发现的问题,这里都做一下说明。 问题 QCa...

送书【新书】 |《python数据科学实战》
技术博客

送书【新书】 |《python数据科学实战》

12554 37

又到了每周三的送书时刻啦!本周我们送出的是《python数据科学实战》 (文末查看送书规则) 编辑推荐 狗熊会(数据产业高端智库)官方出品:源于实践、终于实战的Python数据分析与大数据处理精进指南! 内容简介  《Python数据科学实践》是由狗熊会推出的一本利用Python介绍数据科学基本过程的著作。本书以Python语言为基础,介绍利用Python...

Docker 入门终极指南:边学边用
技术博客

Docker 入门终极指南:边学边用

13835 43

富 Web 时代,应用变得越来越强大,与此同时也越来越复杂。集群部署、隔离环境、灰度发布以及动态扩容缺一不可,而容器化则成为中间的必要桥梁。 本文我们就来探索一下 Docker 的神秘世界,从零到一掌握 Docker 的基本原理与实践操作。别再守着前端那一亩三分地,是时候该开疆扩土了。 讲个故事 为了更好的理解 Docker 是什么,我们先来讲个故事: 我需...

Python小技巧|如何获取MP4格式的视频时长
技术博客

Python小技巧|如何获取MP4格式的视频时长

14589 50

如题,如何获取一个MP4文件格式的视频时长?嗯,对MP4格式的文件进行解析,如果有表示时长的字段,直接读取即可。而我对该格式又不熟悉该怎么办?当然是使用搜索引擎了。 果不其然,看到了这个字段: 看着解释就是 时长 =  duration / time scale,只需要知道这两个字段在文件中的位置即可,而且这两个是连续的字段。 通过阅读理解文章,位置即是 ...

PyQt5:QMediaplayer,QVideowidget播放视频(2)
技术博客

PyQt5:QMediaplayer,QVideowidget播放视频(2)

14588 14

PyQt5:QMediaplayer-Layout布局,快慢进 1.前言 之前的一篇中说到,实现了播放,列表,进度条,PyQt5:QMediaplayer,QVideowidget播放视频,这次更新了窗口自适应,快进,慢进。 2.布局 采用栅格布局、Qgridlayout,在UI文件上,布局设置为 栅格布局。 代码部分: # VideoWidget 从0...