自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(122)
  • 收藏
  • 关注

原创 为Python编写C++扩展,用setuptools打包自己的分发包,并上传到PyPI

最近手痒想写Python和C++代码,于是有了这篇~~精华~~水blog。这次打算用C++写些数据结构,打包后给Python调用。环境 Windows10 VSCode Python 3.7.6 pytest 7.4.4 setuptools 68.0.0 `g++.exe 13.1.0`。setuptools官方文档建议舍弃`setup.py`(setup脚本)的写法,转而使用一个叫build的命令行工具。但该工具只支持到Python3.8,所以本文依旧使用`setup.py`。

2024-05-13 17:44:20 935 2

原创 择偶只选丑的竟能匹配更优质配偶?让这个Python项目告诉你真相!

TLDR:只考虑选颜值低的为配偶的策略确实能提升除颜值外的整体分数,但也会显著增加择偶时间。在一个充实的夜晚,我刷到了[这个视频](https://www.bilibili.com/video/BV1pp421R7Ro)。视频大致的内容是,如果你不在意配偶的颜值,那么择偶时不妨只选丑的,这样你匹配到的配偶在其他你在意的方面会更优秀。这个说法直觉上就很对,但怎么稍微严谨点地证明呢?一开始我想建一个数学模型,但我数学太差了,建不出来,于是就有了这个Python项目和这篇精华文章。

2024-05-08 14:49:31 601

原创 C++操作xlsx初体验:OpenXLSX(建议使用)、libxl

引言 C++操作xlsx着实麻烦,所以为此精心创作~~水~~一篇文章也是很OK的吧。本文打算体验的库:- [libxl](https://www.libxl.com/)。要氪金,否则使用的功能会受限。这里我就不氪了。- [OpenXLSX](https://github.com/troldal/OpenXLSX)。体验结果:建议使用`OpenXLSX`。环境:VSCode+CMake插件+CMake Tools插件。本项目是用CMake Tools插件创建的,过程不赘述。

2024-04-25 23:34:33 1313

原创 【前端甜点】某视频网站的m4s视频/音频下载方案(20240420)

从20年到上个月为止,it just works well。但20240420开始,不知道是Chrome浏览器升级还是什么原因,二进制数据包装的Blob对象转化为a标签后域名变成了,无法方便地下载m4s了,于是这个脚本不能用了。这个原因我一直都没找到。好在我很快又摸索出了一个稍微麻烦点的路子:先在浏览器控制台运行JS代码,获取base64字符串,然后在本地用python把它转为mp3。在上述古老的脚本里,我将XHR返回的类型指定为Blob了,因此我需要将其转为base64字符串。最后我找到的API是。

2024-04-20 23:46:39 680 1

原创 【算法】苹果一道“24点”类型的面试题详细解析,小班同学也直呼通俗易懂

24点的dfs比较好理解,但如果没有专门学习过很难自己想出来。首先我们要了解表达式树。以下面这棵表达式树为例:它表示表达式1 * (2 + 3)。表达式树的叶子节点为数字,非叶子节点为二元运算符。我们dfs遍历这棵树,走到非叶子节点,需要先获取左右子树的运算结果,再根据该点的符号获取当前子树的运算结果。表达式树也可以很轻松地表示一元运算符。比如:表示表达式1 * (2 + 3!)。实际上,表达式树是抽象语法树(Abstract Syntax Tree,AST)的特殊情况,如果你有前端基础,可以进astexp

2023-12-13 02:29:46 134

原创 Java MIDI 音乐编程入门 + 基础乐理知识 for programmers

基础乐理知识简谱阅读入门下面以《上学歌》为例讲解简谱的阅读方式和相关的乐理知识。上学歌简谱上图只有高音部分,因此还需要参考链接1补充低音部分。左上角的分数是拍号(节拍符号),分母表示多少个音节为一拍,分子表示一小节多少拍。左上角的🎶 = 112表示一分钟112拍,对应代码里的bpm(beats per minute)。据此可以计算出每个音符的演奏时间,不过实际演奏中并不需要这么做。左上角的1 = C表示这首歌的调式为C自然大调。调式确定了歌曲的音域范围。在钢琴键盘中,音名C3被称为

2023-12-13 02:22:04 266

原创 挑战全网最简洁快速平方根倒数算法讲解

功能等同于函数`(x) => 1 / Math.sqrt(x)`。前置知识牛顿迭代:本文用到的公式:`y = 1 / sqrt(x) -> 1 / y^2 - x = 0`代入得结果。[IEEE-754浮点数表示](https://en.wikipedia.org/wiki/IEEE_754):一句话总结:正数的符号位肯定为0,`x = (1 + M / 2^23) * 2^(E - 127)`。## 推导过程上述代码只有这几行 是不那么显然的。

2023-11-02 15:14:36 302

原创 【Java】Spring框架是如何解决Bean创建过程中的循环依赖问题的

本文主要梳理了Spring框架Bean创建过程中应对循环依赖问题的相关源码。我在[手写super-mini-webpack](https://www.52pojie.cn/thread-1682010-1-1.html)的时候也介绍过解决循环依赖的算法:Map+记忆化搜索。可以猜测这段源码也实现了这个算法,所以在看这段源码的时候,我们可以先找到**递归点**,再去分析调用栈涉及的那些函数,顺便找出其用到的Map数据结构。另外,在不了解Spring框架的情况下可以用一个动态调试技巧快速找到递归点。

2023-07-29 16:09:32 607

原创 沉淀自己的pro-table组件,并发布到npm(Vue3、element-plus)

传送门 约定:npm包名vue3-el-pro-table,引用vue3-el-pro-table的包名为“本项目”。声明:Vue3ProTable.vue代码是在这个项目的基础上进行修改的。Quick Startyarn add vue3-el-pro-tablesrc/main.tsThen use directly in .vue file.Import interface:import { Vue3ProTableProps } from 'vue

2023-07-18 01:37:56 1755

原创 【入门dp】力扣鸡蛋掉落问题和转账问题的关系初探

我昨晚偶然编出了一道水题,名为转账问题:已知银行卡里有不超过`n`元,你想把卡里所有钱提到某信支付,但你无法看到卡里的钱,你只能执行若干次转账`i`元的操作,每次看到转账成功与失败的提示。问至少需要操作多少次。`n`和`i`是自然数。形式化描述:你的策略`y`是一段代码,初始输入为`n`,代码对于实际的`i = 1~n`元各有一个需要的猜测次数`x[i]`,则`y = max(x[i] for i in range(1, n + 1))`,所求为`min(y for y in y_set)`。

2023-07-16 12:52:47 272

原创 UI schema入门demo:应对业务需求变化的强力武器

我们考虑以下场景:在一个需求中,对于两种不同角色的用户,需要展示的UI骨架大同小异(比如:只有具体的字段不同),但逻辑有所不同。对于两个开发时间线大致相同的不同需求,需要展示的UI骨架大同小异,但逻辑有所不同。希望跨需求完成UI复用。项目希望从Vue迁移到React,UI从用户视角来看不能发生变化,但想必描述UI的代码会有很多差异。对于前2个问题,你会怎么实现呢?放弃复用,直接复制粘贴UI代码到两个不同文件,逻辑单独修改。坚持复用,让UI充满if else。

2023-07-15 19:54:56 630

原创 【reverse】手把手带你基于dll实现多次SMC

引言 SMC,即self modifying code,自修改代码,逆向入门SMC可以看一下我的题解。我打算实现一个类似于【网鼎杯2020青龙组】jocker的SMC方案。这个方案不需要用到汇编,因此门槛极低。为什么要基于dll呢?因为代码段加密功能是通过外部python脚本完成的,将自修改代码拆分为独立dll实现上更方便。仓库:https://github.com/Hans774882968/self-modify-code-hello

2023-05-03 01:31:30 1247 1

原创 SCUACM2023集训前训练-数据结构

交换操作是“等价关系”的经典模型,就连LC都考过,回去看了一下才发现是同一道题……《离散数学》中等价关系的定义:交换操作满足传递性的证明,就是找到`1 2 3 -> 3 2 1`的一种方式,如下:`1 2 3 -> 1 3 2 -> 3 1 2 -> 3 2 1`。故“可交换”是等价关系。把等价关系看成无向边,则可以得到一系列连通分量,每个连通分量的元素两两可交换,即每个连通分量内部的元素可以**任意排序**。最后只需要求每个连通分量下标值和`p[]`值的交集。

2023-04-23 00:19:29 454

原创 SCUACM2023集训前训练-基础算法

## B-单调栈+贪心,好题这题我不会……看的题解:https://blog.csdn.net/weixin_33863087/article/details/85941548。现有题解一个比一个抽象,因此我写了一篇极为通俗易懂的题解~### 单调栈首先考虑区间`[l, r]`是“障碍段”的充要条件:`f[r] = r && r-a[r] == l-a[l]`。这里`f[r]`表示`a[r]`为最大值的最左侧端点,`g[l]`表示`a[l]`为最小值的最右侧端点。这两

2023-04-20 01:22:49 446

原创 【简单算法】2022SCUACM集训队冬季选拔全题解

没想到现在冬季选拔都这么难了……题目传送门本文juejin:https://juejin.cn/post/7222531019319722039/作者:hans774882968以及hans774882968以及hans774882968参考:https://www.cnblogs.com/ycx-akioi/p/AtCoder-abc165.html最长严格上升子序列树上版本。经典问题有两种做法:树状数组、维护数组+二分查找。但把问题搬到树上后,我们遇到一个问题:在回溯的时候,需要对数据结构进行撤销操作。

2023-04-16 17:11:26 750

原创 某道翻译请求关键参数和返回数据解密过程分析-20230405

今天本英语渣用了下谋道翻译,惊讶地发现谋道返回的接口数据是加密的。想着我已经很久没碰逆向了,那就来研究一下吧,~~顺便水篇入门文~~。PS:整个过程没有用到动态调试。主要知识点:webpack、vuex。

2023-04-05 20:48:03 680

原创 【算法】神奇宝贝打BOSS简化模型初步研究:概率dp和期望dp

## 引言 今天心血来潮,想起了一道之前没有解决的算法题,~~但我已经近一年没碰过算法了~~。 ## 基础问题 BOSS有`x`滴血,我一局打BOSS掉`y`滴血,BOSS有`p`的概率回`z`滴血,有`1-p`的概率攻击我。我平均需要几局能打败BOSS?假设:(1)我血量无限。(2)血量不能超过血量上限。(3)我先手,且打赢BOSS那局应该算1局而非0.5局。(3)`y

2023-03-30 02:14:53 451 1

原创 【Chrome插件开发】ReRes和request-interceptor源码赏析+复现+插件开发完整解决方案

[这个项目](https://github.com/Hans774882968/hans-reres)主要目的是用前端工程化技术栈复现`ReRes`和`request-interceptor`,希望将两者的功能结合起来。`request-interceptor`是前端开发调试常用工具,提供了多种修改请求的功能,但无法将请求映射到本地的文件。`ReRes`是JS逆向工程师常用工具,可以用来更改页面请求响应的内容。可以把请求映射到其他的url,也可以映射到本机的文件或者目录。

2023-03-13 01:23:16 2503

原创 【前端】手把手教你用TypeScript写一个简单的eslint插件并发布到npm

引言 看到参考链接1以后,觉得用TS写一个eslint插件应该很简单,尝试下来确实如此。 前置知识 本文假设 你对AST遍历有所了解。 你写过单测用例。

2023-02-05 15:42:11 1023

原创 koa洋葱模型源码简析+极简复现——简单的递归

koa里的中间件就是一个函数而已。执行,请求3001端口,输出是1~5。中间件是在请求处理的时候执行的,调用fnMiddleware就是调用了compose返回的function,也就调用了dispatch。但是中间件最终由dispatch函数调用,所以要搞清楚洋葱模型的实现,还是要看dispatch函数。

2023-02-02 03:01:02 328

原创 【数学分析】存在覆盖有理数但不能覆盖实数的区间之并——两道相关证明题

共同点:对有理数集进行划分,然后为每个子集分配合适的下标。

2023-01-02 01:52:40 523

原创 【reverse】通俗易懂的gcc内联汇编入门+示例:实现花指令

基于Visual Studio的内联汇编教程已然不少,且质量较好。但基于gcc/g++的内联汇编教程少得可怜,且即使是英文文档也……真是一把辛酸泪!但是看到本文的你们,就不必感受那些辛酸了,只需在5分钟后感叹一句:原来这么简单!因为我也是萌新,可能本文有诸多谬误,还请指出。依赖 Windows10:mingw64 Ubuntu20.04:g++8.4.0

2022-10-02 12:21:27 1981

原创 【reverse】虚假控制流入门:Ubuntu20.04安装ollvm4.0踩坑记+用IDApython去除BCF

虚假控制流(Bogus Control Flow,BCF),通过加入包含不透明谓词的条件跳转(也就是跳转与否在运行之前就已经确定的跳转,但IDA无法分析)和不可达的基本块,来干扰IDA的控制流分析和F5反汇编。 Ubuntu20.04安装ollvm+各种踩坑记录 那些永远不会执行到的代码块,就叫做不可达的基本块。这些跳转和不可达基本块并不会影响程序原有的逻辑,但会干扰我们的分析,这就是虚假控制流混淆达到的效果。尝试用IDApython去除bcf

2022-09-25 21:08:15 2076

原创 【misc】buu-面具下的flag——zip伪加密+用NTFS流隐藏文件

NTFS交换数据流(Alternate Data Streams,简称ADS)是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流,就是说除了主文件流之外还可以有许多非主文件流寄宿在主文件流中,而我们无法看到非主文件的数据流。因为没有任何提示(比如密码范围可枚举、有其他隐藏的数据),所以可以考虑这个zip是否是伪加密。,图片无特殊信息,因此我们首先尝试去找其中的隐藏文件。我们可以在Ubuntu下直接看到所有相关的文件,的入门实验,像我这么鶸的可以过一遍qwq。

2022-09-25 14:03:55 2567

原创 【前端逆向】社会主义核心价值观加密方法解析+python版复现

偶然发现了一种有趣的编码方法,这种方法的特点是:一个明文可能得到多个密文,但一个密文可以得到唯一的明文。我们要逆的网站:http://z.duoluosb.com/,该网站没有特意做反调试,可以说难度很小。都小于10,所以解码时,读到10和11,我们可以借鉴汇编的概念,认为这是一个”opcode”,有唯一的解码方式。因此我们可以在这里加上一个巧妙的随机化,即。这里catch块和finally块的内容都不是我们需要关注的。函数,于是一个明文可以得到多个密文,但一个密文对应唯一的明文。

2022-09-20 01:34:41 3643

原创 【reverse】buu-CrackRTF——提取PE中的resource、rtf的固定文件头

用pefile库获取资源文件。文件头、函数头拥有固定数据是常常涉及的常识png头固定:MagicImageViewer、函数头固定:SCUx401CTF2021-RE2-pixpix。

2022-09-19 00:45:50 371

原创 【reverse】buu-[WUSTCTF2020]level4——二叉树+IDA动态调试

分别表示二叉树的左右孩子,而我们期望得到的是前序遍历。因为字符有重复,所以直接通过数据结构课上学到的那个经典算法来确定二叉树应该是不可行的。结构体数组的信息后,只需要实现前序遍历二叉树了。我们需要做int数组转64位整数的操作,可以用python+libnum库来实现。这表明bss段有一个结构体数组,每个结构体占24个字节空间。的语句,自己手动翻译原有代码是很费劲的,也许是写脚本生成出来的,因此我认为我这种写法更好。和bss段有一个结构体数组的事实,不难得出。的操作是给二叉树节点指定左右孩子,也就是。

2022-09-13 00:46:13 742

原创 【reverse】buu-[Zer0pts2020]easy_strcmp——main函数的启动过程+IDA动态调试ELF

64位ELF。用IDA打开即可看到main函数:会这么简单嘛?我们应该关注a2[1]是否被修改了。因此看看start函数:查阅_libc_start_main的资料(参考链接1)可知init函数会在main函数之前被调用。有这些函数被调用了:看了看sub_6E0啥也没有,那重点肯定是sub_795了……即使不知道sub_795 hook了strcmp也没关系,我们断点断在main函数,然后“步进”strcmp函数也能找到关键代码。

2022-09-12 10:21:17 680 1

原创 【reverse IDA使用技巧】IDA动态调试Linux_ELF配置+例题:SCUCTF新生赛2021-DebugMe

如果是云服务器就不用走这一步了,但对于本地虚拟机来说这一步是必要的。首先我们需要一台虚拟机,理论上云服务器也没问题,但用本地的虚拟机更方便。大致跟着参考链接2走一遍就行,但本文会指出一些需要注意的地方。根据参考链接1的两个链接,选择你在用的wifi来设置即可。似乎IDA的调试器不能很方便地跳转到某个地址,这里考虑通过汇编来修改寄存器。的图标,并按F5反汇编,开启源码级调试。,这说明主机不能通过ip访问虚拟机,需要走下一步的流程。,即可进入期望的代码块。接下来需要知道虚拟机的Hostname。

2022-09-12 09:24:05 1949

原创 【reverse】新160个CrackMe之116-REM-KeyGenME#10——脱壳、去背景音乐、识别反调试

发现有些代码变成了数据,但因为没有标红的代码,不像是插入了花指令。的时候,发现这句指令执行时间比其他语句长,断定这是音乐播放的函数。x64dbg实测执行时间比其他语句时间长,但感受差别比较小,不容易注意到。这个exe需要手动脱壳、去背景音乐、有反调试,可惜算法较简单,勉强如参考链接1所说,“列入精品软件”。看了参考链接1,知道是upx壳,但upx命令脱壳失败。,但因为我们用的是先进的IDA7.7,不用管它直接F5!参考链接1找到音乐播放函数的方法是:单步执行,执行到。,有壳且暂时不知道是什么壳。

2022-09-04 02:06:48 314

原创 【reverse】新160个CrackMe之154-cpp_crackme1——MFC+纯算法逆向

把char赋值给int的隐式类型转换是“有符号扩展”。不要想当然地把__ROR4__简化为右移一位。python实现时不要怕麻烦。

2022-09-03 20:59:54 867

原创 【Vue+element_ui】生成Ubuntu自定义壁纸幻灯片的核心xml文本

生成好xml文本后,就在想,命令式地生成xml很麻烦,而vue生成html很方便,能不能用vue快速生成xml呢?本文juejin:https://juejin.cn/post/7129561844678656007/的项目后,我得到了肯定的回答。这大概是我做过的最有创意的休闲项目了。这里实现了一个“复制”按钮处于父元素右上角的功能:父元素相对定位,自己绝对定位。因为要循环的是两个兄弟xml,所以需要加一个。在vue中是有意义的,因此我们使用另一个名称。文本,左边是高亮代码,右边是一个。......

2022-08-09 01:48:54 519 1

原创 Ubuntu写python脚本实现自定义壁纸幻灯片:Vue法、字符串拼接法、minidom法

focal.xml的一张图片需要以下参数:static持续的时间、transition持续的时间(均以秒为单位)、当前图片和下一张图片。环境:Windows10、虚拟机Ubuntu20.04。

2022-08-07 18:48:17 334

原创 区间乘积的因子数之和——前缀和思想+定一移二

(sorry没找到原题链接~)有一个数组,长度≤1e5,。设区间的权值为区间元素乘积的因数个数,求所有区间的权值和,模。区间权值为,这两个量可以用前缀和表示,不妨设为。则所求为∑l=0r−1(s2[r]−s2[l]+1)∗(s3[r]−s3[l]+1)\sum_{l=0}^{r-1} (s2[r]-s2[l]+1)*(s3[r]-s3[l]+1)l=0∑r−1​(s2[r]−s2[l]+1)∗(s3[r]−s3[l]+1)我们枚举,则认为是固定的,而是变化的。拆开得r∗s2[r]∗s3[r]−s2

2022-06-27 01:56:52 511 1

原创 AtCoder abc256全题解(区间合并模板、矩阵快速幂优化dp、线段树……)

作者:hans774882968以及hans774882968水,略。模拟即可。C-枚举题意:有一个九宫格,每格填一个正整数,输入分别表示期望的每行和每列的数字的和。求方案数。只需要枚举4个格子就能确定所有的数了,计算量完全可行。我选择的是这4个格子。D-区间合并模板区间合并模板,参考:https://blog.nowcoder.net/n/834a656e47df44e58e830fdd87d3e253。E-图论建模,函数图的性质题意个人排队拿糖果。输入长为的两个数组,表示如果号人排在号人后

2022-06-22 02:57:34 633

原创 第45届ICPC沈阳站J:Descent of Dragons——可持久化线段树

本文CSDN本文juejin作者:hans774882968以及hans774882968一个长数组,初值为全0,有个操作:网上缺乏一篇通俗易懂的题解,所以我尽力去贡献一篇!设数组表示输入参数,数组元素大于等于的为1,小于的为0,由它建立一棵权值线段树,于是可以快速查询一个区间大于等于的数的个数。设表示参数对应的上述权值线段树,则需要管理个权值线段树。一个区间涉及的线段树节点log个,采用可持久化线段树即可。属性是指向左右孩子的指针。加1表示创建新节点。建树用函数创建新节点,依赖函数确定和节点左右孩子。

2022-06-18 02:26:16 530

原创 第45届ICPC沈阳站部分题解(D、F、G、H、I、J、K)

本文CSDN本文juejin作者:hans774882968以及hans774882968题意:直接看题干,易懂。去年比赛的时候觉得这是个规律题,发现可以用小的答案生成大的答案,写了2小时以上,200多行代码,却wa了。因此不想再尝试这种令人伤悲的做法。dfs做法:首先,统计区间内1的个数,很容易联想到前缀和。因为只要求和奇偶性不同,所以前缀和可以改成前缀异或,。设前缀异或数组有个0(则有个1),试求下标对个数表达式。只考虑枚举左或右端点很难得到式子,因此考虑一个点既可以当左也可以当右。对于,只能作....

2022-06-16 18:23:19 1973

原创 Codeforces Round #799(Div. 4,CF1692)全题解

第一次AK CF纪念,虽然只是个div4。以前也有div3差点AK的经历,现在div3难度上来了,这种机会永远不会再有了吧……为什么水题写得尤其慢?因为中途洗了个澡。作者:hans774882968以及hans774882968签到。设是集合大小。为偶数,则答案恰好为,否则需要多删一个元素,答案。C题意:8*8棋盘,给出bishop的攻击范围,找bishop的位置。水。当前点和对角线4个邻居都是的点就是。D题意:给出当前时刻(用表示,如)和,表示从当前时刻开始,每分钟看一次闹钟,注意该过程是永久的。

2022-06-15 14:48:31 650

原创 Educational Codeforces Round 107 (Rated for Div. 2,CF1511)A~E题解

CSDN传送门juejin传送门作者:hans774882968以及hans774882968题意:有三种类型的客人,他们依次到来,一种反对者,一种支持者,还有一种观望者,即根据当前情况,如果反对数 > 支持数,就投反对,反之投支持的人。现在你有两台服务器,你可以选择给当前来到的客人展示其中一台服务器,问你最多可以获得多少票支持。有两台服务器,所以把所有dislike都集中到一台服务器即可(提纯是吧🤬)。B题意:给三个数,让你找到两个数和,使得,,这三个数的位数分别是,,。最简单的方法是,令和都有个0.

2022-06-13 02:34:46 157

原创 【区间dp】lc730及其扩展问题题解

传送门lc730题解又💧一篇作者:hans774882968以及hans774882968原问题要求去重,增加了分析的难度。若去掉该要求,则可以直接基于容斥原理来得到转移方程。仍然采用定义:为中的回文子序列个数。仍然分和不相等来讨论。...

2022-06-12 17:07:05 69

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除