置顶文章

3.6k 3 分钟

日常的 APP 为了不被别人通过抓包软件抓取与服务器通信的流量,所以会在流量的安全传输上做文章,最安全的做法当然是使用私有协议 (即协议格式不公开的协议), 例如抖音的 quic 协议,咸鱼的 spdy 协议等等,利用这些私有协议包装流量,从而使抓包工具无法识别出这串流量的实际内容是什么,所以就只能放行这段流量,面对私有协议倘若利用 reqable , fiddler , charles 等去抓包是抓不到的,而唯一能够抓到这段流量的就是 wireshark , 并且还需要对这段流量编写特定的脚本解析才可以知道这段流量所携带的实际数据 除了私有协议之外,想让流量上的安全还可以使用 SSL...
5k 5 分钟

ollvm 算是日常逆向的过程中的一个难点,试想一下当你把程序拖进 ida 后那无穷无尽的 block 出现在面前的感受,这滋味一言难尽呐… 所以很有必要对 ollvm 的混淆与反混淆进行系统的学习,以便在未来实际生活中遇到时,不必慌忙的去 google 寻找答案. # 预备知识 llvm 是一个完整的编译器架构,作用可以理解为制作一个编译器,llvm 先将源码生成为与目标机器无关的 LLVM IR 代码,然后把 LLVMIR 代码先优化,再向目标机器的汇编语言而努力。经典编译器都可以分为前端、中层优化和后端: 从上图中可以看到 clang...

文章列表

49k 44 分钟

# 前言 在去年 9 月的时候,我就想研究一下 apk 的加固,在网上逛了一圈,感觉 360 加固不错,所以先选它啦,写了一个测试 apk 丢到 360 加固里面加固了一下 这里我用的是 360 加固的免费版 (因为付费版太贵啦) 本来计划着去年分析完 360 加固的,但是总是抽不出一段完整的时间来所以就拖到了现在,终于最近因为过年赋闲在家,就花了几天分析了一下 360 加固,感觉这几天探索 360 加固的过程真是充满了惊喜和乐趣呢~ 360 加固测试 apk: 下载地址 未加固的原版 apk: 下载地址 # java 层初步分析 包名: com.oacia.apk_protect 入口:...
34k 31 分钟

在 Android 中使用 System.load 加载一个 so 时,是通过 ElfReader 去解析这个 so 的重要结构及属性的,本文将对 ELF 的结构,链接过程,装载过程进行分析,并研究 ELF 在 AOSP 中的解析过程 # ELF 结构简析 ELF 文件主要分为 3 个部分: ELF Header 描述整个文件的组织 Program Header Table 包含了运行时加载程序所需要的信息 Section Header Table 包含了链接时所需要用到的信息 # ELF...
81k 1:14

对于某些加固壳,加载解释器 elf 的方式不会是常规的 System.loadLibrary , 而是仿照 System.loadLibrary 在 AOSP 中的实现方式,在 JNI 中自己实现 so 的加载 本次所使用到的 AOSP 的源码的安卓版本为 android-12.0.0_r34 # so 的启动过程 # System.load 在 Android 中我们想要加载一个 so 时,可以有两种方式 静态加载 System.loadLibrary("native");这种加载方式下,要加载的 so 一般已经内置在 apk 的 lib/[arch]/...
1.7k 2 分钟

今天闲来无事,上网冲浪,突然发现一个令我眼前一亮的项目 WeChatOpenDevTools-Python, 这这这,看 README 的介绍,我岂不是可以在小程序里面开 devtool 了吗!? 想来 2022 年也有个小程序羊了个羊爆火那会儿,我也对小程序逆向分析玩了玩,然后做了个破解版的自娱自乐了一下 (当然也是算朋友圈排名滴), 当时拿 UnpackMiniApp.exe 解密了 wxapkg 格式的小程序,然后用 wxappUnpacker 弄出了小程序的 js 源码来,审计一下找到修改的地方 patch 逻辑到最开始的 wxapkg...
5.1k 5 分钟

# 前言 为什么突然想要去做一个 telegram bot 了呢? 这就要说到困扰我很久的一个小问题了,我在刷抖音的过程中,看到有意思的视频或者好看的图片,就很想要把它们给保存下来,作为壁纸或者和别人分享,但是有的时候 保存本地 这个选项是灰色的不让我去保存 而且抖音在图片保存的过程中总是会打上水印,就像下面这个样子,倘若用作壁纸或者日常打开来看的时候就感觉十分的…...
2.2k 2 分钟

