单位为了安全,需要使用网线连接内网,此时不能连接外网,无线可以连接外网,却又不能完成部分在内网才能完成的操作。
分类: macOS
Mac是苹果自1984年起以“Macintosh”开始的个人消费型计算机,如:iMac、Mac mini、Macbook air、Macbook pro、Mac pro等计算机。使用独立的Mac os系统,最新的OS X系列基于NeXT系统开发,不支持兼容。是一套完备而独立的生态系统。
macOS Catalina(10.15.6)文件大量变动后mds/mds_stores/mdworker引发系统卡顿
最近在执行bash gradlew clean build
之后,macOS Catalina(10.15.6)
系统处于长时间的卡顿状态。尽管已经编译结束了,依旧要持续非常长的一段时间才能恢复顺畅。
在执行top
命令之后,发现进程mds
,mds_stores
持续维持在高负荷运行状态,基本上把CPU
跟磁盘IO
全部占用。
网上搜索了一下,这两个服务是macOS Catalina(10.15.6)
系统的索引服务,由于编译过程中瞬间删除,又重新产生大量的临时文件,数量在几万个,大小达到若干GB。索引服务尝试对这些文件进行索引,引起极大的系统开销。
解决方法就是临时或者永久关闭索引服务
1 |
$ sudo mdutil -a -i off |
重新打开的话,执行
1 |
$ sudo mdutil -a -i on |
参考连接
java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7
macOS Catalina 10.15.6
,使用HomeBrew
执行brew install java
,安装了目前最新的openjdk-14.0.1
之后,执行bash gradlew clean build
,报告如下错误信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7 at org.codehaus.groovy.vmplugin.VMPluginFactory.<clinit>(VMPluginFactory.java:43) at org.codehaus.groovy.reflection.GroovyClassValueFactory.<clinit>(GroovyClassValueFactory.java:35) at org.codehaus.groovy.reflection.ClassInfo.<clinit>(ClassInfo.java:107) at org.codehaus.groovy.reflection.ReflectionCache.getCachedClass(ReflectionCache.java:95) at org.codehaus.groovy.reflection.ReflectionCache.<clinit>(ReflectionCache.java:39) at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.registerMethods(MetaClassRegistryImpl.java:210) at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:108) at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:86) at groovy.lang.GroovySystem.<clinit>(GroovySystem.java:36) at org.codehaus.groovy.runtime.InvokerHelper.<clinit>(InvokerHelper.java:86) at groovy.lang.GroovyObjectSupport.getDefaultMetaClass(GroovyObjectSupport.java:59) at groovy.lang.GroovyObjectSupport.<init>(GroovyObjectSupport.java:32) at org.gradle.internal.extensibility.DefaultExtraPropertiesExtension.<init>(DefaultExtraPropertiesExtension.java:29) at org.gradle.internal.extensibility.DefaultConvention.<init>(DefaultConvention.java:49) at org.gradle.internal.extensibility.ExtensibleDynamicObject.<init>(ExtensibleDynamicObject.java:60) at org.gradle.internal.instantiation.generator.MixInExtensibleDynamicObject.<init>(MixInExtensibleDynamicObject.java:35) at org.gradle.initialization.DefaultSettings_Decorated.getAsDynamicObject(Unknown Source) at org.gradle.initialization.SettingsFactory.createSettings(SettingsFactory.java:58) at org.gradle.initialization.ScriptEvaluatingSettingsProcessor.process(ScriptEvaluatingSettingsProcessor.java:61) at org.gradle.initialization.PropertiesLoadingSettingsProcessor.process(PropertiesLoadingSettingsProcessor.java:38) at org.gradle.initialization.SettingsEvaluatedCallbackFiringSettingsProcessor.process(SettingsEvaluatedCallbackFiringSettingsProcessor.java:34) at org.gradle.initialization.RootBuildCacheControllerSettingsProcessor.process(RootBuildCacheControllerSettingsProcessor.java:36) at org.gradle.initialization.BuildOperationSettingsProcessor$2.call(BuildOperationSettingsProcessor.java:50) at org.gradle.initialization.BuildOperationSettingsProcessor$2.call(BuildOperationSettingsProcessor.java:47) at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416) at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406) at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165) at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250) at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158) at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102) at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36) at org.gradle.initialization.BuildOperationSettingsProcessor.process(BuildOperationSettingsProcessor.java:47) at org.gradle.initialization.DefaultSettingsLoader.findSettingsAndLoadIfAppropriate(DefaultSettingsLoader.java:102) at org.gradle.initialization.DefaultSettingsLoader.findAndLoadSettings(DefaultSettingsLoader.java:45) at org.gradle.initialization.SettingsAttachingSettingsLoader.findAndLoadSettings(SettingsAttachingSettingsLoader.java:35) at org.gradle.internal.composite.CommandLineIncludedBuildSettingsLoader.findAndLoadSettings(CommandLineIncludedBuildSettingsLoader.java:34) at org.gradle.internal.composite.ChildBuildRegisteringSettingsLoader.findAndLoadSettings(ChildBuildRegisteringSettingsLoader.java:52) at org.gradle.internal.composite.CompositeBuildSettingsLoader.findAndLoadSettings(CompositeBuildSettingsLoader.java:35) at org.gradle.initialization.DefaultSettingsPreparer.prepareSettings(DefaultSettingsPreparer.java:36) at org.gradle.initialization.BuildOperatingFiringSettingsPreparer$LoadBuild.doLoadBuild(BuildOperatingFiringSettingsPreparer.java:59) at org.gradle.initialization.BuildOperatingFiringSettingsPreparer$LoadBuild.run(BuildOperatingFiringSettingsPreparer.java:54) at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402) at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394) at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165) at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250) at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158) at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92) at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31) at org.gradle.initialization.BuildOperatingFiringSettingsPreparer.prepareSettings(BuildOperatingFiringSettingsPreparer.java:42) at org.gradle.initialization.DefaultGradleLauncher.prepareSettings(DefaultGradleLauncher.java:197) at org.gradle.initialization.DefaultGradleLauncher.doClassicBuildStages(DefaultGradleLauncher.java:141) at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:130) at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:110) at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:60) at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:57) at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:85) at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:78) at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:189) at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40) at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:78) at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:57) at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:31) at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:63) at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32) at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:39) at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:51) at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:45) at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416) at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406) at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165) at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250) at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158) at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102) at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36) at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:45) at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:50) at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:47) at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:80) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:47) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:31) at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:42) at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:28) at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78) at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:52) at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:60) at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:38) at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:68) at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:38) at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:37) at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:26) at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43) at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29) at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:60) at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:32) at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55) at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41) at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:48) at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:32) at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:68) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:27) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78) at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75) at org.gradle.util.Swapper.swap(Swapper.java:38) at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:82) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52) at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56) at java.base/java.lang.Thread.run(Thread.java:832) FAILURE: Build failed with an exception. |
修改
1 |
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip |
为
1 |
distributionUrl=https\://services.gradle.org/distributions/gradle-6.6-all.zip |
就行了 。
出现原因是这个版本的gradle
对macOS
版本支持的不是很完善(其实是JDK
的版本适配问题)。Windows
版本打包倒是没有问题(Windows
用openjdk-14.0.1
一样有问题)。
参考链接
java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Ja【已解决】
fatal: could not read Username for 'https://github.com': terminal prompts disabled
最近更新HomeBrew
的时候,一直报错,如下:
1 2 |
$ brew update fatal: could not read Username for 'https://github.com': terminal prompts disabled |
执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
$ git config --global --add url."git@github.com:".insteadOf "https://github.com/" $ brew update Host key verification failed. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. Host key verification failed. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. Host key verification failed. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. Host key verification failed. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. Error: Fetching /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask failed! homebrew/homebrew-science does not exist! Run `brew untap homebrew/homebrew-science` to remove it. Fetching /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask-versions failed! Fetching /usr/local/Homebrew/Library/Taps/homebrew/homebrew-services failed! |
执行如下命令即可:
1 2 3 4 5 6 7 |
$ brew untap homebrew/homebrew-science $ brew untap homebrew/homebrew-cask-versions $ brew untap homebrew/homebrew-services $ git config --global --remove-section url."git@github.com:" |
参考链接
Git Error: Could could not read Username for 'https://github.com': terminal prompts disabled
Error: Cask 'java7' is unreadable: undefined method `undent' for #
今天在执行brew upgrade
的时候出现如下错误:
1 2 3 4 |
$ brew upgrade Updating Homebrew... Error: Cask 'java7' is unreadable: undefined method `undent' for #<String:0x00007fcff5421ec8> |
原因为某次更新之后,配置文件增加了某些不必要的字段。更要命的是,不能执行卸载命令来删除出问题的安装包。解决方法为删除这个字段。
方案如下:
1 2 3 4 5 6 7 8 9 10 11 |
$ find "$(brew --prefix)/Caskroom/"java7'/.metadata' -type f -name '*.rb' | xargs grep 'EOS.undent' --files-with-matches | xargs sed -i '' 's/EOS.undent/EOS/' $ find "$(brew --prefix)/Caskroom/"java'/.metadata' -type f -name '*.rb' | xargs grep 'EOS.undent' --files-with-matches | xargs sed -i '' 's/EOS.undent/EOS/' $ brew uninstall java7 $ brew cleanup $ brew update $ brew upgrade |
参考链接
bash切换zsh后.bashrc文件失效的解决方案
问题
- 从
bash
切换到zsh
后,发现原先bash
下的bashrc
文件配置都失效了(显示zsh: command not found
字样,当然如果手动通过source FileName
加载是可以的),macOS Catalina(10.15.5)
已经默认切换到zsh
,那么如何实现不用每次加载.bashrc
文件就实现alias
等便捷功能呢?
解决方案
- 使用系统级的
/etc/zshrc
或/etc/zprofile
- 使用用户级的
~/[X]bashrc
或~/[X]profile
- 鉴于
/etc/zshrc
里有较多zsh
特性配置,而且默认全局加载
,因此这里通过编辑用户级的profile
并加载原先的bashrc
(即Bash Shell
下用户文件)来实现我们的需求
详细步骤
- 复制系统文件并修改权限
1 2 3 4 5 6 7 8 9 |
mu@xiaomudeMacBook-Pro ~ % cp /etc/zprofile ~/.zprofile mu@xiaomudeMacBook-Pro ~ % ll ~/.zprofile -r--r--r-- 1 mu staff 255 9 6 09:35 /Users/mu/.zprofile mu@xiaomudeMacBook-Pro ~ % chmod u+w ~/.zprofile #要实现自定义必须添加写权限,否则只有只读权限 mu@xiaomudeMacBook-Pro ~ % ll ~/.zprofile -rw-r--r-- 1 mu staff 255 9 6 09:35 /Users/mu/.zprofile |
- 追加自定义配置项,加载
Bash Shell
的.bashrc
文件
1 2 3 4 |
mu@xiaomudeMacBook-Pro ~ % cat .bashrc alias ll='ls -l' mu@xiaomudeMacBook-Pro ~ % echo "source ~/.bashrc" >> .zprofile |
- 测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
mu@xiaomudeMacBook-Pro ~ % ll #配置暂未生效 zsh: command not found: ll mu@xiaomudeMacBook-Pro ~ % source .zprofile #加载配置文件,使其立即生效;下一次打开终端Shell会话,将自动加载 mu@xiaomudeMacBook-Pro ~ % ll total 16 drwx------ 5 mu staff 160 8 23 14:38 Applications drwx------@ 4 mu staff 128 1 2 2019 Applications (Parallels) drwx------@ 4 mu staff 128 9 1 15:23 Desktop drwx------+ 20 mu staff 640 8 29 12:14 Documents drwx------@ 35 mu staff 1120 9 6 09:29 Downloads drwx------@ 85 mu staff 2720 8 30 11:05 Library drwx------+ 4 mu staff 128 8 20 20:17 Movies drwx------+ 8 mu staff 256 8 20 20:17 Music drwx------ 26 mu staff 832 9 6 09:28 Nextcloud drwx------ 3 mu staff 96 1 2 2019 Parallels drwx------+ 6 mu staff 192 8 20 20:01 Pictures drwxr-xr-x+ 4 mu staff 128 11 28 2018 Public drwxr-xr-x 4 mu staff 128 12 9 2018 PycharmProjects -rw-r--r-- 1 mu staff 811 12 15 2018 Untitled.ipynb -rw-r--r-- 1 mu staff 1578 12 29 2018 Untitled1.ipynb drwxr-xr-x 3 mu staff 96 8 25 16:08 VirtualBox VMs drwxr-xr-x 2 mu staff 64 1 25 2019 WeChatProjects |
参考链接
macOS Catalina(10.15.5)用蓝牙PAN共享Wi-Fi上网
今天有需要共享上网进行抓包分析报文的情况。
研究了一下MacBook Pro
(macOS Catalina(10.15.5)
)如何通过蓝牙PAN
(Bluetooth PAN
)来共享笔记本连接的Wi-Fi
网络出来,让手机通过共享出来的蓝牙热点来上网的方法。
由于蓝牙PAN
(Bluetooth PAN
)本质属于局域网转发,起到一个简单网关的作用。因此我们需要设置蓝牙设备的IP
地址跟需要共享的Wi-Fi
网卡相同。
具体操作如下:
Android默认调试签名证书
今天遇到了需要手工用调试签名重新签名APK文件的一个需求。
Android默认调试签名证书位置
Windows:
1 |
C:\Users\<用户名>\.android\debug.keystore |
macOS Catalina:
1 |
~/.android/debug.keystore |
证书密码 :android
签名脚本:
1 |
$ bash ~/Android/sdk/build-tools/29.0.2/apksigner sign --ks debug.keystore xxx.apk |
参考链接
macOS Catalina(10.15.4)安装应用提示 '无法打开"XXXX",因为无法验证开发者' 的解决方法
HomeBrew
安装SageMath
:
1 |
$ brew cask install sage |
启动的时候提示如下:
继续阅读macOS Catalina(10.15.4)安装应用提示 '无法打开"XXXX",因为无法验证开发者' 的解决方法
macOS Catalina(10.15.4)下RsaCtfTool的安装及使用
在CTF比赛中,往往会涉及到RSA解密类的题目,有了这个工具(基于python3.x)做起来就得心应手了。
这个也可以作为安全工具来使用,检查密钥的安全性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ git clone https://github.com/Ganapati/RsaCtfTool.git $ cd RsaCtfTool $ pip3 install -r "requirements.txt" # 安装辅助数学计算库sagemath,提高计算效率 $ brew cask install sage # 暴力破解RSA公钥,输出私钥 $ python3 RsaCtfTool.py --publickey certificate.crt --private # 公钥中提取 N,e $ python3 RsaCtfTool.py --publickey ~/certificate.crt --dumpkey |
RSA简介
为了方便理解,先对RSA密钥体制做个简略的介绍。
- 选择两个大的参数,计算出模数 N = p * q
- 计算欧拉函数 φ = (p-1) * (q-1),然后选择一个e(1<e<φ),并且e和φ互质(互质:公约数只有1的两个整数)
- 取e的模反数d,计算方法为:e * d ≡ 1 (mod φ) (模反元素:如果两个正整数e和n互质,那么一定可以找到整数d,使得 e * d - 1 被n整除,或者说e * d被n除的余数是1。这时,d就叫做e的“模反元素”。欧拉定理可以用来证明模反元素必然存在。两个整数a,b,它们除以整数M所得的余数相等:a ≡ b(mod m),比如说5除3余数为2,11除3余数也为2,于是可写成11 ≡ 5(mod 3)。)
- 对明文m进行加密:c = pow(m, e, N),可以得到密文c。
- 对密文c进行解密:m = pow(c, d, N),可以得到明文m。
整理:
p
和 q
:两个大的质数,是另一个参数N的的两个因子。
N
:大整数,可以称之为模数
e
和 d
:互为无反数的两个指数
c
和 m
:密文和明文
(N, e)
:公钥
(N, d)
:私钥
pow(x, y, z)
:效果等效pow(x, y)% z
, 先计算x
的y
次方,如果存在另一个参数z
,需要再对结果进行取模。
密钥长度:n
以二进制表示的的位数,例如密钥长度为512
代表n
用二进制表示的长度为512bit
。
RSA安全性分析
对于RSA加密算法,公钥(N, e)
为公钥,可以任意公开,破解RSA最直接(亦或是暴力)的方法就是分解整数N
,然后计算欧拉函数φ(n)=(p-1) * (q-1)
,再通过d * e ≡ 1 mod φ(N)
,即可计算出 d
,然后就可以使用私钥(N, d)
通过m = pow(c,d,N)
解密明文。
保障RSA的安全性
1. 定期更换密钥
2. 不同的用户不可以使用相同的模数N
3. p与q的差值要大,最好是差几个比特
4. p-1与q-1都应该有大的素因子,一般建议选择的两个大素数p、q使得p=2p+1和q=2q+1也是素数
5. e的选择不要太小
6. d的选择也是不可以太小,最好满足d>=n的4分之1