2023最新版Android逆向教程——第2天:dex反编译工具的安装和使用

news2024/11/18 15:49:42

目录

  • 一、jadx的安装和使用
    • 1.1 jadx 的简介
    • 1.2 jadx 的安装
    • 1.3 jadx 的命令
    • 1.4 jadx-gui 的使用方法
    • 1.5 常见问题
  • 二、gda的安装和使用
  • 三、JEB的安装和使用
    • 3.1 JEB的简介
    • 3.2 JEB的安装
    • 3.3 JEB实战

每个 Android App 都有对应的安装包,是以 apk 为名字后缀的文件,App 的实现逻辑都包含在这个文件中。apk 文件往往包含资源文件(如图标、字体等),由 Java 代码编译而成的 dex 文件(可通过反编译 dex 文件得到 Java 代码),和一些相关的配置文件(如 AndroidManifest.xml 文件)。关于其中的细节,这里就不再一一展开介绍了,后续会介绍 Android 开发相关的基本知识。逆向中关键的一步就是反编译 apk 文件,将其还原成可读性高的 Java 代码,以前多数情况下,我们通过观察并分析这个 Java 代码就能找到想要的核心逻辑。工欲善其事必先利其器,用来反编译 apk 文件的工具有很多,例如:jadx,JEB,GDA,Apktool 等。不同工具的用法和定位也有所不同。

一、jadx的安装和使用

1.1 jadx 的简介

jadx 是一款使用广泛的反编译工具,可以一键把 apk 文件还原成 Java 代码,使用起来很简单,功能强大,还具有一些附加功能可以辅助代码追查。其 GitHub 地址为:https://github.com/skylot/jadx。主要具有如下几个功能:

  1. 除了反编译 apk 文件,还可以反编译 jar、class、dex、aar 等文件和 zip 文件中的 Dalvik 字节码
  2. 解码 AndroidManifest.xml 文件和一些来自 resources.arsc 中的资源文件
  3. 一些 apk 文件在打包过程中增加了 Java 代码的混淆机制,对比 jadx 提供反混淆的支持。

jadx 本身是一个命令行工具,仅仅通过 jadx 这个命令就可以反编译一个 apk 文件。除此之外,它也有配套的图形化界面工具-----jadx-gui,这个使用起来更加方便,能直接以图形界面的方式打开一个 apk 文件。同时,jadx-gui 对反编译后得到的 java 代码和其他资源文件增加了高亮支持(就像在 IDE 中打开这些内容一样),还具有快速定位、引用搜索、全文搜索等功能。所以,我们往往直接使用 jadx-gui 完成一些反编译操作。

1.2 jadx 的安装

直接点击 https://github.com/skylot/jadx/releases/tag/v1.4.7 链接下载对应的 Release 包即可,如下图所示:
在这里插入图片描述
单击,下载中,如下图所示:
在这里插入图片描述
如果 Github 链接打不开的,可以直接从我的百度网盘中进行下载,下载链接如下:

链接:https://pan.baidu.com/s/13WbJNVjZ9-9C9P3Z5NzAhA 
提取码:yqgs 
--来自百度网盘超级会员V9的分享

下载之后直接解压到自己常用的目录即可,解压之后会得到一个 bin 目录,进入 bin 目录直接运行 jadx 和 jadx-gui 即可,Windows 可以直接双击 jadx.batjadx-gui.bat 即可运行。如下图所示:

1.3 jadx 的命令

使用 jadx 的命令执行文件的反编译操作,主要是指定一些输入参数和输出参数,这些参数的设置细节直接参考参数说明即可。运行 jadx -h 命令 (以管理员身份运行cmd窗口,并且进入到jadx解压的目录----可以根据自己情况添加环境变量),查看 jadx 命令的用法,如下图所示:
在这里插入图片描述
可以看到,参数 <input files> 就是输入文件的路径,其他参数如 -d 可以指定反编译后输出文件的路径, -r 可以指定不解析资源文件(能够提升整体反编译的速度)。使用下面的命令对已经下载好的 scrape-app5.apk 文件进行反编译:

jadx scrape-app5.apk -d scrape-app5

运行完毕后,本地会生成一个 scrape-app5 文件夹,从中可以看到,AndroidManifest.xml 文件、资源文件和原始的 java 文件等都成功还原出来了。例如,com.goldze.mvvmhabit.ui.MainActivity.java 文件的内容还原结果如下:

package com.goldze.mvvmhabit.ui;

import android.os.Bundle;
import com.goldze.mvvmhabit.R;
import com.goldze.mvvmhabit.databinding.ActivityMainBinding;
import com.goldze.mvvmhabit.ui.index.IndexFragment;
import me.goldze.mvvmhabit.base.BaseActivity;

/* loaded from: classes.dex */
public class MainActivity extends BaseActivity<ActivityMainBinding, MainViewModel> {
    @Override // me.goldze.mvvmhabit.base.BaseActivity
    public int initContentView(Bundle bundle) {
        return R.layout.activity_main;
    }

    @Override // me.goldze.mvvmhabit.base.BaseActivity
    public int initVariableId() {
        return 2;
    }

    @Override // me.goldze.mvvmhabit.base.BaseActivity, me.goldze.mvvmhabit.base.IBaseView
    public void initParam() {
        super.initParam();
        setRequestedOrientation(-1);
    }

    /* JADX INFO: Access modifiers changed from: protected */
    @Override // me.goldze.mvvmhabit.base.BaseActivity, com.trello.rxlifecycle2.components.support.RxAppCompatActivity, android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.support.v4.app.SupportActivity, android.app.Activity
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        startContainerActivity(IndexFragment.class.getCanonicalName());
    }
}

还原效果还是比较理想的,就这样,我们只需要一条简单的命令就完成了对 apk 文件的反编译,其中 Java 代码的逻辑一览无遗。

1.4 jadx-gui 的使用方法

jadx-gui 是一个图形界面工具,它就像一个 IDE,支持很多方便快捷的交互式操作(例如把一个 apk 文件拖到 jadx-gui 后,它会直接打开这个文件,之后高亮显示反编译后的代码),以及代码搜索、定位等。相比 jadx 命令,个人更推荐直接使用 jadx-gui 反编译 apk 文件。

① 启动和反编译

在 Windows 下直接双击 jadx-gui.bat ,jadx-gui 便启动了,这是我们可以看到下图所示的界面:

可以通过 开始-->打开文件 打开 apk,也可以直接将 apk 文件拖到 jadx-gui 的窗口中,还可以从菜单栏中的 文件-->打开文件 调出资源管理器来打开 apk 文件。文件打开之后,稍等片刻,反编译就完成了,这时看到的界面如下图所示:
在这里插入图片描述
从界面的左侧可以发现,反编译后的 Java 源代码以一个个包的形式组织在一起,另外还有资源文件,其中包括图片文件、布局文件和 AndroidManifest.xml 文件(内含 apk 文件的基本信息)等。在左侧展开想要查看的包,右侧就会出现对应的 Java 源代码,如下图所示:
在这里插入图片描述
可以看出,Java 源代码的还原度还是很高的。

② 保存为 Gradle 项目

我们也可以把反编译后的文件另存为 Gradle 项目,Gradle 项目就是开发版本的 Andriod 项目,如下图所示:
在这里插入图片描述
导出后的项目目录结构和我们在 jadx-gui 界面里看到的结构基本一致,这个项目是可以被 Android Studio 工具打开的,打开的界面如下图所示:
在这里插入图片描述
打开之后的代码一般没办法直接运行,因为毕竟整个项目是反编译出来的,不太可能完全还原出开发版本的 Andriod 项目。如果你对 Andriod 开发比较了解,可以尝试修改一下源码和 Gradle 配置,是可以使项目正常运行的,即使不能运行也没有太大关系,我们的目的并不是运行这个代码,而是分析其中的逻辑,所以要把目光聚焦在查找和定位目标方法与逻辑定义上,Android Studio 能够帮我们更方便地完成这些操作,当然 jadx-gui 也提供了查找和定位的相关功能,现在我们回到 jadx-gui,了解一下它的其他常见用法。

③ 文本搜索

在源代码中搜索 /api/movie 字符串,可以使用 jadx-gui 提供的搜索功能,打开菜单栏里的 导航-->搜索文本,如下图所示:
在这里插入图片描述
这时 jadx-gui 会显示一个搜索框,如下图所示,在 搜索文本: 下方填入 /api/movie,同时可以从类名、方法名、变量名和代码中选择搜索位置,自行勾选即可,下方会显示搜索结果。
在这里插入图片描述
可以看到,搜索到了一处包含 /api/movie 字符串的位置,可以看一下该处的内容,先选中搜索结果,然后点击 转到 按钮,即可跳转到对应的代码处,如下图所示:
在这里插入图片描述
在这里插入图片描述
④ 查找方法的声明