今天刚在 namesilo 购买了一个新的域名 oacia.dev , 要是有人来过我的博客的话,应该记得这个博客曾经的域名是 oacia.cc , 当然了我也非常喜欢 cc 这个顶级域名,这个域名是我一年前注册的,不过不幸的是在今年九月份的时候,我的域名过期了,当时我看到 75 块的续费价格还纳闷为什么变贵了,因为去年的时候我记得非常清楚续费只需要三十多元的,随后就看到了阿里云的公告说 cc 域名要涨价了… 唉太难受了,随后我就去腾讯云和华为云都去搜了一下 cc 这个顶级域名的价格,随后惊讶的发现华为云只需要 35 元 /...
1.5k 1 分钟

最近想给自己的博客多增加些好看的图片当背景图,正好这段时间刷抖音看到了好多好看的图片,也把他们保存在收藏夹里面,但是正当我兴致勃勃的想把我收藏夹里面的图片下载下来时,发现工作量真的真的好大!所以索性就写个小脚本来让生活更加轻松咯~ 首先我们打开网页版抖音,来到收藏夹,然后疯狂向下拉直到收藏夹的底部 然后在网页上 右键->另存为... 把这个 html 保存为 mhtml 格式 接下来写个简单的小爬虫,抖音里面收藏的图片就下载到电脑上啦~ import reimport requestsimport osfrom tqdm import tqdmheader =...
6.6k 6 分钟

很喜欢日奈的声音,所以用自己的电脑训练了 hina 的声音模型,并让她唱了一首歌 # python 虚拟环境搭建 这里我使用的 Python 版本为 Python3.9 安装 virtualenv pip install virtualenvpip install virtualenvwrapper # 这是对 virtualenv 的封装版本,一定要在 virtualenv 后安装创建虚拟环境 这里我创建了名为 hina 的虚拟环境 PS E:\virtualenvs> virtualenv hina进入虚拟环境 命令行前面有 (hina) 说明我们已经进入了这个虚拟环境 PS...
2.8k 3 分钟

# 前言 算了一下好长时间没打过 CTF 了,前两天看到 ACTF 逆向有道 flutter 逆向题就过来玩玩啦,花了一个下午做完了。说来也巧,我给 DASCTF 十月赛出的逆向题其中一道也是 flutter, 不过那题我难度降的相当之低啦,不知道有多少人做出来了呢~ # 还原函数名 flutter 逆向的一大难点就是不知道 libapp.so 的函数名,虽然有工具 reflutter 可以帮助我们得到其中的符号,但是我个人认为基于对 libflutter.so 源码插桩后重编译再重打包 apk 的方式具有极大的不可预料性,极有可能导致 apk...
21k 19 分钟

# 下载地址 https://github.com/zhkl0228/unidbg 源码下载完成后使用 IDEA 打开即可使用 # 快速使用 套用以下模板,将包名等参数替换成对应的字符串即可快速使用 unidbg package com.oacia;import com.github.unidbg.AndroidEmulator;import com.github.unidbg.Module;import com.github.unidbg.arm.backend.Unicorn2Factory;import...
9.9k 9 分钟

去年 CBCTF 的时候,我当时为这个比赛出了一道逆向题叫做 CBNET , 可是直到结束之后才终于有了一解,我那时非常自责,感觉自己把题目出难了导致大家都做不出来,那次比赛结束之后几个师傅找我问这题,我发现原来是我自己设计的自定义算法难住了大家,大家不会写逆向脚本导致的。所以今年的 CBCTF, 我总结了去年出题的经验,给自己今年出题定的目标的就是希望每一个人都可以去尝试着去做一下,并且不在算法的层面去为难大家. auuuu3 的出题灵感主要在上半年看到过一篇文章,说是有 hacker 在压缩包里藏了一个无毒的 autoit exe 解释器,然后这个解释器运行恶意的 au3...
9.3k 8 分钟

