我拖了很久的项目 OneDrive Directory Lister 已经完成了基本的目录列举和跳转下载功能,不过目前还不能用于生产环境。
这是一个使用 Node.js + express 编写的列举 OneDrive 文件的网站后端程序。你可能问为什么不使用其他现成的项目而要重复造轮子?因为我最初设想是用来白嫖各种免费的 Serverless 平台,我调查过 Google Firebase, ZEIT Now, Netlify 和 Heroku 这四个平台,都支持 Node.js。但是我似乎没有找到使用 Node.js 编写的同类项目,所以打算自己开发。
这个最初的版本可以进一步完善再发布的,不过还是觉得先公开出来接受评论比较好。目前网页界面是抄袭 nginx autoindex 的设计。
这是一个使用 Node.js + express 编写的列举 OneDrive 文件的网站后端程序。你可能问为什么不使用其他现成的项目而要重复造轮子?因为我最初设想是用来白嫖各种免费的 Serverless 平台,我调查过 Google Firebase, ZEIT Now, Netlify 和 Heroku 这四个平台,都支持 Node.js。但是我似乎没有找到使用 Node.js 编写的同类项目,所以打算自己开发。
这个最初的版本可以进一步完善再发布的,不过还是觉得先公开出来接受评论比较好。目前网页界面是抄袭 nginx autoindex 的设计。
YSC 的频道
我拖了很久的项目 OneDrive Directory Lister 已经完成了基本的目录列举和跳转下载功能,不过目前还不能用于生产环境。 这是一个使用 Node.js + express 编写的列举 OneDrive 文件的网站后端程序。你可能问为什么不使用其他现成的项目而要重复造轮子?因为我最初设想是用来白嫖各种免费的 Serverless 平台,我调查过 Google Firebase, ZEIT Now, Netlify 和 Heroku 这四个平台,都支持 Node.js。但是我似乎没有找到使用…
odl 0.1.1 已发布 (GitHub, npm),修复了目录解析时无法处理反斜杠的问题 (ca10fcf),以及处理了 OneDrive 文件不存在的情况 (fcd1696)。该版本应该没有安全问题,可以用于生产环境了。不过还未实现缓存功能,所以仍不建议用于生产环境。
GitHub
ysc3839/odl
OneDrive Directory Lister. Contribute to ysc3839/odl development by creating an account on GitHub.
OpenWrt 近期的一个投票结果出来了 https://lists.infradead.org/pipermail/openwrt-adm/2020-February/001316.html
你们感兴趣的可能有:
1.跳过 Linux 4.19 内核,下个版本将会使用 5.4 内核 (5.4 内核仅比 4.19 多了一票)
2.使用自建的 GitLab 平台托管代码
3.投票选出了新的 Logo
你们感兴趣的可能有:
1.跳过 Linux 4.19 内核,下个版本将会使用 5.4 内核 (5.4 内核仅比 4.19 多了一票)
2.使用自建的 GitLab 平台托管代码
3.投票选出了新的 Logo
YSC 的频道
OpenWrt 近期的一个投票结果出来了 https://lists.infradead.org/pipermail/openwrt-adm/2020-February/001316.html 你们感兴趣的可能有: 1.跳过 Linux 4.19 内核,下个版本将会使用 5.4 内核 (5.4 内核仅比 4.19 多了一票) 2.使用自建的 GitLab 平台托管代码 3.投票选出了新的 Logo
新的 logo 详细设计
https://openwrt.org/docs/guide-graphic-designer/openwrt-logo
预览图
https://forum.openwrt.org/uploads/default/a659bf50e40b935070b223e81f311c737ed257b0
https://openwrt.org/docs/guide-graphic-designer/openwrt-logo
预览图
https://forum.openwrt.org/uploads/default/a659bf50e40b935070b223e81f311c737ed257b0
The Microsoft Edge WebView2 control enables you to host web content in your application using Microsoft Edge (Chromium) as the rendering engine.
https://docs.microsoft.com/en-us/microsoft-edge/hosting/webview2
草!Chromium Edge 统一 WebView 居然还成真了!
https://docs.microsoft.com/en-us/microsoft-edge/hosting/webview2
草!Chromium Edge 统一 WebView 居然还成真了!
Docs
Introduction to Microsoft Edge WebView2 - Microsoft Edge Development
Host web content in your Win32, .NET, UWP apps with the Microsoft Edge WebView2 control.
刚刚被 Windows 坑了,偷懒用 DialogBoxIndirectParam 创建对话框 (因为 CreateWindow 的话还得注册一个自己的类),这个函数是你把窗口信息的结构体写好传进去就行,不过它支持两个版本的结构体,我没什么特殊需求就用旧版本的,结果一直失败。
然后发现如果自己 malloc 一块比较长的空间,并全部清零就正常了。很疑惑为啥要更长的空间,于是逆向+调试这个函数,发现它即使检测到了旧版本的结构体,还是会当成新版本去访问其中某个值,结果就是越界访问到了一些不知啥的数据……
解决方案是在后面加上一段 padding,全部清零,估计是没啥问题了。
然后发现如果自己 malloc 一块比较长的空间,并全部清零就正常了。很疑惑为啥要更长的空间,于是逆向+调试这个函数,发现它即使检测到了旧版本的结构体,还是会当成新版本去访问其中某个值,结果就是越界访问到了一些不知啥的数据……
解决方案是在后面加上一段 padding,全部清零,估计是没啥问题了。
YSC 的频道
之前在某个群讨论过 Windows Resource Dialog 字体的坑,刚刚写了个自动把字体替换成系统字体的程序。 原理是解析 Dialog 的数据,然后替换掉里面的字体。 https://gist.github.com/ysc3839/b818c2d97c8e7cae398474df9bf29eb0
YSC 的频道
刚刚在翻 ReactOS 代码时发现,当 Dialog 字体大小 (font point size) = 0x7FFF 时,会自动使用 MessageFont (可以理解为系统默认字体)。觉得可能是一个偷懒解决字体问题的办法,继续搜索发现了 Wine 的邮件列表中提到了这个 feature。然而实际测试时窗口不会出现,逆向代码发现 Windows 确实也会根据 0x7FFF 使用 MessageFont,继续跟踪下去发现问题似乎是创建子控件时失败了,删除所有子控件后能成功显示,但是这样的话就没啥意义了。 …
继续逆向发现,MessageBox 也使用了这个特性,但是却没问题,打算从这方面入手调查。
YSC 的频道
继续逆向发现,MessageBox 也使用了这个特性,但是却没问题,打算从这方面入手调查。
调试发现 MessageBox 传进去的数据是昨天提到的“旧版本”结构体,进一步测试发现改为旧版本的 Dialog 之后就能成功显示了。
YSC 的频道
调试发现 MessageBox 传进去的数据是昨天提到的“旧版本”结构体,进一步测试发现改为旧版本的 Dialog 之后就能成功显示了。
考虑到大多数读者应该没了解过 Win32 开发,了解 Win32 开发的也希望获得更多细节,在这里解释一下什么是 Windows Resource Dialog,以及新旧版本的问题。
关于 Resource:直接翻译是“资源”,是 PE 可执行文件中一个可选的区段 (详情请自行搜索 PE 格式以及区段),这个区段里面一般会存放 exe 图标等数据。不同数据是先按类型划分,再按 ID 划分,可以在这里看到系统预定义的类型。
从上面的链接可以看到预定义的类型中有 Dialog 类型,直接翻译是“对话框”类型。一般情况下 Windows 中要创建窗口必须调用 CreateWindow 手动创建,布局什么都得写代码,比较麻烦。但 Windows 还额外提供了 Resource Dialog (“资源对话框”),通过编写 RC 脚本,编译时将这些脚本编译为对应格式的数据保存在资源区段里面,运行时调用对应的 API,系统会解析这些数据并帮你创建好窗口,布局什么的也可以借助资源编辑器来实现,可以省很多事。
而前文提到的“两个版本”则是两个版本的对话框模板,旧版本比新版本少了一些 (很不常用的) 字段,具体的结构可以在微软文档查到 (旧版本, 新版本)。
关于 Resource:直接翻译是“资源”,是 PE 可执行文件中一个可选的区段 (详情请自行搜索 PE 格式以及区段),这个区段里面一般会存放 exe 图标等数据。不同数据是先按类型划分,再按 ID 划分,可以在这里看到系统预定义的类型。
从上面的链接可以看到预定义的类型中有 Dialog 类型,直接翻译是“对话框”类型。一般情况下 Windows 中要创建窗口必须调用 CreateWindow 手动创建,布局什么都得写代码,比较麻烦。但 Windows 还额外提供了 Resource Dialog (“资源对话框”),通过编写 RC 脚本,编译时将这些脚本编译为对应格式的数据保存在资源区段里面,运行时调用对应的 API,系统会解析这些数据并帮你创建好窗口,布局什么的也可以借助资源编辑器来实现,可以省很多事。
而前文提到的“两个版本”则是两个版本的对话框模板,旧版本比新版本少了一些 (很不常用的) 字段,具体的结构可以在微软文档查到 (旧版本, 新版本)。
Docs
Resource Types (Winuser.h) - Win32 apps
The following are the predefined resource types.
YSC 的频道
考虑到大多数读者应该没了解过 Win32 开发,了解 Win32 开发的也希望获得更多细节,在这里解释一下什么是 Windows Resource Dialog,以及新旧版本的问题。 关于 Resource:直接翻译是“资源”,是 PE 可执行文件中一个可选的区段 (详情请自行搜索 PE 格式以及区段),这个区段里面一般会存放 exe 图标等数据。不同数据是先按类型划分,再按 ID 划分,可以在这里看到系统预定义的类型。 从上面的链接可以看到预定义的类型中有 Dialog 类型,直接翻译是“对话框”类型。一般情况下…
前文所说的“偷懒”,其实偷了两个懒,一个是偷懒不用 CreateWindow (因为 CreateWindow 的话还得注册一个自己的类,好像这也是一个知识盲点,详情可以搜索 Windows 窗口类),二是不用单独在 RC 脚本中编写这个对话框模板 (不过其实在 RC 脚本中写一下也不麻烦,唯一的坏处是不能把代码拷走就用,还需要在 RC 脚本中加上对应的代码)。DialogBoxIndirectParam 这个函数的 Indirect 可以翻译为“直接”,直接用内存中的对话框模板,而不需要资源区段里面的。
YSC 的频道
刚刚被 Windows 坑了,偷懒用 DialogBoxIndirectParam 创建对话框 (因为 CreateWindow 的话还得注册一个自己的类),这个函数是你把窗口信息的结构体写好传进去就行,不过它支持两个版本的结构体,我没什么特殊需求就用旧版本的,结果一直失败。 然后发现如果自己 malloc 一块比较长的空间,并全部清零就正常了。很疑惑为啥要更长的空间,于是逆向+调试这个函数,发现它即使检测到了旧版本的结构体,还是会当成新版本去访问其中某个值,结果就是越界访问到了一些不知啥的数据…… 解决方案是在后面加上一段…
Docs
Using Dialog Boxes - Win32 apps
You use dialog boxes to display information and prompt for input from the user.
YSC 的频道
在网上发现了一个叫 Win7 Style Builder 的软件,可以直接查看 Windows 主题的内部数据。可以说懂了一点 Windows 主题的机制。 首先各位可能知道用 SetWindowTheme(hWnd, L"Explorer", nullptr) 可以让 ListView 和 TreeView 开启资源管理器的那种新的主题。 主题文件中有控件对应的资源,比如 ListView 对应的是 "ListView",用了 SetWindowTheme 之后,就会变成 "Explorer::ListView"。…
https://github.com/nptr/msstyleEditor
最近才发现一个开源的 Win7 Style Builder 的替代品,至少不像 Win7 Style Builder 那样要收费了,仅查看不编辑的话还是很实用的。
最近才发现一个开源的 Win7 Style Builder 的替代品,至少不像 Win7 Style Builder 那样要收费了,仅查看不编辑的话还是很实用的。
刚刚在网上了解到一个叫做 ScreenWings 的闭源软件,功能是可以防止整个屏幕录像/截图。下载下来用 Spy++ 分析了一下,大概能猜到是用一个顶层窗口+WS_EX_LAYERED (使窗口透明)+WS_EX_TRANSPARENT (使鼠标穿透窗口)+SetWindowDisplayAffinity 实现的。
YSC 的频道
https://github.com/ysc3839/magisk-permissionreviewenabler/releases/tag/v2 写了个可以通过 Travis CI 自动构建的版本。同时加入了自动删除 /data/resource-cache 下所有文件的脚本。 经过测试似乎不能删除 /data/resource-cache 下的文件,怀疑与加密有关。将在后续版本修复。
https://github.com/ysc3839/magisk-runtimeoverlaytemplate
基于之前的 magisk-permissionreviewenabler 脚本实现了一个模板,并根据 @milkice 的博客文章加入了签名以及 zipalign 支持,同时改用 GitHub Actions 自动生成。
基于之前的 magisk-permissionreviewenabler 脚本实现了一个模板,并根据 @milkice 的博客文章加入了签名以及 zipalign 支持,同时改用 GitHub Actions 自动生成。
GitHub
GitHub - ysc3839/magisk-runtimeoverlaytemplate: Template for building Android Runtime Resource Overlay magisk module
Template for building Android Runtime Resource Overlay magisk module - ysc3839/magisk-runtimeoverlaytemplate
YSC 的频道
https://github.com/ysc3839/magisk-runtimeoverlaytemplate 基于之前的 magisk-permissionreviewenabler 脚本实现了一个模板,并根据 @milkice 的博客文章加入了签名以及 zipalign 支持,同时改用 GitHub Actions 自动生成。
https://github.com/ysc3839/magisk-bluetoothhidenabler
基于 magisk-runtimeoverlaytemplate 实现了开启 Bluetooth HID (模拟蓝牙设备) 的 Magisk 模块。可以使用 Bluetooth HID Profile Tester 检测是否支持此功能。
基于 magisk-runtimeoverlaytemplate 实现了开启 Bluetooth HID (模拟蓝牙设备) 的 Magisk 模块。可以使用 Bluetooth HID Profile Tester 检测是否支持此功能。
GitHub
GitHub - ysc3839/magisk-bluetoothhidenabler
Contribute to ysc3839/magisk-bluetoothhidenabler development by creating an account on GitHub.
YSC 的频道
https://github.com/ysc3839/magisk-bluetoothhidenabler 基于 magisk-runtimeoverlaytemplate 实现了开启 Bluetooth HID (模拟蓝牙设备) 的 Magisk 模块。可以使用 Bluetooth HID Profile Tester 检测是否支持此功能。
发布了 v2 新版本,更新了 AndroidManifest.xml,现在在应用信息中不再会显示申请了一些权限了。