我们可以试着寻找一下 encrypt 方法的声明,右击 encrypt 方法名,会打开一个菜单,选择 跳到声明,如下图所示:
在这里插入图片描述
这时候就会跳转到声明 encrypt 方法的位置,如下图所示:
在这里插入图片描述
初步观察其逻辑是传入一个包含字符串的 List 对象,然后经过一些加密处理返回一个高度疑似 Base64 编码的字符串。

更简单的方法,鼠标放到 encrypt 上,然后双击鼠标左键,即可跳转到方法声明处。

⑤ 查找用例:通过声明找到调用方法的位置

右击声明处的 encrypt 方法名,在打开的菜单中可以看到一个 查找用例 的选项,如下图所示:
在这里插入图片描述
点击之后,查找到的结果如下图所示:
在这里插入图片描述
搜索结果有一处,直接双击结果或者先选中结果再点击 转到按钮,都可以跳转到对应的代码处。查看结果,可以发现这就是之前调用 encrypt 方法的位置,如下图所示:
在这里插入图片描述
⑥ 反混淆

jadx-gui 还有一个强大的功能,就是反混淆。有时候从一些单个字母变量等并不好推测究竟是什么意思,这是 App 在编译和打包阶段做了一些混淆操作导致的结果,和 JavaScript 中的变量混淆非常相似。针对这个问题,jadx-gui 具有反混淆功能。我们可以打开反混淆开关,点击菜单栏中的 工具-->反混淆,如下图所示:
在这里插入图片描述
反混淆能够进一步提升代码的还原度,从而让我们更方便地推敲代码中的逻辑。

⑦ 设置选项

jadx-gui 还提供了很多功能设置,可以点击工具栏中的 首选项 按钮,如下图所示:
在这里插入图片描述
然后会打开一个设置页面,如下图所示:
在这里插入图片描述
这其实是一个总的设置页面,我们可以在这里配置 jadx-gui 的各个选项,如是否启用反混淆、反编译过程中允许的并行线程数、系统是否区分大小写、是否反编译资源文件等,这些和 jadx 的一些命令功能是一致的。

⑧ 日志查看

在 jadx-gui 运行的过程中,还可以查看运行日志,点击工具栏中的 日志 按钮即可打开日志查看器,如下图所示:
在这里插入图片描述
日志查看器如下图所示,可以通过上方的选择框选择日志等级,例如这里选择了 ERROR 级别,即显示错误日志。
在这里插入图片描述
如果反编译过程出现了错误,就可以来这里查看错误细节。当然,也可以从运行 jadx-gui 命令的控制台观察一些日志输出结果。

1.5 常见问题

如果有些 apk 文件比较大,jadx-gui 反编译所需的时间和消耗的资源会更多,所以有时候在反编译过程中会提示如下错误:

java.lang.OutOfMemoryError: GC overhead limit exceeded
....

这里报了一个 OutOfMemoryError 错误,代表内存溢出,对于一些比较大的 apk 文件,是会出现这种问题的,可以尝试用以下两种方式解决:

  1. 增加 JVM 的最大内存:设置 JVM_OPTS,把 JVM 的最大内存调大,之后内存溢出的问题自然可以得到有效解决。
  2. 减小线程数:线程多了,反编译过程消耗的内存自然也会增多,可以在运行 jadx 的命令时通过 -j 命令适当将线程数量设置为更小的值。

二、gda的安装和使用

文章:https://bbs.kanxue.com/thread-266700.htm
官网:http://www.gda.wiki:9090/introducation.php

三、JEB的安装和使用

在之前两小节中我们了解了 jadx 和 gda 的基本使用方法,体验了其强大的功能。当然,类似提供反编译功能的工具还有很多,JEB 就是一个。本小节我们会结合一个案例学习使用 JEB 反编译和分析 apk 文件的过程。本小节介绍的内容仅是 JEB 所有功能的冰山一角,更多关于 JEB 的使用教程可以参考其官方文档:https://www.pnfsoftware.com/jeb/manual/