# lowmemorykiller 概述 Android 的设计理念之一,便是应用程序退出,但进程还会继续存在系统以便再次启动时提高响应时间。这样的设计会带来一个问题,每个进程都有自己独立的内存地址空间,随着应用打开数量的增多,系统已使用的内存越来越大,就很有可能导致系统内存不足,那么需要一个能管理所有进程,根据一定策略来释放进程的策略,这便有了 lmk ,全称为 LowMemoryKiller (低内存杀手),它使用 lmkd 来决定什么时机杀掉什么进程. Android 基于 Linux 的系统,其实 Linux 有类似的内存管理策略 ——OOM killer (Out Of Memory...
49k 45 分钟

Binder 是 Android 独有的一种通信机制, Activity , Service , Broadcast , ContentProvider 这四大组件所涉及的多进程间的通信底层都是依赖于 Binder IPC 机制。学好底层的通信原理对掌握安卓这幢大厦有着重要的意义. # 说明 本文所研究的安卓内核版本为 Linux version 4.9.270-g862f51bac900-ab7613625 安卓框架版本为 android12-platform-release # Binder 简介 从进程角度来看 IPC (Inter Process Communication)...
13k 12 分钟

# 安卓系统源码下载 想要下载安卓系统全部的源码,请必须预留 150G-200G 的空间,并保持 VPN 连接稳定,否则将导致下载失败并从头下载! # 查看 android 版本 进入代号,标记和 build 号来查看安卓系统的版本 如果是预装的系统,那么 kernel 版本和系统版本是有对应关系的,例如我给 pixel3 刷入的系统为 blueline-sp1a.210812.016.c2-factory-fa981d87 , 那么在上面提到的网址内找到该安卓系统该 build ID 所对应的安卓系统版本 android-12.0.0_r34 如图所示 #...
3.8k 3 分钟

这两天和 360 加固抗衡了很久,突然发现自己现在的水平或许还无法搞定 360 加固,晚上睡觉的时候思考了一下,发现原因在于自己对于安卓还没有掌握,甚至连熟悉都算不上。以往学逆向的过程中总流传着一句话:要想逆向做的好,正向必须得精通。我现在连安卓里面有什么都不知道,那还怎么去搞安卓逆向呢?所以这两个月,我要静下心来,好好学习安卓的架构基本组件和基本的机制,把正向的基础打扎实! 我准备用自底向上的方法来学习安卓系统,从内核开始学起,因为上层的许多模块都是基于下层的,倘若直接从上层开始学起,那肯定会遇到许多下层的模块导致一时之间摸不着头脑. #...
6.1k 6 分钟

在安卓中可以动态加载 dex 来进行类的调用,而对于市面上常见的 dex 加固来说,也同样采取了加密 dex, 并且在解密之后动态调用的方式来进行 dex 的保护,所以我觉得我有必要去学习一下 dex 的动态加载过程,从而对 apk 的加固有更加深刻的了解和体会. # Android studio 生成 dex 既然我们想要让我们的程序动态加载 dex, 那么我们肯定需要先生成一个 dex 才可以咯 首先我们点击 File->New->New Module 新建一个 Module 选中此处的 Android Library , 来创建一个...
20k 18 分钟

在日常的安卓逆向中,可能会遇到代码在 libxxx.so 中的情况,而这种在 so 中的代码的编写就涉及到了安卓的 JNI (Java Native Interface) 开发,俗话说要想会逆向,那么首先得要学会正向,假如都没见过某种语法,那还怎么逆向下去嘞?所以就玩玩 JNI 咯~ # 在 Android studio 中开发 JNI 首先我们需要创建一个 jni 文件夹,我们只需要右键 app, 然后点击 New->Folder->JNI Folder 就可以创建了 接下来从 Android 布局转到 Project 布局,就可以看到新创建的 jni...
1.6k 1 分钟

最近想要研究一下安卓 APP 的抓包,正巧听说 flutter 应用非常难抓包,了解了一下应该是 flutter 应用不走代理的原因,而恰巧咸鱼 APP 就是用 flutter 写的,我寻思要是我连这么难抓包的 APP 都会抓了,那么未来去抓其他 APP 的包岂不是信手拈来~ # 环境搭建 # fiddler 4.0.1 破解版已经失效,勿用!此处仅作记录 下载地址,需要断网安装! # 破解流程 首先下载需要替换的组件, 下载地址 之后打开 fiddler4.0.1, 连接网络后,注册登录账号,然后点击十天免费使用 随后,我们替换掉下列路径的文件 Fiddler...
8k 7 分钟

