IOS逆向需用到的工具汇总

1、Mac 上自带的一些命令工具
file:查看Mach-O的文件类型

file 文件路径

otool:查看Mach-O特定部分和段的内容

otool -L Mach-O文件 # 查看当前 Mach-O 文件的动态链接库。

lipo:常用于多架构Mach-O文件的处理

查看架构信息:lipo -info 文件路径
导出某种特定架构:lipo 文件路径 -thin 架构类型 -output 输出文件路径
合并多种架构:lipo 文件路径1 文件路径2 -output 输出文件路径
2、class-dump
导出 Mach-O 文件中的头文件,前提是 已脱壳。具体指令如下:

class-dump -H UCARSecurityDev -o heraders

UCARSecurityDev: Mach-O 文件,将导出的头文件放入文件夹(heraders)中。

3、Reveal
查看 APP UI布局的工具。 在设备上安装一个软件源,然后将 Mac 上的 RevealServer(help — Show Reveal Library in finder — iOS Library-RevealServer.framework — RevealServer) 放入设备的 Library/RHRevealLoader 目录。

在设备上运行想要查看的 APP 即可。

4、MachOView
MachOView会出现 crash的情况,解决方案查看https://blog.csdn.net/lwb102063/article/details/110136891。

5、Hopper Disassenbler
拖入 Mach-O 文件,查看汇编代码的工具。

6、Cycript
这个是一个在越狱设备上使用的一个应用程序,通过Cydia安装,直接在设备上调试。有点像 Python,不一样的是直接在设备上调试。开发语言这是一个多语言的混合体,包括 OC、JS、Java 等。

官方文档介绍:cycript-manual

进入环境的命令:

cycript
cycript -p 进程ID
cycript -p 进程名称
*种方式,仅仅是进入 cycript 的环境,后面两个是直接进入对应程序的 cycript 的环境。

关键的快捷键:取消输入:Ctrl + C,退出:Ctrl + D 与 清屏:Command + R。

通过 ps 命令可以列出当前设备的所有进程:

ps -A | grep key
ps aux
7、Clutch 与 dumpdecryted
都是脱壳工具: Clutch 与 dumpdecrypted。

7.1 Clutch

列出已经安装的 APP:

Clutch -i

列出来的一般都是加壳的 App。

进行加壳操作:Clutch -d APP序号或 BundleId

Clutch -d com.app.dev

具体步骤可以擦考

脱壳: 通过 Clutch -i 列出需要脱壳的应用列表:

Installed apps:
1: 神州优驾(U+)司机端 <com.szzc.driver>
2: 腾讯课堂 – 在线职业培训教育平台 <com.tencent.edu>
3: QQ <com.tencent.mqq>
4: 酷听音乐 – 歌曲音乐听你想听 <com.liyancong.kuq>
5: 神州租车-神州共享车重磅上线 <com.szzc.szzc>
6: ボイスレコーダー-無料ボイスメモ <com.leqimea.recorderAudio>
7: 优驾司机出租车 <com.szzc.tdriver>
8: 爱思助手 <com.diary.mood>
输入APP序号或者Bundle Id进行脱壳操作:Clutch -d APP序号或BundleId:Clutch -d com.liyancong.kuq, 如下:

Zipping Kumi2.app
ASLR slide: 0x100010000
Dumping <Kumi2> (arm64)
Patched cryptid (64bit segment)
Writing new checksum
DONE: /private/var/mobile/Documents/Dumped/com.liyancong.kuq-iOS8.0-(Clutch-2.0.4).ipa
Finished dumping com.liyancong.kuq in 2.4 seconds
DONE: /private/var/mobile/Documents/Dumped/com.liyancong.kuq-iOS8.0-(Clutch-2.0.4).ipa 就是脱壳结束的 ipa 文件。

7.2 dumpdecryted

下载原代码后执行make指令,得到 dumpdecryted.dylib, 然后 scp 到 iPhone 设备的 /usr/root 目录。

脱壳命令:

DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib macho.app/macho

结束后生成一个 macho.decrypted 就是脱壳后的 macho 文件。

8、Theos
能生成 tweak 项目的一个工具,代码在 这里。

通过如下命令进行 clone:

git clone –recursive https://github.com/theos/theos.git $THEOS

其中 $THEOS 是在 .bash_profie 中配置的变量:

export THEOS=~/theos
export PATH=$THEOS/bin:$PATH
配置之后,执行如下命令起效:

source ~/.bash_profile

clone 成功之后,通过 nic.pl 命令创建一个 tweak 项目。 在 nic.pl 之后选择 11 即可。

创建之后,手动到中添加这两个变量 THEOS_DEVICE_IP 与 THEOS_DEVICE_PORT,也可以将其设置成全局的。

在 Tweak.xm 中,代码编写结束之后,在终端分别执行这两条精灵即可:

make package (打包)
make install (安装)
如果有错误,修改即可。

安装之后再设备上就会有对应的 dylib 与 plist 文件。

可以参考:目录结构 、环境变量 与 Logos 语法。

9、debugserver & lldb
程序调试的一个工具,对于一个真机调试过的设备来说,都会有这个,会在*次进行联调的时候,Xcode 默认安装到设备。一般是安装在:/Developer/usr/bin/debugserver

%title插图%num

这个过程就应该在安装。

只有安装成功之后才能进行调试,一旦这个文件没有,那么真机调试的时候直接报错,报错信息如下:

%title插图%num

在越狱设备上经常出现这样的情况,无原无故的就没有了,暂时的解决方案是换一台重来没有连接过这个设备的电脑,连接安装即可。这样会重新安装 debugserver。我也不知道为什么一定要换一台电脑才能重新安装,暂时还没有找到清空的方法(可能在设置中的开发者中能清楚, 还每一试过),非要找一台新电脑。

一般要使用这个工具来进行调试的话,只能在越狱的设备上。

9.1 添加额外的权限

在 Xcode 调试的过程中是使用 /Developer/usr/bin/debugserver,如果是调试飞 Xcode 项目的时候,这个工具缺少一定的权限,所以需要单独拎出来添加其它权限后单独使用。