3.1 JEB的简介

JEB 是由 PNF 软件(PNF Software) 机构开发的一款专业的反编译 Android App 的工具,适用于逆向和审计工程,功能非常强大。相比 jadx,JEB 除了支持 apk 文件的反编译和 Android App 的动态调试,还支持 ARM、MIPS、AVR、Inter-x86、WebAssembly、Ethereum(以太坊) 等程序的反编译、反汇编、动态调试等。另外,JEB 能解析和处理一些 PDF 文件,是一个极其强大的综合性逆向和审计工具。由于本小节主要讲 Android 逆向相关的内容,所以多关注它和 Android 相关的功能。对于 Android App,JEB 主要提供如下功能:

  1. 可以对 Android App 和 Dalvik(Android 虚拟机,类似 Java 中的 JVM) 字节码执行精确和快速的反编译操作
  2. 内置的分析模块可以对高度混淆的代码提供虚拟层次化重构,对分析混淆代码很有帮助
  3. 可以对接 JEB API 来执行一些逆向任务,支持用 Java 和 Python 编写自动化逆向脚本

JEB 支持 Windows、Linux、Mac 三大平台,目前主要分为三个版本:JEB CE(社区版)、JEB Android(Android版)、JEB Pro(专业版)。JEB CE 提供一些基础功能,如反编译 dex 文件,反编译和反汇编 Inter-x86,但不支持反编译 Dalvik 字节码。JEB Android 则更专注于 Android 系统,支持反编译 dex 文件,也支持反编译和反汇编 Dalvik 字节码。JEB Pro 则是 完全体,支持官网介绍的所有功能。三个版本的具体功能对比可以参考官网 https://www.pnfsoftware.com/jeb/ 的介绍。JEB CE 是免费的,JEB Android 和 JEB Pro 都是收费的,需要购买许可证才可以使用。

3.2 JEB的安装

如果从官方网站直接下载的话,一些 Android 功能是没法用的,这里建议下载社区大佬们提供的版本,请移步:https://bbs.kanxue.com/thread-268316.htm 另外这里我也准备了一个安装包,大家可以从百度网盘中下载:

链接:https://pan.baidu.com/s/1pGlrgXqr-YM-Sp5sgWv26A 
提取码:3oxs 
--来自百度网盘超级会员V9的分享

下载完成,解压后会得到如下的文件目录:

安装好 JEB 之后,需要下载示例 apk 文件,地址为:https://app5.scrape.center/ ,下载好后保存为 scrape-app5.apk 文件即可。然后准备好一部 Android 手机(建议大家都使用真机-----模拟器也能用,但不好用),在手机上安装好刚下载的 apk 文件并启动 App。另外还需要确保在电脑上能使用 adb 命令正常连接到手机。

3.3 JEB实战

进入 JEB 解压后的目录,Windows 下双击 jeb_wincon.bat,按照弹窗 generate a license,即可正常使用。设置中文:

重新打开 JEB,把示例 apk 文件直接拖到窗口里,经过一段时间的处理,JEB 就完成了反编译,如下图所示:
在这里插入图片描述
从左侧的 Bytecode/层级 部分可以看到,反编译后的代码以一个个包的形式组织在一起,右侧显示的则是 Smali 代码(Dalvik 的反汇编程序实现,类似 x86 平台下的汇编语言),通过这个代码,我们大体能够看出一些执行逻辑和数据操作的过程。虽然我们得到了 Smali 代码,由于我们要找的是 URL 中加密参数 token 的位置,因此最简单的方式当然是借助 API 的一些标志字符串查找了。

示例 App 在启动的时候会开始请求数据。请求 URL 里包含关键字 /api/movie,以及 offset、token 等参数,具体的抓包过程这里就不再赘述(后续会进行详细的讲解)。因为 API 的路径通常是用字符串定义的,而且一般写死在 App 代码里,所以我们可以尝试使用 /api/movie 来搜索,看看是否能搜索到相关的逻辑。点击菜单中的 编辑--> Quick Search,在文本框中输入需要查找的内容。
在这里插入图片描述
这里其实是声明了一个静态不可变的字符串,叫作 indexPath。但是这里是 Smali 代码,选中该字符串,然后右击,在菜单中选择 解析,如下图所示:
在这里插入图片描述
之后就成功定位到了 Java 代码的声明处,如下图所示:
在这里插入图片描述
这里就是 indexPath 的原始声明,同时还能看到 index 方法的声明,它包含 3 个参数:offset、limit 和 token。由此可以发现,这里的参数和声明恰好跟请求 URL 的格式是相同的。我们可以在 Java 代码处再次选择 解析,即可回到对应的 Smali 代码处,如下图所示:

可以看到 Smail 代码的定义和 Java 代码的定义一一对应。但这里似乎仅仅定义了 API,并没有真正的实现,因此我们可以接着搜索引用 /api/movie 的位置,同样在查找结果处右击,在打开的菜单中选择 解析,就跳转到了对应的 Java 代码处,如下图所示:
在这里插入图片描述
很明显,这里就是逻辑实现相关的代码了。稍微读一下这里的 Java 代码,大致是调用了一个 apiService 对象的 index 方法,并传入了几个参数,第一个参数是 v 和 v1 计算后的结果,第二个参数是 v1,第三个参数是 encrypt 方法返回的结果(这个方法的参数还是一个包含 /api/movie 字符串的 ArrayList 对象)。

这里看起来似乎是请求 API 的一个操作,但是我们也不确定是不是真的是这个位置。为了更好地确定这里是不是我们想要的数据加载入口,下面尝试使用 JEB 的动态调试功能验证一下,例如在刚才代码的位置添加一个断点,设置断点的方式如下:

然后滑动 App 加载数据,看在运行到断点的位置时是否停止了运行,如果停止了,就证明我们找的这个位置是正确的,否则继续寻找。动态调试的操作很简单,首先确保示例 App 已经安装在了手机上,并且能在电脑上通过 adb 命令与手机连接。然后运行 adb 命令:

C:\Users\Administrator>adb devices
List of devices attached
FA6BG0303294    device
C:\Users\Administrator>adb shell am start -D -n com.goldze.mvvmhabit/.ui.MainActivity
Starting: Intent { cmp=com.goldze.mvvmhabit/.ui.MainActivity }

这条命令的功能就是让 App 以调试模式启动,-D 指定了 App 以调试模式启动,-n 指定了启动入口,这里设置为示例 App 的包名和 MainActivity 。运行这条命令后,可以看到手机上显示如下图所示的字样:

这时回到 JEB 的界面,点击工具栏里的 Debug 按钮,如下图所示:
在这里插入图片描述
之后会检测出正在运行的 Android 设备,如下图所示:

点击下方的 附上 按钮,调试器就成功挂载了手机上的 App 进程,JEB 的界面变成下图所示的这样,弹出了几个调试窗口:
在这里插入图片描述
并且 JEB 显示代码执行到断点的位置时停了下来,于此同时,手机上的 Waiting for Debugger 提示消失了。说明数据加载的过程正是调用这个断点位置处代码的过程,即数据加载入口找对了。我们可以点击 Step Over 按钮尝试逐行执行此处的代码,如下图所示:
在这里插入图片描述
在执行的过程中,我们可以观察 VM/局部变量 窗口,这里显示了各个变量的类型和对应的值。另外,可以点击工具栏中的 Run 按钮继续执行到下一个断点,如下图所示:
在这里插入图片描述
如果没有下一个断点,会直接完成数据请求,App 中加载出下一页数据。后续的分析我就不再进行赘述,这里主要是为了演示 JEB 的使用方法。

ps:不推荐使用 JEB 进行 Java 层的动态调试,① JEB 是大神来的,调试的功能可能大神没有那啥,调试起来可能会有问题;② 调试的时候分析的还是 Smail 代码,有一定的难度,后续直接使用 Hook,Hook Java,Java 层的算法对于现在的逆向手段来讲几乎是没有什么太大的秘密,不需要向以前那样借助 Java 的动态调试。

在第2天,我们学习了 dex 反编译工具的安装和使用,利用此一类工具,我们可以非常方便地反编译 apk 文件,还原出原始的 Java 代码,从而找到我们想要的核心逻辑。今天学习的内容比较基础,需要好好掌握,之后会经常使用 jadx 来反编译 apk 文件。