以往学习过 Windows 中的 TCP/UDP socket 通信,但是当我研究安卓中的 tcp 通信时,发现 C 语言通信的语法截然不同,然后才发现安卓系统上是 Linux 操作系统,所以也有必要去好好学习 Linux 系统中的 tcp/udp 通信 # socket API 接口 # socket 创建一个 socket 套接字 #include <sys/types.h>#include <sys/socket.h>/*@param domain: 通信协议簇@param type: 指定 socket 类型@param protocol:...
64k 59 分钟

# 前言 在今年三月份的时候,我参加了腾讯游戏安全技术竞赛,到现在差不多快过去半年了,当时做这道安卓初赛题目时,也是卡在开头就毫无头绪了,而后看到看雪上的三位大佬 |_|sher 师傅,juice4fun 师傅和 fallw1nd...
24k 22 分钟

IDApython 在日常逆向的过程中是十分重要的存在,过去零零散散的接触过一些 idapython, 但是我觉得还是有必要去系统的整理一下相关的函数,以便未来倘若忘记了可以快速通过这篇笔记回忆起来 # 官方文档 IDA Help: Alphabetical list of IDC functions IDAPython documentation # IDApython 编写环境 PyCharm 2021.2.3 社区版 IDA7.7 python3.8 由于 IDA 自带的 IDE 没有代码补全十分的难用,所以我准备在 PyCharm 中编写 IDApython 代码 在...
13k 11 分钟

为了做出腾讯游戏安全竞赛初赛的这道安卓题,开始学习 rwProcMem33 的使用来打硬件断点了 在 juice4fun 师傅做腾讯游戏安全竞赛初赛的安卓题的 writeup 时,使用了 rwProcMem33 来对安卓手机打下硬件断点分析反调试,我也对在安卓手机中打硬件断点的工具很感兴趣,所以就学习一下编译和使用的方法啦 要想使用 rwProcMem33, 编译环境 (即 AOSP 安卓内核源码环境) 的搭建过程是必不可少的,因为最终内核模块是运行在安卓手机的 linux 内核中,而非虚拟机的 linux...
1.5k 1 分钟

今年上半年把我的老平板 SM-P200 root 了,不过用着用着就发现这平板的 USB 竟然接触不良!每过一段时间 usb 就会断开连接… az, 这对于我来说问题可是致命的,谁能忍受研究的好好的突然手机就失联了嘞 于是我在咸鱼淘了一台二手 pixel3, 至于为什么是 pixel3, 问就是谷歌亲儿子~ 看了眼手机已经刷成安卓 10 了,卖家也说解了 BL 锁,不过唯一美中不足的就是安卓 10 没 root, 那就只能亲自 root 咯~ 想了想安卓 10 安证书有点麻烦,索性就刷成安卓 9 好了哈哈 # 准备工作 在进行刷机前,请确保已经提前准备以下内容...
52k 47 分钟

前两天刚打完的 starctf, 可真是坐牢呀,比赛期间出了三题,赛后终于又弄出来了一题. GoGpt 就是常规的 go 语言逆向,看题目描述,题目是 chatGPT 出的,哈哈 AI 竟然也能出题了,不过终究还是简单题呀~ flagfile 这题有点意思,用了 linux 中的 file -m 命令可以自定义 magic file 的特点,来检测一个文件的每一个字节是否符合魔数文件中的规则的匹配,来判断是否为正确的 flag, 做完这题之后猛然发现,原来有规则的地方就有逆向! ez_code 用到了 powershell 特殊符号混淆,多亏看雪上的一篇文章,看到下面的一条评论...
4.4k 4 分钟

在日常的逆向过程中,我常常会因为各种数值形式上的转换而相当纠结,比如大端,小端,字节转字符串等等,而且也十分的浪费时间去纠结这些细枝末节上的事情,尤其是每次还得 google 去搜索相关的代码,所以我心想与其碎片化的从浏览器中得到自己想要的答案,不如将这些代码整理到这一篇博客内,供我未来遇到这方面的困扰时,可以直接在这里找到答案. # 数据基本类型 一个字节 = 8 位 qword 数据类型仅在 64 位程序中存在 类型 字节数 位数 ida...
14k 13 分钟

