醉梦轩 —— drunkdream的blog
采用 Hexo + NexT.Pisces主题
醉梦轩
Home Page: http://drunkdream.com
采用 Hexo + NexT.Pisces主题
https://www.drunkdream.com/2019/07/19/uiautomator-accessibilityservice/
0x00 前言UiAutomator是Android 4.1以上提供的一个UI自动化测试工具,4.3升级到了UiAutomator2.0,实现方式也从UiTestAutomationBridge变成了UiAutomation。
0x01 UiAutomation实现分析UiAutomation类位于android.app包下面,是API18新增的类。
public final class UiAu
https://www.drunkdream.com/2017/02/24/ubuntu-install-proxychains/
Proxychains是Linux上一款全局代理工具,通过Hook Socket函数实现透明代理,这和Windows上的Proxifier有点类似。在Ubuntu上安装Proxychains的方法是: apt-get install proxychains 安装的是3.1版本,配置文件的路径是:/etc/proxychains.conf,内容如下: # proxychains.conf VE
https://www.drunkdream.com/2021/07/24/deepin-uengine/
0x00 前言Deepin v20.2.2系统支持运行Android应用,于是安装了Windows/Deepin双系统后,开始了运行Android应用的踩坑之旅。以下是在这过程中的踩坑记录。 0x01 安装uengineDeepin中是通过一个叫uengine的工具来支持Android应用的,这是一个基于anbox进行二次开发而成的工具。它的基本原理是通过在Linux内核中安装Android所需要
https://www.drunkdream.com/2017/01/14/yu-jei-xing/
横风漫扫清商路 思益切 归难阻愁云欲退月还明 忍痛徘徊寒幕昔年此处 流星划逝 相伴成双宿 枯叶泪落惜缘舞 犹在盼 心头木重逢自此更无期 化作残灰稍驻来日芬馥 繁蕊若锦 勿忘枝间露
https://www.drunkdream.com/2022/09/14/build-python-with-cython-and-nuitka/
0x00 前言在Python中,可以使用py2exe或PyInstaller之类的工具将Python脚本编译成二进制文件,从而提升可移植性,并在一定程度上提升了性能。不过这类工具的实现只是将py文件编译成pyc或pyo,在安全性上还是弱了一些,存在被反编译的风险。 为了测试不同编译方式的性能差异,这里统一使用python2.7中提供的test/pystone.py作为执行脚本。由于这个脚本不支持p
https://www.drunkdream.com/2017/01/14/yu-mei-ren/
天深海邃诸峰小 河汉兰舟杳 低眉思度会期遥 嗔怪七夕将至 愈难熬 粉壮素扮花前笑 问鹊桥未好 相拥无语苦全销 不记年年独卧 枕边潮
https://www.drunkdream.com/2017/12/16/install-openvpn-server/
0x00 前言OpenVPN是一款跨平台的开源VPN软件,它利用虚拟网卡,以一种全新的方式实现了SSL VPN的功能,能够适应IP层之上的几乎所有应用。它使用TCP或UDP协议进行通信,相比于其它VPN,具有更好的NAT兼容性。 以下以腾讯云的Ubuntu 16.04.1 TLS 64位系统作为部署环境。如无特别说明,以下所执行的命令都需要root权限。 0x01 创建证书如果已经有证书,可以忽略
https://www.drunkdream.com/2020/02/18/gevent/
0x00 前言有很多Python语言的协程库,如:tornado、asyncio等。这些库在使用时需要使用特定的语法,如:async/await,对于非协程的代码需要改写才能以协程方式运行。 gevent是一个特殊的协程库,它可以将非协程代码以协程方式运行,从而起到提升性能的作用。本文尝试分析一下它的实现原理。 0x01 使用案例先看以下这段代码: import ctypes import sys
https://www.drunkdream.com/2022/05/05/icmp-tunnel-through-nat/
0x00 背景最近遇到一个客户环境比较特殊,无法使用TCP或UDP访问外网,但是可以ping通外网。于是想到通过ICMP协议建立与外界的通信链路。在尝试了几个开源工具都宣告失败后,准备自己撸一个ICMP隧道。当然,这个隧道工具需要支持穿过NAT访问网络。 0x01 NAT对ICMP的限制通常来说,NAT对TCP和UDP支持都比较好,但对ICMP一般限制会比较多。例如,常见的限制条件有: 内部机器
https://www.drunkdream.com/2017/01/14/xi-jiang-yue/
残灯孤风渐渐 冷夜思绪绵绵 寒蝉无语怎成眠 此情难寄鸿雁 但恨山高水远 今夕酒醒阳关 不知相诉欲何年 只消回眸一现
https://www.drunkdream.com/2017/01/14/xi-nu-jiao/
邂逅佳人 拈萱草 轻启笑 赋痴情 鸾书恨少 偷眼相窥 此中意 伊难晓 渺渺 羡朝云 巫颠弄巧 孤雁高飞 缘已尽 情未了 欲释怀 相思怎扫 满目西风 尽凋敝 凄凉早 杳杳 似如今 愁肠断老
https://www.drunkdream.com/2017/01/14/zhe-gu-tian/
不解西风离恨忧 欲将沧海泪还收 潇湘几度高唐梦 回首韩妻锁雀楼 枝上月 叹悠悠 相思何奈寸心休 纷纷落英含痴意 涛涛秋水势未留
https://www.drunkdream.com/2021/08/30/mipad5-install-linux/
0x00 背景小米平板5开始支持了键盘与鼠标,终于离生产力工具越来越近了。因此,从入手小米平板5开始,就想着怎么安装一个linux系统,可以在里面安装vscode,以便使用pad开发代码。下面是这段折腾之路的记录。 0x01 使用Aid Learning方案Aid Learning是一个为在Android机器上进行AI开发而实现的APP,官网地址为:http://www.aidlearning.n
https://www.drunkdream.com/2017/09/26/ubuntu-install-vnc-server/
之前在ubuntu上一般都是用vnc4server,但是它只能打开一个窗口,无法像windows上那样操作本地桌面,只能说比ssh强大一点。 今天发现了一个强大的vnc服务端x11vnc,可以远程操作本地桌面。以下内容主要来自于:http://blog.csdn.net/longhr/article/details/51657610。 安装方法以下命令都需要在root权限下运行,因此不单独加上su
https://www.drunkdream.com/2022/06/27/debug-github-actions/
0x00 背景Github Action提供了便捷的流水线能力,但是对于较为复杂的场景,只能依靠不断试错来定位和解决Action报错,效率非常低下。网上也有人提供了基于tmate的远程调试方案,但该方案也存在着一些不足。本文尝试提供一些其它的解决方案。 0x01 tmate方案简述tmate是一款实时终端共享工具,主要支持Linux系统。其基本原理是:tmate运行后会创建一个shell会话,并连
https://www.drunkdream.com/2018/12/21/pyinstaller/
0x00 前言之前都是使用py2exe将Python程序打包成可执行文件,但是最近需要打包成Macos上的可执行程序。于是,选择了py2app,但是使用下来发现坑比较多,最终还是放弃了。 于是,将目光转向了PyInstaller,它可以同时支持Windows和Macos,并且使用方法差异也很小。 PyInstaller与py2exe的主要差异(Windows): PyInstaller打包出来的
https://www.drunkdream.com/2017/01/14/jiang-cheng-zi/
尺素一去杳如烟 怨鸿鸾 恨无缘 只忆畴昔 相携共凭阑 转瞬远非前日景 伊未梦 泪先残 可怜秋雨戏娟婵 自衣宽 镜难圆 何苦今朝 华丝漫心烦 争胜放收江楚阔 情已落 烟云天
https://www.drunkdream.com/2017/01/14/zhao-jun-yuan/
风雨无情狂骤 吹煞杏桃红瘦 惊醒梦中秋 泪难收 晓看一塘残柳 花不语人依旧 空镜照人愁 粉颜流
https://www.drunkdream.com/2022/07/26/create-simple-ssh-server/
0x00 前言为了加深对SSH协议的理解,准备自己实现一个SSH服务端,需要同时支持Windows、Linux、MacOS三大系统。为了尽量提升性能,准备使用协程(asyncio)来开发。 0x01 基于AsyncSSH开发一个最简单的SSH服务端在调研了几个开源的python SSH库后,最终选择了AsyncSSH。这个库基于asyncio开发,符合我们的要求,同时扩展性也比较好。 下面实现了一
https://www.drunkdream.com/2020/03/11/mongodb-command/
0x00 前言mongodb是一款基于分布式文件存储的数据库,具有高性能、可扩展、易部署、易使用等特点。官方也提供了丰富的命令行工具来操作。
0x01 部署mongodb服务部署mongodb服务可以直接使用docker镜像:
$ docker search mongo
NAME DESCRIPTION
https://www.drunkdream.com/2020/05/29/mixed-lang-script/
0x00 前言通常一个脚本都是使用某一种语言编写,使用固定的解释器执行。例如以下这段vbs脚本: WScript.echo("Hello World!") 可以使用wscript或cscript执行,但肯定不能使用cmd或其他程序执行。 是否可以构造这样一种脚本,能同时被多种解释器执行呢? 0x01 小试牛刀下面是一段神奇的脚本: :On Error Resume Next
https://www.drunkdream.com/2019/07/21/wsl-nginx/
0x00 前言自从有了WSL,在Windows上部署各种服务也变得更加方便。最近,遇到一个问题,本地调试一些Web服务的时候,必须要使用80端口,如果同时有两个服务都监听80端口必然会导致冲突。而且,在Linux中监听80端口需要使用root权限,每次启动的时候都要加上sudo也挺麻烦的。
因此,想到可以利用nginx的反向代理能力,在本地进行HTTP的转发,这样,每个服务就可以使用自己的端口了。
https://www.drunkdream.com/2017/05/02/python-mingw-install-extension/
Python中可以使用 python setup.py build -c mingw32 install 安装包含C++扩展的第三方库,但需要先安装MinGW 5.1.4及以后版本,并将C:\MinGW\bin目录加入到环境变量。 安装过程中可能会出现以下错误: gcc: error: unrecognized command line option ‘-mno-cygwin’解决方法:修改C
https://www.drunkdream.com/2018/06/03/nginx-https/
0x00 前言nginx是一款高性能的Web服务器,可以用作反向代理和负载均衡。随着HTTPS的不断推进,越来越多的网站都开始转到HTTPS方式,HTTP仅仅作为重定向到HTTPS的途径。 本文介绍了如何在Ubuntu 16.04服务器上搭建基于nginx的HTTPS服务器,并且支持SNI。 0x01 准备域名和HTTPS证书域名分为免费域名和收费域名 免费域名免费域名包含一级域名和二级域名。 一
https://www.drunkdream.com/2019/04/04/docker-command/
0x00 前言Docker作为现在常用的服务部署方式,日常工作中免不了要做些build、push之类的操作。为了避免每次都要查文档,这里将一些常用的命令和技巧做一些总结。 以下以Ubuntu 16.04 x64系统作为演示环境。 0x01 环境准备安装docker$ apt install docker $ docker --version Docker version 18.06.1-ce, b
https://www.drunkdream.com/2018/07/11/install-mysql-server/
0x00 前言MySQL是一款开源的关系型数据库管理系统,大量公司都在使用它,或是在它的基础上做二次开发。有时,我们会需要在Linux系统上部署MySQL服务用于测试。 本文是根据网上的经验分享以及亲自实践的过程总结而来。实验环境为:Ubuntu 16.04 x64。 0x01 安装MySQL服务端和客户端apt install mysql-server -y apt install mysql
https://www.drunkdream.com/2019/08/29/wsl-chrome-headless/
前言Google Chrome早就支持了headless模式,但一般都是在Linux上运行,而我泽习惯于在WSL上开发,折腾了好久终于找到了可以在WSL上跑headless模式的方法。
以下以WSL中安装的是Ubuntu 18.04系统为例。
常见安装方法安装依赖库$ sudo apt install gconf-service libasound2 libatk1.0-0 libc6 libca
http://127.0.0.1:4000/2017/01/07/adb-new-device/
有些设备tadb等第三方adb工具能识别,但是sdk中提供的adb却不能识别。这种情况可以通过修改adb_usb.ini来让adb识别。该文件位于C:\Users{username}.android\adb_usb.ini
将要识别设备的VID添加到adb_usb.ini文件,每行一个,如:
0x2717
0x2A45
0x9BB5
获取设备UID的方法
打开设备管理器,找到安装的an
https://www.drunkdream.com/2021/02/27/turbo-tunnel/
0x00 前言你是否遇到过以下这些情况: 目标服务需要通过跳板机才能访问,每次都要将端口映射到本地,然后配置hosts访问 不同的服务需要配置不同的代理才能访问,管理起来很不方便 有些服务需要通过嵌套代理才能访问,本地不太好配置 本地开发、调试后端服务时,对于第三方依赖服务难以直连或通过同一个代理访问,而服务进程又只能配置固定的代理 总的来说,就是因为不同的开发、运维环境差异导致的跨网
https://www.drunkdream.com/2018/07/26/python-dynamic-create-class/
0x00 前言在Python中,类也是作为一种对象存在的,因此可以在运行时动态创建类,这也是Python灵活性的一种体现。
本文介绍了如何使用type动态创建类,以及相关的一些使用方法与技巧。
0x01 类的本质何为类?类是对现实生活中一类具有共同特征的事物的抽象,它描述了所创建的对象共同的属性和方法。在常见的编译型语言(如C++)中,类在编译的时候就已经确定了,运行时是无法动态创建的。那么Pyt
https://www.drunkdream.com/2023/07/08/kturtle/
0x00 前言KTurtle 是一个KDE开发的 Turtle Graphics(海龟绘图法) 教育编程环境,通过控制海龟的行进,在屏幕上绘制出相应图案的技术。它是根据开源的 GNU通用公共许可证发布。它可以让孩子通过可视化方式学会基本的编程思维,并掌握一定的数学、几何等知识。它的结构非常简单,非常适合儿童学习。 KTurtle 使用TurtleScript语言进行操作,该语言是从Logo语言的基
https://www.drunkdream.com/2017/01/14/lian-xiang-ci/
怜美人之徜徉兮,郁郁而寡欢青丝凌凌而猗靡兮,暗自悲悯欲绝面若初桃兮带雨,腰恰细柳兮销魂残黛双蹙,粉眼凝山朱唇几褪,皓齿贝连冰肌玉骨,风掀翠衫 忆曩昔之欢娱兮,愁云弥散携手伴游石城兮,幽亭共凭阑步逍遥而无忧兮,笑语厌厌 孰料风云之幻兮,须臾莫辨风雨骤临凄凄兮,软玉难牵孤夜茕独垂泪兮,枕席湿眠何旧人之难却兮,思怨益切詈雄兔之负心兮,雌兔独痴情乐新而弃故兮,顾之于漠漠何怀伤于斯人兮,全不念昔日缠
https://www.drunkdream.com/2020/09/24/nginx-302-to-200/
0x00 前言在使用Nginx作为反向代理的时候,如果源服务返回了30x(301、302、303、307等)返回码,需要用户再重新发送一次HTTP请求。但此时有可能出现用户不能直接访问重定向后的URL,就需要Nginx能自动进行重定向,读取新的URL后,通过200返回码返回真正的内容。本文主要就是研究了怎么配置Nginx以实现这样的功能。 0x01 使用错误处理进行反代Ngnix提供了error_
https://www.drunkdream.com/2022/08/02/bypass-ssh-port-forward/
0x00 背景在某些场景下SSH服务器会禁用掉端口转发的能力,以降低安全风险。这会导致很多依赖SSH端口转发的工具无法正常工作。 这里主要是修改了/etc/ssh/sshd_config文件中以下几项实现的: #AllowAgentForwarding yes #AllowTcpForwarding yes #X11Forwarding yes 此时,SSH服务器基本就变成了只能执行shell命
https://www.drunkdream.com/2019/12/06/local-deploy-jenkins/
0x00 前言Jenkins是一款使用比较广泛的CI/CD平台,2.0版本开始支持了pipeline,通过jenkinsfile文件进行流水线的控制。本文提供了一种在本地Linux环境中快速搭建Jenkins测试环境的方法。 0x01 环境部署直接使用docker镜像搭建环境是一种比较快捷的方法。编写如下Dockerfile文件: FROM jenkins/jenkins:lts USER ro
https://www.drunkdream.com/2020/06/05/javascript-hook/
0x00 前言Hook是一种动态修改函数执行流程或返回结果的方法,在实际应用中非常广泛。Javascript作为一种动态语言,也可以进行Hook操作。随着Javascript语言的发展,Hook的方法也越来越多,本文介绍了常见的几种Hook方法。 0x01 最简单的Hook方法Javascript中的函数可以直接被覆盖,因此,这也是最简单的一种Hook方法。 window.alert = func
https://www.drunkdream.com/2020/07/27/wsl2-guide/
0x00 前言随着Win10 2004版本的发布,WSL2的时代也正式到来。使用过WSL的用户,都遇到过一些很不爽的问题,例如:不能直接使用docker,一些系统相关的函数不能调用,netstat命令不能使用等。这些问题在WSL2中都得到了解决,因此,是时候切换到WSL2了。 不过,WSL2不是万能的,依然有一些问题,甚至有些问题本来在WSL1的时代是不存在的。 0x01 安装WSL2升级系统如果
https://www.drunkdream.com/2017/12/06/build-android-emulator-kernel/
0x00 前言前几天在使用Android模拟器的时候,发现无法连接PPTP类型的VPN服务器,报如下的错误: I/mtpd (30035): Creating PPPoX socketF/mtpd (30035): Socket() Address family not supported by protocol 对应的代码如下: static int create_pppox()
https://www.drunkdream.com/2019/11/19/python-singleton/
0x00 前言单例是一种很常见的设计模式,在Python中不同的实现方法差异也比较大。这里介绍一些不同的实现方法。
0x01 基本法class MyClass(object):
_instance = None
@staticmethod
def get_instance():
if not MyClass._instance:
M
https://www.drunkdream.com/about/state=
醉梦者,杨氏忠良微末之后,字真如,号醉梦,刘裕故人也。性好诗书,又喜辞赋,兼习佛,道,史,古文。
每尝读史则叹曰:“人心不古,罗敷难求”,又曰:“平生所愿,惟一知己足矣”,遂作一联曰:“誓扫六和同分楚天一色,愿携佳人共效比翼双飞”。奈何天道苍茫,金迷财醉,众人皆醉何我独醒,是以谐醉,故号醉梦,惟求醉中逍遥无日月,梦里依稀见乾坤。
&ems
https://www.drunkdream.com/2021/09/22/linux-container/
0x00 前言容器是指一种系统级的虚拟化技术,想比于KVM等内核级的虚拟化技术,具有更加轻量的特点。随着Docker技术以及k8s容器编排引擎的流行,容器在云原生时代扮演着绝对重要的角色。但事实上,容器技术自从Unix时代就已经出现,并且存在着多种容器方案,不同的容器方案之间既有相同点,也有不同点。 0x01 最早的容器化技术——chroot最早的容器是1979年由UNIX实现的Chroot Ja
https://www.drunkdream.com/2022/11/05/deepin-modify-grub-font-size/
0x00 背景最近重装了一下Deepin v20系统,发现开机时Grub菜单字体变小了,看着很不舒服,就尝试着寻找了下解决方法。 Grub配置文件路径是:/etc/default/grub,所以主要就是修改这个文件。该文件的默认内容为: # Written by com.deepin.daemon.Grub2 DEEPIN_GFXMODE_ADJUSTED=1 GRUB_BACKGROUND=/b
https://www.drunkdream.com/2017/01/14/die-nian-hua/
奢梦贪杯红粉帐 绿柳烟轻 芳草佳人酿 芙晓含情春正盎 痴蝶翩舞心波漾 但恐一朝花逝往 何处温柔 恰与伊乡仿 天道难违难再望 不如依汝归虚枉
https://www.drunkdream.com/2022/05/22/kali-wifi-cracking/
0x00 前言Kali是一款常用于渗透测试的Linux发行版,集成了较多的安全工具。本文尝试使用Docker安装Kali,并进行Wifi的破解工作。 本文仅做技术研究,请勿用于非法用途。 0x01 在Docker中安装Kali系统Kali官方提供了Docker镜像:kalilinux/kali-last-release。但是这个镜像基本没有包含任何工具,如果要安装全部工具,镜像大小会超过4G。很明
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.