主頁 >  其他 > Frida主動呼叫java函式來爆破解題思路

Frida主動呼叫java函式來爆破解題思路

2023-07-12 08:09:03 其他

利用Frida去呼叫java代碼中的類,然后爆破,算是一種主動呼叫的方法,主動呼叫可以用于爆破,模擬程式部分執行,需要注意的知識點是在java代碼中的static型別資料在爆破程序中需要每次都對這種型別值重新設定,因為static型別在所有實體中都是統一,修改一個實體就會修改所有實體,需要用變數.屬性.value = https://www.cnblogs.com/hetianlab/p/...的寫法重新設定值,

var bvar = b.$new(IntClass.$new(2));
for (...) {
    bvar._static_val.value = https://www.cnblogs.com/hetianlab/p/...;
}

背景知識

java類中靜態值在爆破中需要修改

在java類中,一個屬性如果是static的,不是說這個值不能改,而是說這個屬性在程式中是唯一的,無論幾個實體,只要改了其中一個實體中static的值,其他實體對應的值也會被改變,

在爆破程序中,如果需要爆破程序中不停new一個新的類實體,記得看看其中有沒有static型別的變數,比如下面的這個例子

public class b {
    public static ArrayList<Integer> a = new ArrayList<>();
    static String b = "abcdefghijklmnopqrstuvwxyz";
    static Integer d = 0;
    Integer[] c = {8, 25, 17, 23, 7, 22, 1, 16, 6, 9, 21, 0, 15, 5, 10, 18, 2, 24, 4, 11, 3, 14, 19, 12, 20, 13};
?
?
    public b(Integer num) {
        for (int intValue = https://www.cnblogs.com/hetianlab/p/num.intValue(); intValue < this.c.length; intValue++) {
            a.add(this.c[intValue]);
        }
        for (int i = 0; i < num.intValue(); i++) {
            a.add(this.c[i]);
        }
    }
...

每次new一個b類,比如b bVar = new b(2).如果要不停呼叫這個類,并且使用其中的方法,要注意其中的static變數會不會變,如果會變,那么在爆破程序中,需要new完實體后,修改static變數的值,

frida呼叫java中靜態方法與動態方法

如果呼叫靜態方法,可以直接呼叫,比如java代碼如下

public class Verifier {
    private Verifier() {
    }
?
    public static boolean verifyPassword(Context context, String input) {
        ...
    }

那么如果呼叫verifyPassword可以直接在frida中呼叫

 var verify = Java.use("org.teamsik.ahe17.qualification.Verifier");
verify.verifyPassword(a, b);

如果是動態方法,有兩種方法可以呼叫動態方法

【----幫助網安學習,以下所有學習資料免費領!加vx:yj009991,備注 “博客園” 獲取!】

 ① 網安學習成長路徑思維導圖
 ② 60+網安經典常用工具包
 ③ 100+SRC漏洞分析報告
 ④ 150+網安攻防實戰技術電子書
 ⑤ 最權威CISSP 認證考試指南+題庫
 ⑥ 超1800頁CTF實戰技巧手冊
 ⑦ 最新網安大廠面試題合集(含答案)
 ⑧ APP客戶端安全檢測指南(安卓+IOS)

第一種是,使用記憶體中已存在實體的方法,需要用到java.choose(...),這個是在記憶體中尋找物件

//從記憶體中(堆)直接搜索已存在的物件
Java.choose('xxx.xxx.xxx', //這里寫類名 
{   //onMatch 匹配到物件執行的回呼函式
    onMatch: function (instance) {
    },
    //堆中搜索完成后執行的回呼函式
    onComplete: function () {
    }
});

第二種是,我們new一個新的實體,然后呼叫實體中的方法