hws 填完参赛问卷之后邮件被发到了垃圾箱里面,比赛开打好几个小时了才发现 (悲), 不过成绩还是不错滴,把逆向 ak 啦,第四名耶 (●’◡’●) 别的方向 misc 和 crypto 也稍微看了下,算是逆向之外的闲情雅致:), 但总归是能做出超级简单的题目的,但是 pwn 是真的不会!做不了一点… 不会 pwn 的二进制手只能当逆向手了😂 题目附件: 点击下载 # reverse # Android 反编译 libjniex.so , 发现这个解密函数,所使用的算法为 SM4 安装 apk, 打开后发现两个特殊字符串 159762dr7vh438sa 和...
6.3k 6 分钟

常年不去上早八课的人,今天居然在八点前就醒了,要问为什么?这比赛从早上八点打到晚上八点 >…<(悲) 不过,咱们队伍在下午就把逆向题 ak 了~居然没有坐牢到晚上 (●’◡’●) 题目附件: 点击下载 # careful 动态调试,题目里有个 inline hook, 在这里打个断点 那么网址就是 Just_An_APIH00k11.com # babyre die 查一下壳 有 sleep 反调试,把 sleep nop 掉 这里读取了名称为 cod 的资源,用 resource hacker 把资源复制下来 然后向下执行,这里是一个对 cod...
18k 16 分钟

在日常遇到的.so,.elf 格式的二进制文件,常常可以看到 Linux 进程通信的使用,接下来的部分,我将介绍 Linux...
23k 21 分钟

今天坐牢坐满了八小时,出了三道逆向,一道区块链,帮助我们队拿到了这次比赛的第一名,也算可喜可贺!自己终于不是以前的菜鸡了,遥想去年还啥也不会呢 现在比赛结束了,那就写一下 wp 好咯 PS: 第一次拿到一道困难题的一血,还是很激动的,有一道题目我记得叫做 easyRE,拿了二血是因为吃饭吃到 10 点多才开始做题了,下次一定准时比赛!(下次一定 (●’◡’●)) 题目附件: 点击下载 # reverse # easyRE 这题是 python 逆向,做 python 逆向的方法我感觉挺固定的,就是 pyinstxtractor 解包一下,再把里面的 pyc 转成 py...
60k 54 分钟

近期着手准备研究安卓逆向,早就听说 frida 这个安卓逆向神器,所以想要系统的学习一下,这里就当作自己的一个学习笔记,记录本人学习 frida 的过程中所遇到的知识点,防止以后遗忘. 这次的学习教程是由 r0ysue 大佬写的,膜拜! https://github.com/r0ysue/AndroidSecurityStudy # frida 的命令行基本语法 frida -U -l .\srcipt.js -f "com.oacia.frida_a02_01_demo2" -U 指用 USB 连接手机和电脑 -l load-file, 所以后面要跟上写好的...
1.5k 1 分钟

这段时间学习安卓逆向的过程中,急需一台 root 机,一开始想把自己的手机 root 了,但是考虑到 root 的过程中会清除所有数据,所以就想着换一台备用机去 root, 正好过去高中的时候被学校强制要求买了一台三星的 SM-P200 平板,高中过后这平板也闲置了下来,正好今天有需要,就把他拿出来,花了两天时间终于将平板 root 好了,所以记录一下平板 root 的过程 对于三星系列手机平板的 root 我的建议是参考此处 # 0x01 下载三星官方原版刷机包 这是最重要的一步,你需要去网上下载官方原版的刷机包,格式类似于这种 AP , BL ,...
6.8k 6 分钟

今天受好友 nameless 的委托,对一个名叫 nokelock 的 apk 进行插桩,希望在日志中打印出蓝牙加密包的密文,密钥与明文,由于本人是第一次对 apk 进行插桩,于是写了这一篇文章用以学习和记录. # 0x01 什么是插桩? 依据本人的拙见,插桩就是在原有的代码中插入自己写的代码,用以打印某些想要知道的变量的值。当然了,插入的代码也可以在原有代码的基础上,为 app 增加各种各样的额外功能。 在过去学习 fuzz 的过程中,也有过插桩这一个概念,而过去使用的 afl-fuzz 是在二进制汇编代码中插桩,这一次是需要在 apk...
9.2k 8 分钟