将 /Developer/usr/bin/debugserver 拖到电脑上,通过如下命令获取现有权限:

ldid -e debugserver > debugserver.entitlements

权限文件(debugserver.entitlements)中的内容如下:

%title插图%num

需要在添加两个权限:

get-task-allow
task_for_pid-allow

%title插图%num
添加之后再重新设置新的权限:

ldid -Sdebugserver.entitlements debugserver

这样 debugserver 就有了更多的权限,直接将其拖到设备的 /usr/bin目录下就可以使用。可能需要执行一下:chmod +x /usr/bin/debugserver。

以上的签名操作,也可以使用 codesign:

codesign -d –entitlements – debugserver
codesign -fs- –entitlements debugserver.entitlements debugserver
还有一种比较权威的方式是直接将 SpringBoard 的权限直接赋值给 debugserver。

9.2 开始使用

登录设备之后,执行这个命令:

debugserver *:port -a pid

port: 休闲的端口即可,要与 mac 连接的对应。 pid :可以是进程 ID 或者进程名称。

回到 Mac 启动 lldb,然后执行:

process connect connect://ip:port

这里的 ip 如果是 usb 登录的话就直接写 localhost,写上对应映射的 port 即可。如果使用 WIFI 的话,ip 是设备的 ip,port 是 debugserver 的那个 port。

当这个命令成功之后,会发现设备 卡死 了。这是正常的现象,在 lldb 执行一下 c 就可以了。这个指令的意思是跳过当前的断点,貌似一旦连接成功就会有一个默认的断点。

ios逆向傻瓜入门教程(一)

1.准备工作:
(1)一台越狱手机,并装有以下软件:cycript,openssh

(2)下载工具库,内容列表:

(3)在越狱手机上,从appstore上,下载WeChat(微信)。

2.ssh到手机终端
(1)打开Mac的终端窗口,运行工具库的USBSSH目录下的tcprelay.py,执行命令:

/Users/fujin/Desktop/USBSSH/tcprelay.py -t 22:2222

(2)另打开一个Mac的终端窗口,执行命令:

ssh root@127.0.0.1 -p 2222

运行后,提示输入密码:alpine(默认密码)

3.安装Theos开发工具:
(1)另开启一个Mac终端窗口,cd到Theos-Script-master目录,执行命令:

./TheosScript.sh 回车,运行效果如图,输入 1 回车:

(2)安装完毕后,在终端输入cd /opt/theos,如果有内容说明安装成功 ,如图:

4.砸壳和导出微信头文件:
(1)手机运行微信,保持在前台。找到刚才ssh成功的终端窗口,执行命令:ps -e,然后找到微信运行的进程id。

(2)追加微信进程id ,执行命令:cycript -p 5409,继续执行命令(注意保持微信在前台运行):[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0],如图

(3)按快捷键control+D,退出cycript。

(4)拷贝dumpdecrypted.dylib到微信的Documents目录下,dumpdecrypted.dylib在工具库的Crack-file-master目录下。另开启一个终端窗口,执行命令:

scp -P 2222 /Users/fujin/Desktop/逆向/Crack-file-master/crack\ file/dumpdecrypted.dylib root@127.0.0.1:/var/mobile/Containers/Data/Application/3F928AD9-8FE7-4BA0-BDD9-568F101B542F/Documents

运行后输入密码:alpine

(5)砸微信的壳,找到之前ssh手机的那个终端窗口,执行命令:

命令1 :cd /var/mobile/Containers/Data/Application/3F928AD9-8FE7-4BA0-BDD9-568F101B542F/Documents/

命令2: DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/C698FCB3-AB86-4E06-BAE2-9765AECA5998/WeChat.app/WeChat(注意:“/var/containers/Bundle/Application/C698FCB3-AB86-4E06-BAE2-9765AECA5998/WeChat.app/WeChat” 这个是之前让记下来的地址!)

(6)蒋砸壳后的文件和微信的安装app拷贝到到Mac上。操作步骤,在另一个终端窗口,执行命令:

1.首先在Mac上建立一个文件夹,名字任意。

2.在终端窗口,执行命令:

(a)scp -P 2222 root@127.0.0.1:/var/mobile/Containers/Data/Application/3F928AD9-8FE7-4BA0-BDD9-568F101B542F/Documents/WeChat.decrypted /Users/fujin/Desktop/逆向/wechat

(b)scp -r -P 2222 root@127.0.0.1:/var/containers/Bundle/Application/C698FCB3-AB86-4E06-BAE2-9765AECA5998/WeChat.app /Users/fujin/Desktop/逆向/wechat

(7)导出微信头文件:

1.继续执行命令:cd Theos-Script-master/ 到这个目录下

2.执行命令:./TheosScript.sh ,回车,输入 2 ,回车,然后新建一个文件夹(我的叫头文件),然后按终端窗口的提示拖拽文件,WeChat.decrypted和上面刚建的头文件夹,回车。

3.成功以后,会在头文件夹内有文件生成:

(8)hook微信的登陆页的某个按钮的逻辑:

1. 回到刚才ssh成功到手机的终端窗口,手机运行微信,并返回到微信的登陆页,然后终端执行命令:ps aux | grep WeChat (查看微信的进程)

2.执行命令:cycript -p 6416 (注入微信进程)

UIApp.keyWindow.recursiveDescription().toString()(查看当前页view层级)

我们可以随机的选取一个节点不要太靠树叶,也不要太靠树根,例如我选的是标红的部分,把这个节点的内存地址copy出来,这个内存地址,就代表了这个节点的view对象,ios开发的老油条们都知道,通过view的nextResponder方法,可以找出它所属的视图控制器ViewController,所以我么在cycript的控制台中持续输入如下的命令:

结果发现,登陆页是WCAccountLoginFirstViewController这个控制器。

3.在header文件夹内找到WCAccountLoginFirstViewController.h文件,发现有个函数叫- (void)onChangeLanguage;我们准备hook这个函数。现在使用Logify,它是theos的一个模块,作用就是根据头文件自动生成tweak,生成的tweak会在头文件的所有方法中注入NSLog来 打印方法的入参和出参,非常适合追踪方法的调用和数据传递。