 //獲取類的參考
var cls = Java.use('這里寫類名');
?
//呼叫建構式 創建新物件  這里注意引數
var obj = cls.$new();

Easy-QAHE17

首先是看吾愛破解的一道題目,核心代碼如下,

public void verifyPasswordClick(View view) {
        String password = this.txPassword.getText().toString();
        if (!Verifier.verifyPassword(this, password)) {
            Toast.makeText(this, (int) org.teamsik.ahe17.qualification.easy.R.string.dialog_failure, 1).show();
        } else {
            showSuccessDialog();
        }
    }
?
public class Verifier {
    private Verifier() {
    }
?
    public static boolean verifyPassword(Context context, String input) {
        if (input.length() != 4) {
            return false;
        }
        byte[] v = encodePassword(input);
        byte[] p = "09042ec2c2c08c4cbece042681caf1d13984f24a".getBytes();
        if (v.length == p.length) {
            for (int i = 0; i < v.length; i++) {
                if (v[i] != p[i]) {
                    return false;
                }
            }
            return true;
        }
        return false;
    }
...
...
...

輸入長度為4,通過分析后面知道輸入是數字,所以范圍是1000-9999.所以是可以爆破的,但是爆破是要用到encodePassword方法,自己寫一個當然也可以,但是很麻煩,這里就可以直接frida呼叫encodePassword函式.

注意這里encodePassword是靜態方法,所以可以直接呼叫

function main() {
    Java.perform(function x() {
        console.log("In Java perform")
        var verify = Java.use("org.teamsik.ahe17.qualification.Verifier")
        var stringClass = Java.use("java.lang.String")
        var p = stringClass.$new("09042ec2c2c08c4cbece042681caf1d13984f24a")
        
        for (var i = 999; i < 10000; i++){
            var v = stringClass.$new(String(i))
            var vSign = verify.encodePassword(v)
            if (parseInt(p) == parseInt(stringClass.$new(vSign))) {
                console.log("yes: " + v)
                break
            }
            console.log("not :" + v)
        }
    })
}
setImmediate(main)

結果

not :9078
not :9079
not :9080
not :9081
not :9082
yes: 9083

需要注意的是,要呼叫parseInt決議記憶體中的記憶體再對比,因為string型別是java的string型別,對js代碼來說是一段記憶體,

EasyJava

這題是純java題,邏輯很清晰,對輸入的每一個字符單個檢查,加密并對比,所以可以很簡單的想到爆破的思路

public static Boolean b(String str) {
    if (str.startsWith("flag{") && str.endsWith("}")) {
        String substring = str.substring(5, str.length() - 1);
        b bVar = new b(2);
        a aVar = new a(3);
        StringBuilder sb = new StringBuilder();
        int i = 0;
        for (int i2 = 0; i2 < substring.length(); i2++) {
            sb.append(a(substring.charAt(i2) + "", bVar, aVar));
            Integer valueOf = Integer.valueOf(bVar.b().intValue() / 25);
            if (valueOf.intValue() > i && valueOf.intValue() >= 1) {
                i++;
            }
        }
        return Boolean.valueOf(sb.toString().equals("wigwrkaugala"));
    }
    return false;
}

所以可以單個字符爆破,但是要注意到,com.a.easyjava.bcom.a.easyjava.a兩個類中都存在static屬性的變數,下面是b類的

public class b {
    public static ArrayList<Integer> a = new ArrayList<>();
    static String b = "abcdefghijklmnopqrstuvwxyz";
    static Integer d = 0;
    Integer[] c = {8, 25, 17, 23, 7, 22, 1, 16, 6, 9, 21, 0, 15, 5, 10, 18, 2, 24, 4, 11, 3, 14, 19, 12, 20, 13};
?
    public b(Integer num) {
        for (int intValue = https://www.cnblogs.com/hetianlab/p/num.intValue(); intValue < this.c.length; intValue++) {
            a.add(this.c[intValue]);
        }
        for (int i = 0; i < num.intValue(); i++) {
            a.add(this.c[i]);
        }
    }
?
    public static void a() {
        int intValue = a.get(0).intValue();
        a.remove(0);
        a.add(Integer.valueOf(intValue));
        b +="" + b.charAt(0);
        b = b.substring(1, 27);
        Integer num = d;
        d = Integer.valueOf(d.intValue() + 1);
    }
?
    public Integer a(String str) {
        int i = 0;
        if (b.contains(str.toLowerCase())) {
            Integer valueOf = Integer.valueOf(b.indexOf(str));
            for (int i2 = 0; i2 < a.size() - 1; i2++) {
                if (a.get(i2) == valueOf) {
                    i = Integer.valueOf(i2);
                }
            }
        } else {
            i = str.contains(" ") ? -10 : -1;
        }
        a();
        return i;
    }
?
    public Integer b() {
        return d;
    }
}

b類中的a,b,d變數都是static型別的同時,這三個變數都會被下面的方法所改變,所以如果要爆破,需要重新修改實體中的屬性值,如果不重新修改屬性的值,我們通過觀察b類中的b變數可以看到會有什么問題,

這個腳本是爆破第一個字符在加密后所有的可能性,爆破范圍通過分析b類可以縮小到a-z,然后模仿加密程序,加密一個字符看看結果,中間每回圈一次會重新申請一個ba類的實體,想通過申請新的實體來避免類中變數的修改.

function main() {
    Java.perform(function x() {
        console.log('[+] script load');
        
        var b = Java.use("com.a.easyjava.b");
        var a = Java.use("com.a.easyjava.a");
        var StringClass = Java.use("java.lang.String");
        var IntClass = Java.use("java.lang.Integer");
        var MainActivity = Java.use("com.a.easyjava.MainActivity");
?
        try { // try catch 用來查看報錯的,可以去掉
            for (var i = 97; i < 123; i++) {
                var bvar = b.$new(IntClass.$new(2));
                var avar = a.$new(IntClass.$new(3));
?
                var s = String.fromCharCode(i);
                var c = MainActivity.a(s, bvar, avar);
                console.log(`enc(${s}) => ${c}, b.a => ${b._b.value}`);
            }
        } catch (e) {
            console.log(e);
        }
        console.log('[+] script end');
    })
}
setImmediate(main)

結果如下

# python3 loader.py
[+] script load
enc(a) => a, b.b => bcdefghijklmnopqrstuvwxyza
enc(b) => a, b.b => cdefghijklmnopqrstuvwxyzab
enc(c) => a, b.b => defghijklmnopqrstuvwxyzabc
enc(d) => a, b.b => efghijklmnopqrstuvwxyzabcd
enc(e) => a, b.b => fghijklmnopqrstuvwxyzabcde
enc(f) => a, b.b => ghijklmnopqrstuvwxyzabcdef
enc(g) => a, b.b => hijklmnopqrstuvwxyzabcdefg
enc(h) => a, b.b => ijklmnopqrstuvwxyzabcdefgh
enc(i) => a, b.b => jklmnopqrstuvwxyzabcdefghi
enc(j) => a, b.b => klmnopqrstuvwxyzabcdefghij
enc(k) => a, b.b => lmnopqrstuvwxyzabcdefghijk
enc(l) => a, b.b => mnopqrstuvwxyzabcdefghijkl
enc(m) => a, b.b => nopqrstuvwxyzabcdefghijklm
enc(n) => a, b.b => opqrstuvwxyzabcdefghijklmn
enc(o) => a, b.b => pqrstuvwxyzabcdefghijklmno
enc(p) => a, b.b => qrstuvwxyzabcdefghijklmnop
enc(q) => a, b.b => rstuvwxyzabcdefghijklmnopq
enc(r) => a, b.b => stuvwxyzabcdefghijklmnopqr
enc(s) => a, b.b => tuvwxyzabcdefghijklmnopqrs
enc(t) => a, b.b => uvwxyzabcdefghijklmnopqrst
enc(u) => a, b.b => vwxyzabcdefghijklmnopqrstu
enc(v) => a, b.b => wxyzabcdefghijklmnopqrstuv
enc(w) => a, b.b => xyzabcdefghijklmnopqrstuvw
enc(x) => a, b.b => yzabcdefghijklmnopqrstuvwx
enc(y) => a, b.b => zabcdefghijklmnopqrstuvwxy
enc(z) => a, b.b => abcdefghijklmnopqrstuvwxyz
[+] script end

可以看到實際上,雖然每次new了一個新的實體,但是實體中的static變數是變了的,這導致了之前的爆破會影響到下一次爆破,同時也可以看到加密結果全部都是a,所以如果要爆破,就得想辦法讓每次爆破,新的實體中的值不變,

需要使用bvar._b.value = https://www.cnblogs.com/hetianlab/p/StringClass.$new("abcdefghijklmnopqrstuvwxyz");這樣的語法對static型別的變數重新設值,

需要注意的是有些變數在jadx/jeb中看到的名字可能會被多載,需要加一個下劃線比如b -> _b,可以通過console列印看看是不是unknow,也可以直接用jadx右鍵復制frida片段,查看此變數frida需不需要加一個下劃線

解題腳本的思路就很簡單,單個字符來爆破,每次重新生成類的實體,并將類中的值置為初始狀態(通過呼叫類$init方法),

exp

function main() {
    Java.perform(function x() {
        console.log('[+] script load');
?
        var b = Java.use("com.a.easyjava.b");
        var a = Java.use("com.a.easyjava.a");
        var IntClass = Java.use("java.lang.Integer");
        var StringClass = Java.use("java.lang.String");
        var ArrayList = Java.use("java.util.ArrayList");
        var MainActivity = Java.use("com.a.easyjava.MainActivity");
?
        var flag = new Array();
        var cipher = "wigwrkaugala";
?
        var bvar = b.$new(IntClass.$new(2));
        var avar = a.$new(IntClass.$new(3));
?
        for (var _ = 0; _ < cipher.length; _++) {
            for (var i = 97; i < 123; i++) { // 97 - 123是字母a-z
                // reset static value
                bvar._b.value = https://www.cnblogs.com/hetianlab/p/StringClass.$new("abcdefghijklmnopqrstuvwxyz");
                bvar.d.value = https://www.cnblogs.com/hetianlab/p/IntClass.$new(0);
                bvar._a.value = ArrayList.$new();
                bvar["$init"](IntClass.$new(2));
?
                avar.b.value = https://www.cnblogs.com/hetianlab/p/StringClass.$new("abcdefghijklmnopqrstuvwxyz");
                avar.d.value = https://www.cnblogs.com/hetianlab/p/IntClass.$new(0);
                avar._a.value = ArrayList.$new();
                avar["$init"](IntClass.$new(3));
?
                var s = String.fromCharCode(i);
                flag.push(s);
?
                for (var e = 0; e < flag.length; e++) {
                    var c = MainActivity.a(flag[e].toString(), bvar, avar);
                    if (c != cipher[e]) {
                        break;
                    }
                }
                if (c == cipher[flag.length - 1]) {
                    console.log(flag);
                    break
                }
                flag.length -= 1;
            }
        }
        console.log('flag{' + flag.join('') + '}');
        console.log('[+] script end');
    })
}
setImmediate(main);

結果

root@kali ~/frida-script-dev# python3 loader.py
[+] script load
v
v,e
v,e,n
v,e,n,i
v,e,n,i,v
v,e,n,i,v,i
v,e,n,i,v,i,a
v,e,n,i,v,i,a,i
v,e,n,i,v,i,a,i,v
v,e,n,i,v,i,a,i,v,i
v,e,n,i,v,i,a,i,v,i,c
v,e,n,i,v,i,a,i,v,i,c,i
flag{veniviaivici}
[+] script end

更多網安技能的在線實操練習,請點擊這里>>

合天智匯:合天網路靶場、網安實戰虛擬環境

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/557024.html

標籤:其他

上一篇:2023年最具威脅的25種安全漏洞(CWE TOP 25)

下一篇:返回列表

標籤雲
其他(162392) Python(38274) JavaScript(25530) Java(18294) C(15239) 區塊鏈(8275) C#(7972) AI(7469) 爪哇(7425) MySQL(7294) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5876) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4615) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2438) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) HtmlCss(1995) .NET技术(1986) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1882) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • Frida主動呼叫java函式來爆破解題思路

