Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Read More

获取 macOS 网易云音乐的正在播放 —— 方案改进与 Mach 内核的探索之旅

在前文中我们结合 LLDB 验证了在 macOS 版网易云音乐的 - (void) refreshDockMenuTitlesForPlayLoadModel 函数中获取当前播放歌曲信息的可行性。同时,也发现了如果直接用 LLDB 解决获得正在播放歌曲信息的话,即要严重依赖 Debugger,又要接受 LLDB 常驻运行时内存占用较大的问题。

LLDB 真的那么神奇?

如果我们跳出盒子重新思考这个方案的话,就会发现之前使用 LLDB 的时候无非是使用了以下的几个功能:

  • Attach 与 Detach 目标进程
  • 分析进程的虚拟内存布局与 Mapping
  • 设置断点
  • 捕捉触发断点的事件
  • 恢复断点处理后的程序执行流程
  • 解析指针所指向的内存中存储的 Objective-C 对象(如 NSString)

也就是说,如果我们在自己的程序中实现了以上这些功能,也就可以脱离 LLDB 来实现获得当前播放信息的需求。

Read More

获取 macOS 网易云音乐的正在播放 —— 使用 LLDB 验证思路

8102 年和 9102 年可谓是 Virtual YouTuber 爆发的时代,每天的乐趣也多了一项去 YouTube 看可爱的 VTuber 们唱歌玩游戏和闲聊日常,这也让我想起来以前在哔哩哔哩上看绘师们直播画画的日子。

macOS 的用户数量相对于 Windows 的用户数量来说还是差距不小的,使用 Windows 进行直播的主播们应该还是占有很大比例的。而直播中又经常会有使用到 BGM 的地方,这里便产生了一个将当前 BGM 的信息显示在直播画面上的需求,有的主播选择直接将播放器放在直播画面中,而有的则选择了使用插件来获取软件当前播放的歌曲信息,这些插件也多是为运行在 Windows 上的音乐程序而开发的,有的是依靠取得窗口标题来获得当前播放的歌曲信息,一般来说能获得歌曲名与歌手名和/或专辑名就足够了;还有一些插件依靠分析网络请求来从服务器响应的 JSON 中获得歌曲信息;而在 macOS 上也有读取网易云音乐在本地存储的和网络请求相关的历史文件来获得歌曲信息的方案,不过我测试时似乎并不是那么好用。这些插件多是和 OBS 配合使用,毕竟 OBS 有一个很好用的功能——将文本文件的内容显示在画面上。外部插件写入文本文件,OBS 读取文本文件,一个很简单的管道就产生了,虽然并不能保证安全。

Read More

The Year 2018

不知不觉又到了年终总结的时间了,今年的主题是「匆匆」与「远方」。

请点击 https://mak1t0.cc/2018/ 前往页面。

同时也欢迎在本文章下留下你的评论〜

祝每一位小伙伴新年快乐,新年继续一起玩耍。

晚安!

Makito

USTC Hackergame 2018 小结

最近一边在前后端开发实习一边在复习准备考试,还是挺忙的,或者说,嗯,忙到爆炸。拖这么久才更新博客,顺便也更新了自己的 Journal. 主题。

这大半年始终处于迷茫之中,心情一直不是很好,只能经常找些事情做一做。刚过完十一假期的时候,群里有人发了个链接,看了看是 USTC 发起的 CTF 模式的线上竞赛[1](其实是游戏啦)。最终的参与人数大概有 2500 人?因为自己比较弱,我最终只拿到了 #37 的排名[2]

不过既然是想着找点事情分散注意力,还是重在参与,解题的过程不还是挺有趣的么。

Read More

またね、日本。

十天的日本之旅结束了,本来这个时间已经应该在飞机上了,但 PVG 的天气不好导致航班延误。借此机会,我又可以在此多停留几个小时,于是便在机场打下这段潦草的文字。

十天前,我踏入了这片陌生而又莫名熟悉的国土,开始了一场「奇妙之旅」。

陌生是因为身边的人们都讲着现实中不常听得到的语言,即便能够听懂一些,这种陌生感也在所难免;而至于莫名的熟悉感,就说来话长了。

人们似乎很喜欢做「圣地巡礼」的事情,不论是演员偶像去过的景点餐馆,还是动画电影作画的取景场地,当它们就出现在人们眼前时,仅仅是既视感就足够强烈了。

Read More

Google I/O'18 超简略内容提要

简单地整理了一下前一个半小时的内容,可能有不全的地方,敬请谅解。

Read More

译・存在于瑞士的无形语言边界

原文来自 BBC Travel
原文链接 http://www.bbc.com/travel/story/20180325-switzerlands-invisible-linguistic-borders
原文作者 Eric Weiner
译者 Makito

Röstigraben 的直译之意是“土豆饼鸿沟”(在法语中也称作“土豆饼屏障”或是“土豆饼之幕”),最早出现于世界第一次大战时期。当时,法国与德国交战,中立国瑞士的居民因语言而产生分歧,法语区的人们同情法国,而德语区的人们支持德国。Rösti 是一道传统的德瑞风味菜肴,主要由煎土豆制成,马铃薯作为主要食材,有时还会配以培根、洋葱和奶酪。虽然这条顺着萨林河(Sarine)走向的“鸿沟”并不在地图上,但这条思想的边界还是被居于瑞士的人们从小铭记在心。

Read More

比念诗还简单 —— Let's Encrypt 泛域名证书申请体验

今天 Let’s Encrypt 官方也宣布正式对 ACMEv2 和泛域名证书提供支持,想必经常折腾 SSL 证书的同学对于 Let’s Encrypt 这个致力于免费、开放以及自动化的证书颁发机构应该是很熟悉的。

之前 Let’s Encrypt 提供的证书是单域名的,因此新的子域名需要申请签发新的证书。而我一些域名下依附的 API 较多,每次改动子域名都是一套麻烦的操作,签发后再维护一大堆碎片化的证书实在是很让人头疼。

这次趁着机会,我来申请一个泛域名证书,这样今后也会方便许多。顺便我也会记录下申请的过程,方便需要的同学参考。

Read More

谈一谈第三方软件授权管理平台

文中提及的逆向工程思路仅供学习参考,请支持正版软件。

付费授权模式在商业软件中十分常见,它也为公司提供了收回软件开发成本的可能,或是让个人开发者过上小资生活(想多了)。

在之前尝试绕开 iStat Menus 6(下称「ISM6」)的授权验证时,曾被授权验证函数间传递的 NSDictionary 中的 Keys ——「CPU」和「Memory」所迷惑,这样做也是在一定程度上降低了敏感字符串暴露的风险。正如上一篇文章所分析的一样,ISM6 并未使用第三方的授权管理 SDK,而是选择了自己在最终用户端使用 Security Framework 进行验证。

可以说,大部分工具软件都在使用这类相对简单但也能保留部分强壮性(Robustness)的验证模式。毕竟,实现一套完整的授权管理体系所需要操心的事情并不少,支付订单管理、授权发放和管理以及最终用户端的验证及反破解等,综合算下来可能要比开发一个工具类软件还复杂。

因此一些着手解决此类问题的第三方平台便开始提供软件授权管理服务,开发者只需要接入 SDK 便可以轻松地管理自己的软件授权,从此高枕无忧。

可是,事实真的如此吗?我们先分析,再来讨论这个问题。

Read More