在pc端的终端窗口执行命令:/opt/theos/bin/logify.pl /Users/fujin/Desktop/逆 向/weixin/header/WCAccountLoginFirstViewController.h >Tweak.xm,然后修改Tweak.xm内容,成下图这样(其实就是内部加了alert对话框).

4.创建theos项目:

我们进入终端,然后cd进入你要放工程的文件夹目录比如桌面上我新建好的一个文件夹“逆向”,然后执行启动 NIC(New Instance Creator)。如下:

我们可以看到iphone/tweak,所以我们输入 11 选择一个tweak工程,然后回车确定后,会让我们输入一些名字 id 等等信息,如图:

注意,要被hook的app的bundleId,也就是微信app的bundleId,可以在咱们导出来的WeChat.app的里面找到info.plist,查看bundleId。创建成功以后:

然把上一步生成的Tweak.xm和这里的Tweak.xm进行替换。

接下来修改Makefile文件内容跟下图一样:

*后打包运行,执行命令:cd 到wachatapp目录下,

export THEOS=/opt/theos,

make package install (期间会提示输入两次ssh密码:alpine)

运行以后,手机会自动重启,打开微信,进入到登陆页,点击右上角的切换语言(简体中文)按钮,会弹出alert提示框,如下图:

这个alert弹出框,就是Tweak.xm文件里写的内容!

那本章的内容就结束了,主要了解一下,大致的逆向的流程,下一篇(ios逆向傻瓜入门教程(二)),会讲一下把逆向的程序,打成ipa包,便于发布

Linux 上的 df / fdisk / parted 的 size 是怎么计算的,为什么得到的结果不一样

原谅我的强迫症,但是看着各种显示都不一样着实难受。

先放命令的 result

# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 511M 7.9M 504M 2% /boot/efi
/dev/sdb2 457G 129G 306G 30% /

# fdisk -l
/dev/sdb1 2048 1050623 1048576 512M EFI System
/dev/sdb2 1050624 976771071 975720448 465.3G Linux filesystem

# parted -l
Number Start End Size File system Name Flags
1 1049kB 538MB 537MB fat32 boot, esp
2 538MB 500GB 500GB ext4
居然三个命令得到 3 个结果 “457G/465.3G/500G”,( parted 不是很熟就没仔细验证了)

一开始我以为是进制转换问题,于是 df 用 Bytes 输出

# df -B1
Filesystem 1B-blocks Used Available Use% Mounted on
/dev/sdb2 490652508160 142457827328 323199463424 31% /
975,720,448 * 512bytes = 499,568,869,376

499,568,869,376 – 490,652,508,160 = 8,916,361,216
也就是说 df 和 fdisk 查出来的 size 相差了 8,916,361,216 bytes

怀疑是 Inode 消耗,于是查 Inode 占用

# tune2fs -l /dev/sdb2 | grep -E “Inode count|Inode size”
Inode count: 30498816
Inode size: 256
用 Inode count * Inode size 得到 30,498,816 * 256 = 7,807,696,896 bytes

算下来还差 8,916,361,216 – 7,807,696,896 = 1,108,664,320 bytes

迷惑了,还有什么地方会占用吗?

另问:为了在 df -h 获得正好 450G 的显示,我应该为他分配多少 bytes 的空间?

inode bytes dev size7 条回复 • 2021-07-13 11:17:39 +08:00
anzu 1
anzu 20 小时 39 分钟前
再看看 lsblk
generic 2
generic 20 小时 30 分钟前
文件系统除了 inode 还有其它元数据,如 journal, GDT 。
https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout
jaredyam 3
jaredyam 14 小时 59 分钟前
离得近的也可能只是 1k=1024 or 1000 的区别
gyf304 4
gyf304 10 小时 37 分钟前
有挺多原因的
1. 分区大小和文件系统占用空间不一定相同,分区 1T 文件系统可以只用前 500G 见 `man resize2fs`

“`
The resize2fs program does not manipulate the size of partitions. If you wish to enlarge a
filesystem, you must make sure you can expand the size of the underlying partition first.
This can be done using fdisk(8) by deleting the partition and recreating it with a larger
size or using lvextend(8), if you’re using the logical volume manager lvm(8). When recreat‐
ing the partition, make sure you create it with the same starting disk cylinder as before!
Otherwise, the resize operation will certainly not work, and you may lose your entire
filesystem. After running fdisk(8), run resize2fs to resize the ext2 filesystem to use all
of the space in the newly enlarged partition.
“`

2. ext4 默认有 5% 的 reserve
3. 如上面说的,各种元数据
4. 可能部分文件系统支持的 quota 也有可能影响
mingl0280 5
mingl0280 9 小时 44 分钟前
df: ext4 分区的**用户可见**容量(不包括系统占用且对用户不可见的容量)
fdisk -l: ext 类型分区的**总**容量(包括系统占用)
parted -l: 跟 fdisk 不一样的是他用的是 GB 不是 GiB
mingl0280 6
mingl0280 9 小时 39 分钟前
另外,不要指望能获得正好 df XXXG 的显示——这个算起来贼坑爹,完全是浪费时间。你非要算的话得手工算出来文件系统有多少 overhead,但是这个数值对于每个分区大小都不太一样。
libook 7
libook 3 小时 24 分钟前
看 parted 的手册,
https://www.gnu.org/software/parted/manual/parted.html
2.4.14 小结表明进率用的 1000,如果是 1024 应该用 GiB 单位(但这个貌似也没有统一)。

fdisk 、parted 看的是分区大小,df 看的是文件系统大小,分区里除了文件系统以外还需要额外的空间来存放其他必要信息,所以实际分区会比文件系统更大。

(这段可能需要求证)如果不是磁盘上*前面的分区的话,fdisk 可能会小于 parted,因为 fdisk 是比较精确的,会从分区实际开始的地方算,而 parted 可能是从前一个分区结束的地方开始算,但实际上分区只能以扇区为*小单位,如果前一个分区的结束位置在扇区中间,那么扇区剩下的部分是无法被后面的分区利用的,也就是说后面分区实际的起点是下一个扇区的开头。

所以引导分区做为*个分区,的空间计算比较明确了,512*1024*1024/1000/1000≈537 。