这两天的区块链研究我的任务是要把大约五万个智能合约的源码编译成字节码的形式,并且提取智能合约中所用到的公开库,过程中遇到了一些困难,当然也是有收获的,所以在这个任务做完之后,写了这篇文章记录一下 # 0x01 初步分析 我们需要批量编译的智能合约所在的文件夹结构如下 ├─0x01ea1afecdab69ab00212e6f9ed0209c0bf75ac9 │ code.abi │ code.sol │ contract_creation_code │ info │ ├─0x01eacc3ae59ee7fbbc191d63e8e1ccfdac11628c │ code.abi │...
38k 35 分钟

把今年 hgame 四周的逆向题 ak 啦,还拿了个逆向单方向奖呢~(●’◡’●), 顺手做了两道区块链的题:) 题目附件: 点击下载 # week1 # a_cup_of_tea tea 算法 from ctypes import *def decrypt(v, k): v0, v1 = c_uint32(v[0]), c_uint32(v[1]) delta = 0x543210DD k0, k1, k2, k3 = k[0], k[1], k[2], k[3] total = c_uint32(delta * -32) for i in range(32): v1.value -=...
11k 10 分钟

python 中的逆向最关键的就是要看到 python 源码,如果使用 ida 将会大大增加逆向的难度,所以使用好正确的工具和方法将会让逆向过程事半功倍。

python 逆向的流程为:test.exe–>test.pyc–>test.py

接下来我将介绍每一步所使用的工具以及到目前为止我所遇到的问题和解决的方法

2.2k 2 分钟

使用 web3.py 进行合约交互 # 部署合约 import jsonfrom web3 import Web3, HTTPProviderprivate_key = [钱包私钥]wallet = Web3.toChecksumAddress([钱包地址])w3 = Web3(HTTPProvider([链的RPC]))abi = json.loads([合约的ABI])code = [合约的字节码]newContract = w3.eth.contract(bytecode=code, abi=abi)nonce =...
32k 29 分钟

对常用的逆向算法进行了整理 # RC4 def RC4(data, key): if type(data) == type('oacia'): # 判断是否为字符串 data = [ord(i) for i in data] if type(key) == type('oacia'): key = [ord(i) for i in key] S = list(range(256)) j = 0 out = [] # KSA Phase for i in range(256): j = (j + S[i] + key[i % len(key)]) % 256...
168 1 分钟

# 12 月 4 号,小夏的生日到啦,真是一件令人开心的事~ 这位是放学后甜品部的麻烦制造第一名以及自称浪漫家的小夏同学! 抱着「想和大家一起分享浪漫」的心情、经常说出爆炸性发言并把周围都牵扯进来、「浪漫」的定义也经常变化着的样子…。 「关于奶油蛋糕有想到过些什么吗? 」 还记得今年九月份入坑蔚蓝档案的时候,就是因为看见了小夏,她实在太可爱了 (≧▽≦)
4.6k 4 分钟

# 0x0 start 首先导入 Python.h, 并添加 python37_d.lib 依赖 # 0x1 遇到的问题 刚开始跟着教程走,结果总是提示缺少 python37_d.lib 依赖,后来根据下面的找到的教程才发现库目录才是有依赖搜索的目录 ~~ 看教程里是从上往下数第四个改成了 C:\environment\Python37\libs 结果被骗了…~~QAQ https://blog.csdn.net/bandaoyu/article/details/105102945 于是 vs 的 VC++ 目录的配置可以如图所示 并且在链接器的输入子目录内添加 python...
18k 16 分钟

本次题目的地址为 sepolia@0x053cd080A26CB03d5E6d2956CeBB31c56E7660CA

# 前言

这一次 1024 程序员节中有区块链相关的题目,作为今年才开始起步区块链的小萌新,这一题也是整整看了一整个周末才做出来,不过做出来之后也是相当的具有成就感滴:), 话不多说,我们现在就来看一看如何做出这一题.


25k 23 分钟

# 前言 过去曾简单接触过 solidity, 合约的内容基本上都是对于函数的调用,感觉和过去看 app 的 java 源码差不多,都是对事件的调用执行。曾经也在 Ropsten 测试网络中进行过几次智能合约的交易,对于交易的过程还是大致有一些了解的,那么我们首先从 solidity 的运行环境开始吧. # 环境配置 这里提供两种配置 solidity 环境的方法 # 通过 Remix 在网页执行 solidity (推荐,方便快捷) Solidity 开发环境搭建 # 通过 visual code 安装 solidity solidity vscode 环境配置 1、安装...