至此今天的学习就到此结束了,笔者在这里声明,笔者写文章只是为了学习交流,以及让更多学习逆向的读者少走一些弯路,节省时间,并不用做其他用途,如有侵权,联系博主删除即可。感谢您阅读本篇博文,希望本文能成为您编程路上的领航者。祝您阅读愉快!


在这里插入图片描述

    好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
    如果我的博客对你有帮助、如果你喜欢我的博客内容,请 点赞评论收藏 一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
 编码不易,大家的支持就是我坚持下去的动力。点赞后不要忘了 关注 我哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1076476.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

掌握 Git:代码版本控制的基本步骤(强力推荐的工具)

fairleevivobook:~/CLionProjects/SDL_SLAM$ git init提示&#xff1a;使用 master 作为初始分支的名称。这个默认分支名称可能会更改。要在新仓库中 提示&#xff1a;配置使用初始分支名&#xff0c;并消除这条警告&#xff0c;请执行&#xff1a; 提示&#xff1a; 提示&…

通过Node.js获取高德的省市区数据并插入数据库

通过Node.js获取高德的省市区数据并插入数据库 1 创建秘钥1.1 登录高德地图开放平台1.2 创建应用1.3 绑定服务创建秘钥 2 获取数据并插入2.1 创建数据库连接工具2.2 请求数据2.3 数据处理2.4 全部代码 3 还可以打印文件到本地 1 创建秘钥 1.1 登录高德地图开放平台 打开开放平…

使用Python采集京东商品评论并保存至本地

不知道各位网购的时候&#xff0c;是否会去留意商品评价&#xff0c;有些小伙伴是很在意评价的&#xff0c;看到差评就不想买了&#xff0c;而有些小伙伴则是会对差评进行理性分析&#xff0c;而还有一类人不在乎这个。京东作为中国最大的电商平台之一&#xff0c;拥有大量的商…

如何使用ChatGPT编写更好的代码

生成代码是ChatGPT和其他遵循指令运行的大型语言模型(LLM)一个功能强大的应用。如果得到正确的提示&#xff0c;大型语言模型(LLM)可以生成程序员可能需要数小时才能编写的代码。 然而&#xff0c;大型语言模型(LLM)并不能完成程序员的所有工作。他们无法分解复杂的问题&#x…

学生用RockyLinux9.2模板虚拟机说明

“RockyLinux9.2”模板虚拟机下载地址 链接&#xff1a;https://pan.baidu.com/s/1xcakszIQ7Kp9Nw_NA9Znlg?pwdqzmm 提取码&#xff1a;qzmm 1.模板机是基于“Rocky-9.2-x86_64-minimal.iso”安装 2.模板机是2023.10.10执行dnf update && dnf upgrade更新和升级软件…

Unity_相机灵活跟随角色移动

每日一句&#xff1a;慢慢改变&#xff0c;慢慢成长&#xff0c;慢慢适应&#xff0c;慢慢优秀 目录 角色旋转、移动类 相机跟随人物移动类 角色旋转、移动类 /*旋转刚体&#xff0c;位移的动画驱动移动*/ using System.Collections;using System.Collections.Generic;using…

一套完整的软件测试面试流程(面试题),这些题你真的都能答上吗?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、自我介绍 2、…

外汇天眼:外汇交易商常见黑心手法大公开!投资务必留意这5种骗局

众所周知&#xff0c;外汇市场无论在交易量、流动性方面都是世界之最&#xff0c;如今随着网络科技愈来愈发达&#xff0c;任何人都能通过手机使用全球的经纪商&#xff0c;随时随地在线上进行外汇保证金交易。 然而&#xff0c;市面上充斥各种黑平台与假券商&#xff0c;投资人…

神经网络中卷积和池化的区别

1、什么叫卷积&#xff1f; 卷积层是用一个固定大小的矩形区去席卷原始数据&#xff0c;将原始数据分成一个个和卷积核大小相同的小块&#xff0c;然后将这些小块和卷积核相乘输出一个卷积值&#xff08;注意这里是一个单独的值&#xff0c;不再是矩阵了&#xff09;。 卷积的…

智能合约漏洞,价值 5200 万美元的 Vyper 漏洞攻击原理分析

智能合约漏洞&#xff0c;价值 5200 万美元的 Vyper 漏洞攻击原理分析 7 月 30 日&#xff0c;因为 Vyper 部分版本中的漏洞&#xff0c;导致 Curve、JPEG’d 等项目陆续受到攻击&#xff0c;损失总计超过 5200 万美元。 Safful 对此事件第一时间进行了技术分析&#xff0c;并…