至于用 df 的数反推分区空间,这个可能跟各个文件系统的标准有关吧,通常没有这种需求,所以也不知道怎么算。

腾讯轻量应用服务器 ifconfig 没有公网 IP

小弟以学生优惠购入一台腾讯轻量应用服务器,目前正在学习 Linux C++开发,今天在学习 socket 编程,代码也是很简单的代码:

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <assert.h>
#include <stdio.h>
#include <string.h>

static bool stop = false;

static void handle_term(int sig)
{
stop = true;
}

int main(int argc, char *argv[])
{
signal(SIGTERM, handle_term);

if (argc <= 3)
{
printf(“usage: %s ip_address port_number backlog\n”, basename(argv[0]));
return 1;
}

const char *ip = argv[1];
int port = atoi(argv[2]);
int backlog = atoi(argv[3]);

int sock = socket(AF_INET, SOCK_STREAM, 0);
assert(sock >= 0);

struct sockaddr_in address;
bzero(&address, sizeof(address));
address.sin_family = AF_INET;
inet_pton(AF_INET, ip, &address.sin_addr);
address.sin_port = htons(port);

int ret = bind(sock, (struct sockaddr *)&address, sizeof(address));
assert(ret != -1);

ret = listen(sock, backlog);
assert(ret != -1);

while (!stop)
{
sleep(1);
}

close(sock);
return 0;
}
g++ -o main main.cpp后,终端运行./main 公网 IP 12345 5 ,然后就在bind后面 assert 退出了,bind 失败。确定代码没问题,我直接把可执行文件传到 Digitalocean 的机器上,运行程序,成功。

纳闷了,然后两台机器 ifconfig,DO 的机器出现了公网 IP,腾讯的没出现公网 IP,只有内网的 IP 和 localhost,我就在腾讯上 ./main 内网 IP 12345 5,能运行!,DO 上 telnet 腾讯的公网 IP,成功?!!!

还有这种操作?我在内网 IP 上 bind,结果给我“映射”到公网 IP 上了,这是咋做到的,为啥不让我 bind 公网的 IP 嘞

include int 公网 argv21 条回复 • 2021-07-11 23:24:09 +08:00
OysterQAQ 1
OysterQAQ 3 天前 ❤️ 1
大厂都这样 弹性 ip 随时分离添加
westoy 2
westoy 3 天前 ❤️ 1
绑定 0.0.0.0
Muninn 3
Muninn 3 天前
都这样
phithon 4
phithon 3 天前
和轻量没关系,云主机都是这个样
Tink 5
Tink 3 天前 via Android
弹性吧
dreamage 6
dreamage 3 天前 ❤️ 1
一对一 NAT
baoshuo 7
baoshuo 3 天前 via Android
好多大厂这样,一般监听 0.0.0.0 即可。
billlee 8
billlee 3 天前
云服务器的网络都是复杂的 SDN

试试 arping, 你会发现这个内网接口还有 arp 代理
no1xsyzy 9
no1xsyzy 3 天前
你想多了,你内网不 bind 直接 telnet 公网 IP 也会收到(控制台屏蔽除外)
jedihy 10
jedihy 3 天前
大厂 SDN 都是这样的。你本机没有那个 IP 所以你是不可能直接 bind 上去的。bind wildcard 或者 external nic 的 IP 都行。

mightofcode 11
mightofcode 3 天前
阿里的轻量也这样
我记得以前不是这样的
Xusually 12
Xusually 3 天前 via iPhone
直接 bind 0.0.0.0 即可
mutoudaren 13
mutoudaren 3 天前
我猜跟 docker 一个原理。你在 docker 容器里面也是只有内网 ip,但是如果在容器里面 bind 0.0.0.0 。然后 docker run 的时候指定端口绑定,也可以在外部通过访问 host 的 ip 来访问 docker 容器内部。

所以云主机本身应该也就是一个高级的”docker 容器“
opentrade 14
opentrade 3 天前
Aws EC2 里看到的也是内网 IP 和 127.0.0.1 。Vultr 的 VPS 看到的倒是公网 IP 。
julyclyde 15
julyclyde 2 天前 ❤️ 3
@mutoudaren 现在的人认识计算机都是以 docker 为标准模型了嘛
msaionyc 16
msaionyc 2 天前 ❤️ 3
@julyclyde *后一句那个“也就是”让我笑了半天
freecloud 17
freecloud 2 天前
用显示的内网 IP,试试。
Foxkeh 18
Foxkeh 2 天前
同样的阿里云现在新购买的主机只能选择专有网络,ifconfig 也是这样了。
根据阿里云官网文档解释这种更安全一些
PeacePeach 19
PeacePeach 2 天前 via iPhone
@julyclyde
@msaionyc 两位已 b
adoal 20
adoal 1 天前 via iPhone
没听说过 NAT 吗
lc7029 21
lc7029 1 天前
一对一 nat

想找个云虚拟主机,跑 PHP 环境的,求大佬推荐

有个 app 想要上架,用 php 做接口,之前用的 sae,用了有几年,一直挺稳的,但*近莫名出现账单异常,一天能跑 100 ~ 200 块大洋,找客服,基本不回,小本生意负担不起,想找个云虚拟主机,看到阿里云新用户有优惠,一年 206,1 核( Xeon 2.5G ),1G,500M 的 MySql,跑个接口应该没问题,感觉还算值,求大佬帮忙看下有没有更合适的推荐~
PHP 大佬 主机 小本生意14 条回复 • 2021-07-13 10:06:40 +08:00
imes 1
imes 2 天前 via Android
如果不怎么需要性能,优先推荐阿里或者腾讯的轻量云,一个月 24 元,1 核 CPU/1G 内存 /30G 硬盘,机房的话,香港的优势是带宽大一些,上海 /广州的优势延迟小一些。
guanyin8cnq12 2
guanyin8cnq12 2 天前
vultr
yanzhiling2001 3
yanzhiling2001 2 天前
现在我逢人就推荐用腾讯云的香港轻量 VPS,虚拟主机的搭建也不难,不然就用宝塔代劳
zhurong 4
zhurong 2 天前
ECS 共享型 n4 新用户一年是 87,如果还没注册阿里云的建议先不要注册,通过邀请注册会更优惠。v:beautwill
hazy 5
hazy 2 天前
可以考虑腾讯云轻量服务器,有个无忧计划,1 核 /2g/4Mbps 15 一个月,终身续费同价,具体可以看看 https://hosthum.com/p/tencent-lighthouse/
pytth 6
pytth 1 天前 via iPhone
阿里云虚拟主机,国内的也就四五百一年。
deszon 7
deszon 1 天前
@imes 大佬 是不是香港新加坡这种境外的无需备案啊?
deszon 8
deszon 1 天前
@hazy 这个无忧计划可以购买香港或者新加坡等境外的主机吗
imes 9
imes 1 天前 via Android
@deszon 7# 是的,服务器不在大陆就不需要备案。
deszon 10
deszon 1 天前
@imes 多谢大佬 准备冲了~