    利用Frida去呼叫java代碼中的類,然后爆破。算是一種主動呼叫的方法。主動呼叫可以用于爆破,模擬程式部分執行,需要注意的知識點是在java代碼中的static型別資料在爆破程序中需要每次都對這種型別值重新設定。 ......

    uj5u.com 2023-07-12 08:09:03 more
  • 2023年最具威脅的25種安全漏洞(CWE TOP 25)

    摘要: CWE Top 25 是通過分析美國國家漏洞資料庫(NVD)中的公共漏洞資料來計算的,以獲取前兩個日歷年 CWE 弱點的根本原因映射。 本文分享自華為云社區《2023年最具威脅的25種安全漏洞(CWE TOP 25)》,作者: Uncle_Tom 。 CWE Top 25 是通過分析美國國家 ......

    uj5u.com 2023-07-12 08:08:56 more
  • 資料結構鏈表的基本操作

    ```java /*資料結構單向鏈表基本操作 節點類 */ import java.util.Iterator; import java.util.function.Consumer; public class shujujiegou implements Iterable {//整體 privat ......

    uj5u.com 2023-07-11 08:03:35 more
  • 【筆者感悟】筆者的作業感悟【二】

    博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ......

    uj5u.com 2023-07-11 08:03:30 more
  • web安全學習日志---xss漏洞(跨站腳本攻擊)

    1.反射性xss(reflacted) 僅執行一次,非持久型。主要存在于攻擊者將惡意腳本附加到url的引數中,發送給受害者,服務端未經嚴格過濾處理而輸出在用戶瀏覽器中,導致瀏覽器執行代碼資料。 利用場景: 直接插入JS代碼,修改url引數 攻 <script>alert('hack')</scrip ......

    uj5u.com 2023-07-11 08:03:16 more
  • 云原生周刊:Dapr 完成模糊測驗審計 | 2023.7.10

    ## 開源專案推薦 ### [Shell-operator](https://github.com/flant/shell-operator) Shell-operator 是一個在 Kubernetes 集群中運行事件驅動腳本的工具。 ### [node-problem-detector](htt ......

    uj5u.com 2023-07-11 08:03:06 more
  • 基于AidLux的自動駕駛智能預警應用方案

    1. 自動駕駛感知演算法及AidLux相關方案介紹 1.1自動駕駛 自動駕駛汽車,又稱無人駕駛車、電腦駕駛車、無人車、自駕車,是一種需要駕駛員輔助駕駛或者完全不需要操控的車輛。作為自動化載具,自動駕駛汽車可以不需要人類操作即能感知環境及導航。 1.2 自動駕駛系統的組成部分 1.2.1 環境感知系統 ......

    uj5u.com 2023-07-11 08:02:56 more
  • 共探AI大模型時代下的挑戰與機遇,華為云HCDE與大模型專家面對面

    摘要:近日,華為開發者大會2023(cloud)“開發者生態創新發展圓桌會議”在東莞華為溪流背坡村成功舉辦。 2023年7月8日,華為開發者大會2023(cloud)“開發者生態創新發展圓桌會議”在東莞華為溪流背坡村成功舉辦。以大模型為代表的的新一輪人工智能技術浪潮洶涌而來,在圓桌會議上,華為技術專 ......

    uj5u.com 2023-07-11 08:02:39 more
  • 跨境電商企業出海,注意五大業務欺詐風險!

    中國跨境出海業務快速發展并呈現出積極的現狀,越來越多的中國企業開始探索海外市場,尋求更大的發展機遇和國際化的競爭優勢。 從國有企業到民營企業,從基建、外貿專案到制造業、服務業、高端科技企業,從東南亞延伸至“一帶一路”沿線國家和地區,中國企業“走出去”步伐逐漸加快。資料顯示,2022年,中歐貿易逆勢增 ......

    uj5u.com 2023-07-11 08:02:34 more
  • 華為云開發者聯盟助力培養數字化人才,加速應用構建質效提升

    摘要:大會第三天依舊熱鬧非凡,精彩活動紛至沓來。眾人矚目的專題論壇如期舉行,專家們圍繞技術開發、行業實踐最新趨勢,分享寶貴經驗和深刻見解。 本文分享自華為云社區《華為云開發者聯盟助力培養數字化人才,加速應用構建質效提升》,作者:華為云社區精選 。 在前兩天的大會期間,我們不僅享受了精彩的云技術盛宴, ......

    uj5u.com 2023-07-11 08:02:06 more