WebDAV之π-Disk派盘 + 书藏家

书藏家是一款书籍收藏的软件,对于喜欢阅读书籍的用户来说非常友好,记录你所阅读的书籍内容,对你所阅读的书籍内容进行全方位的管理,并且支持多种录入的方式,不管是实体书籍还是网络书籍都能够进行更为有效的管理;内置WebDAV 模块,更加便利的整理自己的文件资源;书藏家的…

三维模型3DTile格式轻量化云端处理技术方法分析

三维模型3DTile格式轻量化云端处理技术方法分析 在现代的地理信息系统 (GIS) 中&#xff0c;3D Tiles 是一种很重要的数据格式&#xff0c;用于存储和传输大规模地理空间数据。然而&#xff0c;由于其数据密度高&#xff0c;传输和加载过程中非常消耗资源&#xff0c;因此需要采…

element-ui的 el-option如果label为空显示value问题处理

element-ui的 el-option如果label为空显示value问题处理 问题描述我的第二项没有lable值直接取的value 处理办法定义一个函数处理一下 function toStr(str) {let data;if (str) {data encodeURI(str);} else {data 暂无名称;}data data.replace(/ /g, %20);return decod…

MySql运维篇---009:分库分表:垂直拆分、水平拆分、通过MyCat进行分片,读写分离:一主一从、 双主双从

3.分库分表 3.1 介绍 3.1.1 问题分析 使用单个数据库存储所有的数据&#xff0c;如果磁盘和内存和内存不足了可以增大磁盘和内存&#xff0c;但是对于一台服务器的磁盘和内存不可能无限制的扩张下去&#xff0c;它是受我们服务器的硬件影响的&#xff0c;如果说数据库所存储…

查看和分析 IIS 日志文件以增强 Web 服务器安全性

Microsoft IIS服务器&#xff0c;无论是Web还是FTP&#xff0c;对于企业来说都是必不可少的。但是&#xff0c;IT 安全管理员的工作并不止于部署 IIS 服务器。部署后&#xff0c;管理员必须采取安全措施来保护这些服务器&#xff0c;监控 IIS 服务器安全性的一种行之有效的方法…

BC v1.2充电规范

1 JEITA Reference to https://www.mianbaoban.cn/blog/post/169964 符合 JEITA 规范的锂离子电池充电器解决方案 2 Battery Fuel Gauge 2.1 Cycle Count&#xff08;充放电循环次数&#xff09; 此指令回传一只读字段&#xff0c;代表电芯组已经历的完整充放电循环数。当放电容…

Pulsar简介及其安装

Pulsar简介及其安装 简介特征Pulsar 本地安装与运行Pulsar集群安装jdk版本映射关系下载解压 Pulsar 本地安装与运行Pulsar集群安装jdk版本映射关系下载解压解压目录介绍 启动创建topic发送消息消费消息停止 简介 Apache Pulsar 是 Apache 软件基金会顶级项目&#xff0c;是下一…

host配置

配置host文件的作用主要是用于自定义域名与IP地址之间的映射关系。Host文件是一个操作系统用于将人类可读的域名&#xff08;例如&#xff1a;www.example.com&#xff09;映射到IP地址&#xff08;例如&#xff1a;192.168.1.1&#xff09;的文件。当你在浏览器中输入一个网址…

欠酸洗,异物压入,斑迹和脏污 学习笔记

欠酸洗&#xff1a; 带钢的宽度方向上&#xff0c;可能会出现在整个宽度或某个局部宽度区域的特殊分布。这种分布看起来像波浪或鱼鳞的痕迹。这种情况通常在带钢的开始和结束部分更为常见。 异物压入 通常&#xff0c;这种情况是由于圆点或小条状的粉尘和颗粒被压入所导致的…

一站式工单系统哪家好?一站式工单系统有什么特点?

伴随着高新科技的不断发展和行业竞争的加重&#xff0c;对于一站式工单系统这一类的公司服务系统软件有着越来越多的流程规定和可靠性的要求。一个比较完善的智能化一站式工单系统包含众多的流程&#xff0c;并适用更广泛性的企业信息化&#xff0c;接下来我们将一起看看一站式…