freecloud 11
freecloud 1 天前
@deszon /t/779044 无忧计划,目前没有涵盖中国香港和新加坡的轻量配置。
dameizi 12
dameizi 1 天前
腾讯云阿里云的机器都可以找我,可以提供折扣优惠返现
deszon 13
deszon 15 小时 6 分钟前
@dameizi 来个联系方式?
dameizi 14
dameizi 4 小时 34 分钟前
@deszon 1152107599

大学生选择云服务器,腾讯云?阿里云?还是华为云?

感谢
首先感谢这些企业,为我们这些贫穷的大学生提供了这么好的机会,以如此低廉的价钱享受云服务器给我们这些开发人员带来的好处。

额,至于我们学生也不能辜负了他们的好意……所以,推荐抓紧时间占便宜吧……
以后就没机会了。

阿里云
参与对象:24岁以下,都默认可以享受学生优惠,支持每个月进行续费。24岁以上者如果通过学生认证,可以继续享受学生优惠。(包括本科生,研究生,与博士)

配置:1核2G,1M带宽,40G磁盘;还有其他 学生产品。

*长续费时间:本科生则4年+(毕业时可能没有24岁),研究生与博士可以享受更长时间。

关于升学:同样可以享受优惠,操作同样简单。

特别提醒:阿里云产品学生优惠可以一个月一个月续费,所以可以考虑先买一个月玩一下。不过如果超过续费期限了未及时续费可能就不能继续享受学生优惠了。

腾讯云
参与对象:25岁以下,都默认可以享受学生优惠,支持每个月进行续费。25岁以上者如果通过学生认证,可以继续享受学生优惠。(包括本科生,研究生,与博士)

配置与价格:1核2G,1M带宽,50G磁盘;2核4G,3M带宽,50G磁盘

关于升学:读完本科后7月开始即会停止享受优惠,但是可以通过提交研究生(或者博士)学生认证,再次购买。

特别提醒:学生优惠*多续费三次,所以每次续费都应该尽可能续费久一点,*好买一年,每次续费都续费一年。

华为云
参与对象:24岁以下,都默认可以享受学生优惠,支持每个月进行续费。24岁以上者如果通过学生认证,可以继续享受学生优惠。(包括本科生,研究生,与博士)

关于升学:同样可以享受优惠,操作同样简单。

配置价格:1核1G,1M带宽,40G磁盘;2核4G,1M带宽,40G磁盘。另外还有域名等优惠产品也可以关注一下。

特别提醒:学生优惠中每个产品限购一次,*多续费三次,所以*好每次购买都买一年比较好。

Q & A
有一些小伙伴私聊我问了一些问题,这里总结一下吧。

1. 选择什么样的服务器操作系统?
这个问题特别值得讨论,因为不同的操作系统或多或少都有它的好处,都需要根据自己个人习惯选择。

首先值得讨论的是,是否选择windows操作系统?
大家对 windows 都相对熟悉,可视化界面确实方便——但是相对于指令而言,在管理服务器方面太弱了。
尽管windows服务器是一个可选项,但是仍然强烈推荐初学者学习一下linux 指令,使用指令管理服务器更加方便而且 “看起来厉害”。

其次 linux 操作系统中,选择哪款合适?
linux 下的*大多数指令是差不多的,但是也有一些差异,需要根据个人习惯选择。但是不能使用可视化界面,服务器是用来用的,不是用来看的。当学会几行指令后,服务器就非常听话了。
如果*近在看一个相关的视频教程,了解老师使用的是什么操作系统,*好和老师保持一致。以避免更多的麻烦。
特别值得强调的是,*新的不一定是*好的;朋友喜欢的不一定是自己习惯的。
常用的linux操作系统有:CentOS,Ubuntu,Debian 等等。
个人推荐使用 CentOS 或 Ubuntu,推荐理由是相关资料比较多,容易查到。

2. 重装系统麻烦吗?
特别简单,浏览器登录官网,然后鼠标点击记下就好了,一般可能需要等等几分钟时间。不管是 腾讯云 、阿里云 或 华为云 都非常方便。

3. 对于没有可视化界面充满恐惧,怎么办?
“解决恐惧的*好办法就是面对它” !
很多资源可以学习 linux 常用指令,有视频有网站,自己在B站上一查,肯定可以找到自己喜欢的。记得要多动手练练。

4. 选择怎么样的 SSH 软件比较方便?
推荐使用 xshell 与 xftp ,*好去官网下载*新版本的,记得选择免费版。具体地址为:https://www.netsarang.com/zh/free-for-home-school/
需要填写姓名和邮箱,下载内容选择 “两者都”,选择”下载”后到自己的邮箱可以看到下载地址。

不建议去其他地方下载什么免费破解版的,官网提供的就是免费的,基本功能已经够使用的了。官网的才是*权威可靠的。

5. 为什么要购买云服务器?家里电脑配置明明高很多很多倍
这个问题一直很值得讨论,确实自己购买的云服务器配置特别低,比如 1核2G 40G磁盘,可能家里十几年前的电脑配置都比这个高。

云服务器相对于个人电脑而言,它部署在云端,管理更加方便,可以让更多人访问,可以根据自己的个性化需求设计界面,可以做一些好玩的事情,当然,操作难度也高一些,所以显得高端。

