web&CTF
文章平均质量分 81
web及网络安全相关
hans774882968
这个作者很懒,什么都没留下…
展开
-
沉淀自己的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 · 1840 阅读 · 0 评论 -
UI schema入门demo:应对业务需求变化的强力武器
我们考虑以下场景:在一个需求中,对于两种不同角色的用户,需要展示的UI骨架大同小异(比如:只有具体的字段不同),但逻辑有所不同。对于两个开发时间线大致相同的不同需求,需要展示的UI骨架大同小异,但逻辑有所不同。希望跨需求完成UI复用。项目希望从Vue迁移到React,UI从用户视角来看不能发生变化,但想必描述UI的代码会有很多差异。对于前2个问题,你会怎么实现呢?放弃复用,直接复制粘贴UI代码到两个不同文件,逻辑单独修改。坚持复用,让UI充满if else。原创 2023-07-15 19:54:56 · 678 阅读 · 0 评论 -
【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 · 1275 阅读 · 1 评论 -
某道翻译请求关键参数和返回数据解密过程分析-20230405
今天本英语渣用了下谋道翻译,惊讶地发现谋道返回的接口数据是加密的。想着我已经很久没碰逆向了,那就来研究一下吧,~~顺便水篇入门文~~。PS:整个过程没有用到动态调试。主要知识点:webpack、vuex。原创 2023-04-05 20:48:03 · 707 阅读 · 0 评论 -
【Chrome插件开发】ReRes和request-interceptor源码赏析+复现+插件开发完整解决方案
[这个项目](https://github.com/Hans774882968/hans-reres)主要目的是用前端工程化技术栈复现`ReRes`和`request-interceptor`,希望将两者的功能结合起来。`request-interceptor`是前端开发调试常用工具,提供了多种修改请求的功能,但无法将请求映射到本地的文件。`ReRes`是JS逆向工程师常用工具,可以用来更改页面请求响应的内容。可以把请求映射到其他的url,也可以映射到本机的文件或者目录。原创 2023-03-13 01:23:16 · 2777 阅读 · 0 评论 -
【前端】手把手教你用TypeScript写一个简单的eslint插件并发布到npm
引言 看到参考链接1以后,觉得用TS写一个eslint插件应该很简单,尝试下来确实如此。 前置知识 本文假设 你对AST遍历有所了解。 你写过单测用例。原创 2023-02-05 15:42:11 · 1083 阅读 · 0 评论 -
koa洋葱模型源码简析+极简复现——简单的递归
koa里的中间件就是一个函数而已。执行,请求3001端口,输出是1~5。中间件是在请求处理的时候执行的,调用fnMiddleware就是调用了compose返回的function,也就调用了dispatch。但是中间件最终由dispatch函数调用,所以要搞清楚洋葱模型的实现,还是要看dispatch函数。原创 2023-02-02 03:01:02 · 334 阅读 · 0 评论 -
【reverse】通俗易懂的gcc内联汇编入门+示例:实现花指令
基于Visual Studio的内联汇编教程已然不少,且质量较好。但基于gcc/g++的内联汇编教程少得可怜,且即使是英文文档也……真是一把辛酸泪!但是看到本文的你们,就不必感受那些辛酸了,只需在5分钟后感叹一句:原来这么简单!因为我也是萌新,可能本文有诸多谬误,还请指出。依赖 Windows10:mingw64 Ubuntu20.04:g++8.4.0原创 2022-10-02 12:21:27 · 2079 阅读 · 0 评论 -
【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 · 2094 阅读 · 0 评论 -
【misc】buu-面具下的flag——zip伪加密+用NTFS流隐藏文件
NTFS交换数据流(Alternate Data Streams,简称ADS)是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流,就是说除了主文件流之外还可以有许多非主文件流寄宿在主文件流中,而我们无法看到非主文件的数据流。因为没有任何提示(比如密码范围可枚举、有其他隐藏的数据),所以可以考虑这个zip是否是伪加密。,图片无特殊信息,因此我们首先尝试去找其中的隐藏文件。我们可以在Ubuntu下直接看到所有相关的文件,的入门实验,像我这么鶸的可以过一遍qwq。原创 2022-09-25 14:03:55 · 2630 阅读 · 0 评论 -
【前端逆向】社会主义核心价值观加密方法解析+python版复现
偶然发现了一种有趣的编码方法,这种方法的特点是:一个明文可能得到多个密文,但一个密文可以得到唯一的明文。我们要逆的网站:http://z.duoluosb.com/,该网站没有特意做反调试,可以说难度很小。都小于10,所以解码时,读到10和11,我们可以借鉴汇编的概念,认为这是一个”opcode”,有唯一的解码方式。因此我们可以在这里加上一个巧妙的随机化,即。这里catch块和finally块的内容都不是我们需要关注的。函数,于是一个明文可以得到多个密文,但一个密文对应唯一的明文。原创 2022-09-20 01:34:41 · 4206 阅读 · 0 评论 -
【reverse】buu-CrackRTF——提取PE中的resource、rtf的固定文件头
用pefile库获取资源文件。文件头、函数头拥有固定数据是常常涉及的常识png头固定:MagicImageViewer、函数头固定:SCUx401CTF2021-RE2-pixpix。原创 2022-09-19 00:45:50 · 379 阅读 · 0 评论 -
【reverse】buu-[WUSTCTF2020]level4——二叉树+IDA动态调试
分别表示二叉树的左右孩子,而我们期望得到的是前序遍历。因为字符有重复,所以直接通过数据结构课上学到的那个经典算法来确定二叉树应该是不可行的。结构体数组的信息后,只需要实现前序遍历二叉树了。我们需要做int数组转64位整数的操作,可以用python+libnum库来实现。这表明bss段有一个结构体数组,每个结构体占24个字节空间。的语句,自己手动翻译原有代码是很费劲的,也许是写脚本生成出来的,因此我认为我这种写法更好。和bss段有一个结构体数组的事实,不难得出。的操作是给二叉树节点指定左右孩子,也就是。原创 2022-09-13 00:46:13 · 765 阅读 · 0 评论 -
【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 · 694 阅读 · 1 评论 -
【reverse IDA使用技巧】IDA动态调试Linux_ELF配置+例题:SCUCTF新生赛2021-DebugMe
如果是云服务器就不用走这一步了,但对于本地虚拟机来说这一步是必要的。首先我们需要一台虚拟机,理论上云服务器也没问题,但用本地的虚拟机更方便。大致跟着参考链接2走一遍就行,但本文会指出一些需要注意的地方。根据参考链接1的两个链接,选择你在用的wifi来设置即可。似乎IDA的调试器不能很方便地跳转到某个地址,这里考虑通过汇编来修改寄存器。的图标,并按F5反汇编,开启源码级调试。,这说明主机不能通过ip访问虚拟机,需要走下一步的流程。,即可进入期望的代码块。接下来需要知道虚拟机的Hostname。原创 2022-09-12 09:24:05 · 1982 阅读 · 0 评论 -
【reverse】新160个CrackMe之116-REM-KeyGenME#10——脱壳、去背景音乐、识别反调试
发现有些代码变成了数据,但因为没有标红的代码,不像是插入了花指令。的时候,发现这句指令执行时间比其他语句长,断定这是音乐播放的函数。x64dbg实测执行时间比其他语句时间长,但感受差别比较小,不容易注意到。这个exe需要手动脱壳、去背景音乐、有反调试,可惜算法较简单,勉强如参考链接1所说,“列入精品软件”。看了参考链接1,知道是upx壳,但upx命令脱壳失败。,但因为我们用的是先进的IDA7.7,不用管它直接F5!参考链接1找到音乐播放函数的方法是:单步执行,执行到。,有壳且暂时不知道是什么壳。原创 2022-09-04 02:06:48 · 324 阅读 · 0 评论 -
【reverse】新160个CrackMe之154-cpp_crackme1——MFC+纯算法逆向
把char赋值给int的隐式类型转换是“有符号扩展”。不要想当然地把__ROR4__简化为右移一位。python实现时不要怕麻烦。原创 2022-09-03 20:59:54 · 881 阅读 · 0 评论 -
【CTF misc python】加密zip和rar文件的枚举解密工具(python代码)
枚举解密有密码的压缩包应该是常见需求了。没有工具的情况下可以自己写一段py脚本来实现。环境:Windows10,python3.7.6文章目录仅支持ZIP的版本支持ZIP和RAR的版本安装代码解释参考链接仅支持ZIP的版本我稍微改了下参考链接1的代码,可以正确运行。 他的代码在解密基础上加了多线程,但是他的代码会打印很多个密码(第一个打印的就是真密码)。我对多线程了解很少,但我认为我这段代码是对的(只要对flag变量的所有操作都是原子的),因为只有一个线程能找到密码,找到密码的线程等待cpu调度期原创 2022-03-05 20:53:37 · 4556 阅读 · 0 评论 -
【CTF pwn】Windows下尝试栈溢出执行任意函数
buu-ciscn_2019_n_1是一道可以通过栈溢出修改变量为所需值的入门pwn。这题有两个解法,我受到这题的启发,搞一个Windows版本的小实验。目标:执行函数func。环境:Windows10,编译出的exe是32位的;小端存储。编译命令:g++ 1.cpp -g -o 1.exe,g++版本:Thread model: win32gcc version 8.2.0 (MinGW.org GCC-8.2.0-5)作者:hans774882968以及hans774882968文章目录原创 2022-02-18 00:24:33 · 3975 阅读 · 0 评论 -
【CTF reverse】IDA基本操作:修改exe实现任意密码都能登录成功
目标:exe无论输入什么都能显示登录成功。可以收获:IDA修改exe的基本操作。小白入门向。作者:hans774882968以及hans774882968文章目录实验1实验1的变式实验1编译代码#include <bits/stdc++.h>using namespace std;const int N = 505;void dbg() { puts ("");}template<typename T, typename... R>void dbg (原创 2022-02-17 15:58:00 · 1452 阅读 · 0 评论 -
【CTF reverse】逆向入门题解集合2
文章目录buu-简单注册器-安卓逆向buu-不一样的flagbuu-SimpleRev-小段存储作者:hans774882968以及hans774882968buu-简单注册器-安卓逆向上JEBpackage com.example.flag;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v7.app.ActionBarActivity;import androi原创 2022-02-17 00:17:21 · 3833 阅读 · 0 评论 -
【CTF reverse】逆向入门题解集合+逆向相关软件安装
下载安徽理工大学的ctf软件包:传送门。里面包含了不少软件,IDA、AndroidKiller、jd-gui等。除此以外,还需要:PETools:查看exe基本信息,在GitHub上开源。UPX.exe:exe加壳工具,也可以用来去UPX壳(但连变种的UPX壳都没法去~),在GitHub上开源。JEB:参考h鶸的文章安装即可????uncompyle6:把pyc转为python。pip install uncompyle6Linux的file命令可以帮助我们分析一个未知文件的基本信息。作者原创 2022-02-15 14:53:21 · 7186 阅读 · 0 评论 -
【CTF reverse Java逆向】JEB3.19逆向方案(已知2022.02.14可用)
声明:仅供Java逆向学习参考!解决方案下载参考链接1提供的JEB。在power shell运行.\jeb_wincon.bat启动JEB。进入界面后,如果让你提供license key,就运行下文的python代码(可以自行先修改成py3),输入license data,算出license key。如果patch失败的话,也可以采用替代方案:在提供了license key以后,用RunAsDate软件来运行JEB(可行大概是因为这版本JEB并没有去服务器请求时间?)。分析参考链接1提供的JEB原创 2022-02-15 02:05:19 · 2610 阅读 · 0 评论 -
从0搭建一个自制cli脚手架(附常见问题解决方案)
项目地址:https://github.com/Hans774882968/hans-cli环境:Windows10相信很多人都是通过vue-cli第一次认识前端脚手架。我们通过npm install -g vue-cli命令全局安装脚手架后,再执行vue create project-name就能初始化一个vue项目。那么我们能不能写一个自己的脚手架,方便地初始化一个项目?答案不仅是肯定的,难度还不大!用到的工具commander用来编写指令和处理命令行。例:const program = r原创 2022-01-29 00:15:52 · 1734 阅读 · 2 评论 -
typescript入门(包含常见错误)
下载npm install -g typescript值得注意的是:不会在每个项目都生成node_modules占磁盘空间!这样就能全局地使用tsc命令了!生成tsconfig.jsontsc --init同样不会生成node_modules占磁盘空间!编译运行注意,官方文档已经指出,这种方式会忽略tsconfig.json!tsc helloworld.tsnode helloworld.js事实上,直接在项目根目录下输入tsc即可。报错:重复的函数实现两个同名函数,原创 2022-01-27 15:42:35 · 1573 阅读 · 0 评论 -
用IntersectionObserver实现图片懒加载
使用IntersectionObserver这个api可以更简便地实现图片的懒加载。它是浏览器原生提供的构造函数,它的用法网上也不少,且不容易踩坑。值得注意的是,如果图片没加载时默认高度为0,那么这个懒加载效果就会打不少折扣,这个折扣程度和前几张图片的高度有关。比如我本地如果不开console(底部),刚进入页面就会一次性全部加载。开console并拉到占据大部分高度的位置,才能让它刚进入页面时,只加载2张图片。所以我们为.img-area预设了一个min-height。HTML+CSS<!DO原创 2021-10-06 13:21:15 · 251 阅读 · 0 评论 -
vue的diff算法详解
为什么需要虚拟dom?虚拟dom只是一个普通的js对象。由于每次渲染视图都是先创建vnode,然后用它创建真实DOM插入到页面中,所以可以将上一次渲染视图所创建的vnode缓存起来。之后重新渲染视图,就可以对比oldVnode和vnode,基于新旧差异来更新DOM了。这样可以提升性能。(《深入浅出Vue.js》P55)源码专有术语一览新旧虚拟节点在源码里的变量名分别为:vnode和oldVnode。我们以vnode为基准,目标是把dom修改成vnode的样子,并且最小化dom操作次数。如果原创 2021-10-01 14:46:54 · 474 阅读 · 0 评论 -
函数柯里化怎么实现
柯里化是一种转换,将 f(a,b,c) 转换为可以被以 f(a)(b)(c) 的形式进行调用。JavaScript实现通常都保持该函数可以被正常调用,并且如果参数数量不足,则返回偏函数。既然柯里化能知道参数数量是否足够,那么显然它只允许确定参数长度的函数,再强调一遍:柯里化要求函数具有固定数量的参数。使用 rest 参数的函数,例如 f(...args),不能以这种方式进行柯里化。柯里化实现首先,function有name和length这两种常用属性function f(a,b,...args){原创 2021-09-23 23:19:30 · 849 阅读 · 0 评论 -
canvas实现刮刮乐,带节流效果,兼容移动端
CSS布局的思路,是让图片绝对定位,并设置z-index=-1,使得它能被canvas挡住。然后canvas的颜色设为透明,从而让图片显示。JS部分。对节流函数进行了一些修改。thisArg指定fn的this。节流主要是用在mousemove和touchstart,产生涂抹效果那里。function throttle(fn, interval, thisArg) { let waiting = false return function (...args) { if (waiting)原创 2021-09-15 01:50:02 · 392 阅读 · 0 评论 -
滚动加载+回到顶部功能实现,带节流
HTML部分,给img设置data-src是为了方便实现加载的函数去拿到数据。CSS部分,”回到顶部“做了一个fixed定位,调了个正方形的效果。①节流我的理解是,从宏任务队列的角度理解,节流就是遇到一个新任务,直接丢弃新任务;防抖则是遇到一个新任务,就丢弃旧任务,让新任务进队列。这里只写了节流。thisArg是为了允许调用一个对象的成员函数。用法let throttleLoad = throttle(loader.loadMore, 300, loader)window.addEventLis原创 2021-09-09 02:02:56 · 327 阅读 · 0 评论 -
JS用链表实现队列,附测试代码
我偶然查了查网上js实现队列、优先队列的代码,tmd全是直接封装数组,学前端的难道没一个会算法的?在此提供一份队列的实现,使用链表。附测试数据,以及NC114的AC代码(注:这份代码居然跑得比用js数组做队列的要慢555)。实现class ListNode { constructor(v = -1, n = null) { this.val = v this.next = n }}class Queue { constructor() { let u = new原创 2021-09-08 17:26:07 · 324 阅读 · 0 评论 -
Chrome拓展程序hello world
Chrome拓展程序的好处还用我多说吗实现的是“阅读清单”。参考:https://blog.csdn.net/qq_24734285/article/details/118409229。参考链接有些小错误,我将在下文指出。效果图icon是一个小笑脸,截图没截到。点击icon就能展示了,展示的内容叫做“视图”。目录结构icon.pngChrome拓展程序对项目的目录结构只有一个要求:有manifest.jsonmanifest.json{ "manifest_version": 3,原创 2021-09-07 17:16:43 · 163 阅读 · 0 评论 -
Vue实现带两个方向过渡效果的轮播图
网上有许多轮播图案例,但只有极少数做了两个方向的滑动过渡效果。而我就是其中一个!所以来关注hans774882968,看技术干货!先看效果图HTML<!DOCTYPE html><html><head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>轮播图图片切换</title> <link rel=原创 2021-08-27 15:25:17 · 891 阅读 · 0 评论 -
CSS3+Vue实现动态时钟
这是一个css布局练手的休闲项目。用了一点vue,只是为了获取当前时间+更新时钟。又水了一发效果html<!DOCTYPE html><html><head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>时钟</title> <link rel="stylesheet" href="https.原创 2021-08-22 17:03:25 · 878 阅读 · 0 评论 -
用Vue实现一个最简单的树形组件
一个简洁的树形组件实现,作为一个练手。index.html<!DOCTYPE html><html><head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>树形组件</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.co原创 2021-08-19 17:10:07 · 1966 阅读 · 0 评论 -
纯CSS3实现对话框和火柴人
这是一个css的练手作品。效果图:HTML<!DOCTYPE html><html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>对话框</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com原创 2021-08-18 16:30:31 · 288 阅读 · 0 评论 -
vue封装轮播图组件
前言:心血来潮想做个最简单的轮播图组件练练手。思路框架很简单,首先实现一个demo,再寻找该demo所有的可动态化的量。文件夹结构第一个难点是轮播图的css。我们采用这样的html<div class="carousel"> <div class="photo"> <img v-for="idx in img_num" :src="`./img/${idx}.png`" /> </div></div>我们希望通过控制原创 2021-07-02 18:05:36 · 3668 阅读 · 0 评论 -
springboot+vue-cli前后端分离demo(含踩坑记)
整个demo由两个项目组成,后端项目基于springboot,前端项目基于vue-cli。整个demo基于idea。后端项目前置操作:配置maven。maven可以用来管理jar包。虽然不太准确,但萌新暂时可以把maven与python的pip、nodejs的npm类比。先咕着吧~配置好maven,就开始创建项目。File==>New==>Project,创建一个Spring Boot项目。项目名“springbootdemo”。如果遇到显示无法连接到http://start.sprin原创 2021-06-13 23:02:54 · 833 阅读 · 3 评论