对于初学者而言,目的很简答,就是为了玩和学习,这就够了。

6. 那为什么不使用 VMWare 可以同样玩?
VMWare 非常值得玩一下,我觉得如果担心自己乱花钱的话,*好先玩一下VMWare ,安装linux操作系统(不使用可视化界面),然后熟悉linux命令等等。

其实也可以直接上手云服务器,VMWare *大的好处在于如果需要部署很复杂的应用的话,可以通过拍快照的方式记录配置部署过程,如果后面出现问题可以切换回来。但对于初学者而言,云服务器可能更加直观方便。

7. 技术问题
类似于 linux 操作系统下 java 环境配置等等,随便一查成千上万的答案都是不错的,自己把以前的一些问题总结了一下发布在自己的云服务器中,具体地址为:https://smileyan.cn/#/cloud/switch_cloud。这个栏目中有很多其他问题收集与解决,如果有更多问题请留言提出。

更多问题
还记得当初大一的时候购买云服务器,那个时候还不懂什么是公网IP,不知道什么叫域名解析,但是当启动 tomcat 后,通过公网IP访问了自己的网站,也就是 tomcat 那个官网,看到网站上那只猫的时候是无比兴奋的。

后来把主页改成一个任何样式的 html,上面就写着 “这是xxx的网站” ,很丑,很蠢,但是特别开心,因为那个时候想,这个是自己拥有的唯一的公网IP,全球的人都能看到自己的这么丑的这么蠢的网站了,哈哈哈哈哈哈哈。

可能很难描述大一的时候自己的心情,但是那个时候同样遇到了很多问题,比如说云服务器的安全组问题,比如说云服务器的系统镜像选择问题等等。

所以这里特地补充一下,如果伙伴们遇到了什么问题,都可以在下面评论留言,一定回复一起解决问题。

推荐玩一下云服务器,趁自己还是学生的时候撸一下*后的羊毛(现实很残酷+昂贵)。

总结
到底应该购买哪种呢?我认为是都买。都购买了,三台云服务一起玩不是更加过瘾吗?可以搭建一些集群环境等等。*主要的是,真的便宜,参加工作了就知道这种优惠再也遇不上了。
谢谢阿里云,腾讯云,华为云的学生优惠套餐。

如果你自认熟悉 async…await,来猜一下这个代码的运行结果

姐妹篇
如果你自认熟悉 Promise,来猜一下这个代码的运行结果

要用猜的,别偷偷用浏览器运行

const Err = async () => {
throw new Error(42);
};

const Obj = {
async A (){
try {
return Err();
} catch {
console.log(‘A’);
}
},
async B (){
try {
await Err();
} catch {
console.log(‘B’);
}
},
async C (){
try {
Err();
} catch {
console.log(‘C’);
}
},
};

( async () => {
for( const key in Obj )
{
try {
await Obj[key]();
} catch {
console.log(‘D’);
}
}
} )();
Async err console log9 条回复 • 2021-07-13 14:26:35 +08:00
meeop 1
meeop 27 分钟前 ❤️ 2
既然还要猜,说明代码不清晰,可读性差,重写吧
binux 2
binux 24 分钟前 via Android
DBD
Zeffon 3
Zeffon 21 分钟前
DB 吧
mxT52CRuqR6o5 4
mxT52CRuqR6o5 18 分钟前
想了一遍是 DB,运行一遍确实是 DB,不难啊
binux 5
binux 17 分钟前 via Android
@mxT52CRuqR6o5 哦,B 没 rethrow,大意了
mxT52CRuqR6o5 6
mxT52CRuqR6o5 15 分钟前
这个异常处理弄明白就行了,那个姐妹篇弄不明白也没关系
ayase252 7
ayase252 13 分钟前
D
B
unhandled promise rejection
Jirajine 8
Jirajine 8 分钟前 via Android
这就是为什么使用异常进行错误处理很糟糕,会把控制流搞得混乱。
如果所有错误都用 Promise<value|error>的形式返回,一眼就能看出来。
ericgui 9
ericgui 7 分钟前
这算是茴字的几种写法嘛

我来对比一下阿里云和华为云的优势

一句话说这两家哪家好,还真说不清楚,根据自己对服务器需求和着重点,还是要细心选择一下的。
阿里云计算的优势
阿里云计算是将一些可以自我维护和管理的虚拟计算资源整合在飞天集群中,包括计算服务器、存储服务器和宽带资源等,并通过自动化运维方式实现任务调度、自动管理、无人介入生产等。用户可以动态申请部分资源以支持各种应用程序的运转,省去了购买网络设备和服务器、租用机柜等烦恼,从而集中精力开拓业务,有利于提高效率、降低成本和技术创新。 阿里云计算对比传统自建 IT基础设施和托管有如下优势:
一. 超大的集群规模。阿里云计算集群具有能够适应海量计算的服务器规模,*大的集群服务器数量达到 5000台,并可以提供多集群的计算资源,能够为用户提供前所未有的计算能力。
二. 强大的弹性扩展能力。阿里云支持客户业务动态伸缩,满足应用和用户规模增长的需要。业务增长时计算、存储资源随之增长,反之则随之下降,让资源使用效率*大化。
三. 按需服务。阿里云是一个庞大的资源池,用户购买计算、数据、存储资源可以按需购买,如同使用自来水、电和煤气那样按量计费,不会造成计算资源的闲置和浪费。
四. 成本低廉。阿里云的计算架构和特殊容错措施使其可以采用*其廉价的节点来构成云。阿里云的自动化管理使数据中心管理成本大幅降低。阿里云的公用性和通用性使资源的利用率大幅提升。依托阿里巴巴海量、优质的数据中心和网络带宽资源,阿里云可以为客户提供*高性价比和*低总体拥有成本的计算服务。
五. 安全稳定。阿里云主机、数据库等产品采用了阿里云分布式技术,在数据方面对每一份数据分散存储同时保留三份或三份以上镜像,大幅降低数据丢失的可能性。在服务器资源方面,一台云服务器宕机会在 20 分钟内迁移到其他物理服务器启动起来,从而保证系统的可用性。并且提供给用户两地三中心的基础设施来部署有更高可用性和连续性要求的业务系统。
下边顺带罗列出目前阿里云活动产品,有服务器、建站、等相关产品.给有需求的朋友能节约一些资源和使用成本。
%title插图%num

华为云的优势:
一.全栈技术优势与持续投入:华为对技术持续巨资战略投入,华为全球有15个研发中心,36个联合创新中心,在170个国家有20多个运营中心,有18万员工,6万合作伙伴,900个办公地点,每天发200万+邮件,5万+会议,其中和第三方会议超过400次,华为的软硬件技术在全球范围来说是*全面**的,包括网络、服务器、芯片、虚拟化、私有云/公有云/混合云、物联网、大数据、人工智能等其他各种平台、软件、和解决方案。华为的服务器性能全球*,AI芯片全球首发,很多产品设备性能和出货量都是居全球前列。
二. 能力开放:华为把自身积累的30年技术能力全面开放出来,如开放:软件开发云,大数据,物联网,人工智能等技术。
三. 安全可靠:软硬件一体化的安全(如硬件安全加固,芯片定制化安全保护,企业级的WAF防火墙与百万级的并发实时监测与防护);面向全球安全合规(已获得20多项认证,包括欧美国家*苛刻的安全认证要求);企业级安全服务(120款安全产品与服务,DDoS高仿能做到1T+的防护能力,顶级的云数据库防火墙);华为上不做应用,下不碰数据。
四. 灵活的服务模式:混合云模式(私有云/公有云/专属云);
五. 全球一张云网,就近服务:全球一张云网,服务通达全球,全球所有的云统一架构,全球分布的节点与网络,使能企业全球化;
六. 本地化服务:全球170国家线下本地化服务团队,可以提供从咨询、实施与运维运营等端到端全流程本地化服务。
七. 开放互通**,不锁定客户**:私有云公有云统一架构,统一API,一致体验,华为是开放的云,中立的云,支持客户业务云间迁移,不锁定客户,从底层、平台和工具三层全面能力开放,构建生态基础。
八. 丰富生态、共享共赢:华为只做“链接+平台”这些基础设施,华为上不做应用,下不碰数据,应用和解决方案让合作伙伴来提供,华为只做合作伙伴和客户的黑土地,为合作伙伴和客户的商业成功提供费力。

工作中经常打开浏览器 50+个 Tab,这个坏习惯该怎么改?

打开了这么多的 Tab 忘记关, 也忘记打开的 tab 在哪里, 然后找不到后就又再重新打开个 tab ?

tab 打开 忘记 浏览器154 条回复 • 2021-07-13 14:34:52 +08:00
1 2
2
❮ ❯
wd 101
wd 8 小时 34 分钟前 via iPhone
一般打开 tab 会基于什么需求,如果需求解决了就立刻关闭了,后面再需要的话在历史里面找。如果这个需求持续好几天不能解决,那会把这个需求相关 tab 的 url 记录到笔记里面然后都关掉
whywaoxaks 102
whywaoxaks 8 小时 10 分钟前 ❤️ 3
才 50 个 tab,说明你要升级配置了。
日常几百个,不是很正常嘛。
wd 103
wd 8 小时 2 分钟前 via iPhone
@mywaiting 这个可以只保存部分 tab 么?
swsh007 104
swsh007 7 小时 32 分钟前 via Android
开 1k 也没关系
不过是考验一下电脑配置
效率这东西个人理解不同
个人习惯不同
适合自己才是重要的
chiu 105
chiu 6 小时 59 分钟前 ❤️ 2
>> 也忘记打开的 tab 在哪里
Cmd+Shift+A or Shift+T: 全 Open tab 搜索 tab 或 tab 内容,关键词就可以找到你要的 tab
oscargong 106
oscargong 6 小时 58 分钟前 ❤️ 1
@BeautifulSoap Edge Vertical Tab 也是支持 group 的,要在 Flags 里开开。
![CleanShot 2021-07-12 at 16.36.08@2x.png]( https://i.loli.net/2021/07/13/KirzIdc5DZ4uajG.png)
jzphx 107
jzphx 6 小时 56 分钟前
算是拖延症,开了总感觉没看完,回头还会看。实际上攒到下班关闭全部标签
yogogo 108
yogogo 6 小时 48 分钟前
我每天都是开三个浏览器窗口,一个摸鱼,一个外快,一个公司的,加起来也差不多有 60 几个页面
mbooyn 109
mbooyn 6 小时 33 分钟前
加一档内存
xcv58 110
xcv58 6 小时 28 分钟前
可以试试我写的这个扩展: https://github.com/xcv58/Tab-Manager-v2#download-links

wowbaby 111
wowbaby 5 小时 58 分钟前 ❤️ 1
@efcndi 16G, 平常只开 ABP 和 set character encoding,其它扩展使用再开启,用完关闭
weeshin 112
weeshin 5 小时 57 分钟前
试试浏览器插件“OneTab”,真神器
https://chrome.google.com/webstore/detail/onetab/chphlpgkkbolifaimnlloiipkdnihall
ddzy 113
ddzy 5 小时 55 分钟前
https://oos.yyge.top/others%2Fplay%2F1.jpg
我一般通过 edge 的集锦功能,把不同项目的标签页分好组,然后用不同的窗口打开
包括 vsc 也是,一个项目对应一个 vsc 和一个浏览器窗口
pythonee 114
pythonee 5 小时 40 分钟前
长期 100 以上
shellic 115
shellic 5 小时 37 分钟前
不用改,加大内存这就不是一个坏习惯了
xin053 116
xin053 5 小时 35 分钟前
装个插件 workona ,然后标签页做好分类
skys215 117
skys215 5 小时 32 分钟前
@butanediol2d 就是这样,找不到标签了就会再开一个,结果越开越多
skys215 118
skys215 5 小时 31 分钟前
@Death 500 个 tab 是怎么数的
Dogtler 119
Dogtler 5 小时 29 分钟前
即视感很强,一般都是找资料忘了关 tab 导致。
fulvaz 120
fulvaz 5 小时 29 分钟前
Quick Tab

你需要这个
windyCity1 121
windyCity1 5 小时 27 分钟前
chrome 有 标签页 搜索功能,这不是坏习惯不用改
CodeCodeStudy 122
CodeCodeStudy 5 小时 26 分钟前
用 chrome 创建不同个人资料啊,也就是不同的 profile,我工作电脑至少要有三个,一个是开发环境,一个是测试环境,一个是线上环境,桌面上会生成快捷方式,这样就不至于混淆,而且不显得标签页很多
intLee 123
intLee 5 小时 5 分钟前
@jzphx 真实
psklf 124
psklf 5 小时 3 分钟前
不算坏习惯,我 firefox 多行标签页用户你想想都知道标签页不会少
seakingii 125
seakingii 4 小时 58 分钟前
用没有 tab 的浏览器.如果没有,自己开发一个
HolmLoh 126
HolmLoh 4 小时 49 分钟前

是我了
efcndi 127
efcndi 4 小时 47 分钟前
@shonnliberty #51 有装插件管理的插件。我总共有将近 60 来个插件,一般根据使用场景不同,大概开着的就十多个吧。但是还是感觉不是太方便,一个是需要不断去切换或开 /关插件,增加了不少负担,当然,相对不用这类管理工具来说是省事一些;另一个是感觉即便是没有启用某个插件,只要装上,仍然比不装会占用内存多一些。我现在就才 4 个 tab 吧( 2 个 v2 页面+2 个微信公众号页面),占用内存已经超过 1.8GB 了。

@muzuiget #61 权限要到哪里看啊?管理页面的 Permissions 下面好像也看到你说的这类权限。
a937325763 128
a937325763 4 小时 36 分钟前
*多十个就受不了,我还想着进来看看五十个是怎么样的,结果卧槽是我见识浅了,大佬们都是三位数起步的吗?!虽然我的是 64G 但是也不敢拉满那么多,下次试试。(反向影响习惯)
wudicgi 129
wudicgi 4 小时 25 分钟前
我用老版本 Firefox 时,经常开到 200 多个 tab, 挺方便的

但新版的多行 tab 体验很不好,也没 Tab Mix Plus 这样的重量级插件了,现在就只能少开 tab, 偶尔多开个窗口缓解一下
hanssx 130
hanssx 4 小时 21 分钟前
chrome 可以合并成 group (群组),tab 多了电脑容易卡啊。
crystone 131
crystone 4 小时 15 分钟前
内存够大,显示器够大,应该就无所谓了
nmecury 132
nmecury 4 小时 11 分钟前
100+tab 路过……推荐 The Marvellous Suspender,真的好用
vexjoe 133
vexjoe 4 小时 6 分钟前
@mywaiting 想试一下,但是 firefox 里面搜不到这个了
Death 134
Death 4 小时 2 分钟前
@skys215
我在用 tabs outliner,它上面有显示
amwyyyy 135
amwyyyy 3 小时 59 分钟前
作为长期使用 8G 内存的我,标签页一般在 10 个以内
wolfie 136
wolfie 3 小时 53 分钟前 ❤️ 1
control + shift + A 可以搜索
50 个 还好吧
TouchEvent14 137
TouchEvent14 3 小时 48 分钟前
尝试一下把内存条换成 2G 的,卡到让你主动去关闭
mudssky 138
mudssky 3 小时 43 分钟前
不用改,记得把没用的 tab 关掉就行,一般只有 5 个以内的 tab 是真的有用的.
可以装一个 Vimium 插件,T 键可以搜索你打开的 tab
dfkjgklfdjg 139
dfkjgklfdjg 3 小时 42 分钟前
常年使用 win 自带的多桌面没啥感觉,一般一个桌面一个项目,打开相关网页也就 20 个左右,看完也就关了。

@wolfie #136,这个 Trick 学到了,送上红心?
cw2k13as 140
cw2k13as 3 小时 27 分钟前
做好分类吧,工作 /查资料一个窗口,摸鱼休闲一个窗口,用完就关闭 tab,长时间使用的就固定,不知道啥时候要用的放到阅读清单,并做好书签分类
muzuiget 141
muzuiget 3 小时 14 分钟前 ❤️ 1
@efcndi 扩展的权限声明在 manifest.json 里,这个文件可以通过 chrome-extension://<扩展 ID>/manifest.json 查看。
BeautifulSoap 142
BeautifulSoap 3 小时 12 分钟前
@oscargong edge 的垂直标签空间利用率有点低,一个竖屏下能容纳下的同层级标签较少,而且那个只是分组只有一个层级,而树状标签是需要有有多个层级的。经常查资料开标签分不同层级是很常见的
libook 143
libook 3 小时 10 分钟前
如果内存够用的话也没啥问题吧。

感觉可能痛点在于打开重复的页面?
可以试试一些自动关闭重复页面的扩展,比如 Chrome 下的 Unique Tabs 或者 Firefox 下的 Duplicate Tabs Closer 。
GPU 144
GPU 2 小时 59 分钟前
@chiu #105 edge 两个快捷键按了都没反应
black0144 145
black0144 2 小时 50 分钟前
我用的 Chrome 自带的分组功能,不看的类别先折叠起来就行。
young1lin 146
young1lin 2 小时 32 分钟前
Toby Mini
Gorgine 147
Gorgine 2 小时 31 分钟前
The Great Suspender 你值得拥有
Gorgine 148
Gorgine 2 小时 30 分钟前
可以开启 tab 预览功能:chrome://flags/
Gorgine 149
Gorgine 2 小时 30 分钟前
可以开启 tab 预览功能:chrome://flags/ 搜索 tab hover 然后 enable
efcndi 150
efcndi 2 小时 15 分钟前
@muzuiget 对普通人来说还真是不容易啊。要是有人开发个快捷查看权限的扩展就好了。
caoyouming 151
caoyouming 1 小时 18 分钟前
chrome 不是有群组功能么,同类型的收藏进去群组
sagowave2 152
sagowave2 16 分钟前
170+tab 目前感觉良好
bomb77 153
bomb77 5 分钟前
找不到了就再打开一个新的 +1
RexG 154
RexG 1 分钟前
@jzphx 然后上班开机 ctrl+T,哈哈