主頁 >  其他 > 對飛豬H5端API介面sign簽名逆向實驗

對飛豬H5端API介面sign簽名逆向實驗

2022-01-17 16:57:04 其他

免責宣告
本文章所提到的技術僅用于學習用途,禁止使用本文章的任何技術進行發起網路攻擊、非法利用等網路犯罪行為,一切資訊禁止用于任何非法用途,若讀者利用文章所提到的技術實施違法犯罪行為,其責任一概由讀者自行承擔,與作者無關,

0x01 前言

研究飛豬旅行HTML5端sign簽名程序,以復刻sign簽名程序為手段,以查詢酒店價格為目標,以學習技術要點、思路以及如何防范為宗旨,展開對飛豬H5端API介面sign簽名的研究,

0x02 尋突破口

捕獲目標API請求資料包

使用瀏覽器F12開發者工具開啟設備模擬器模式,訪問酒店搜索頁面,隨便搜索一家酒店并進入酒店的詳情頁面,詳情頁面請求將全部被捕獲于開發者工具的NetWork(網路)選項卡中,

image

使用Ctrl+F查找頁面中對應價格的數字,定位到請求資料包位置,

image

分析資料包Payload

除了sign簽名的一串看似md5密文但實際上又不是md5密文的欄位以外,其他欄位都很好理解,但如果除了sign簽名欄位以外的其他欄位修改后,sign簽名也必須跟著改動,并且是以一個固定的加密規則進行運算后得出來的sign簽名字串,故當務之急需要找到sign簽名的位置并把它運算的函式復刻下來,驗證加密函式的可用性,

欄位 盲猜意義
type originaljson 應該是指請求源型別是json
api mtop.trip.hotel.hotelDetail 告訴服務器需要呼叫的api服務
v 1.0 API協議版本
params [object Object] 不懂,估計是傳值的時候把整個物件傳給params了
ttid 201300@travel_h5_3.1.0 應該也是api所屬版本號
appKey 12574478 顧名思義,具體用處可以查看淘寶的API開放檔案
t 1641821310356 時間戳
sign bb6db2ea281d6422409d820d8223147 經過一系列加密后的sign簽名
data(BODY) 一大串JSON文本 這就是真正要傳的請求資料文本

image

定位sign簽名位置

需要找到sign簽名的運算函式,首先得找到sign簽名字串在哪里賦的值,定位某個請求引數賦值的方法有很多種,有做hook的、有Ctrl+Shift+F的、有用XHR斷點的,等等非常多的方法,而且有一些復雜的網站往往需要將這些方法組合使用才能找到某個引數的賦值位置,而在本專案,直接使用Ctrl+Shift+F大法即可,

嘗試使用Ctrl+Shift+F大法解決問題是一件性價比很高的事情,前提是你需要猜測網站js源代碼引陣列合邏輯背后的程序,
本專案例子:URL的sign簽名引數,可猜測網站js源代碼拼接該引數時使用了"&sign=""sign=""sign"
!!此方法不一定適用于任何網站,若js原始碼混淆嚴重,失去了字串原本的意義,則無法使用該方法查找(往后若有專案可演示其他搜索方法)

現在,嘗試使用全域搜索"sign="字串,馬上能定位到可疑的sign簽名賦值的代碼陳述句,

image

可以看到有三條疑似給sign簽名賦值的三個js檔案,這時候需要根據逆向經驗去猜測原始碼應該會使用哪個去進行sign簽名的賦值和加密,但如果沒有逆向經驗的判斷,也可以對搜索出來的三個js檔案可疑的代碼段進行同時斷點,逐個查看分析,

其實可以在Network(網路)選項卡的請求項中查看Initiator里的Request call stack,往往最后出現最多次的js檔案,即是請求加密所執行的js檔案,在這里,出現最多次的是seed-min.js檔案,我們鎖定它,然后進行代碼段的斷點,

image

8548行做一個斷點,重新重繪頁面,讓前端重新請求一個資料包并把它斷點截獲,

image

0x03 順藤摸瓜尋加密入口

斷點被捕獲后,在Sources(源)選項卡中,查看被斷點后時的Scope(本地變數)CallStack(呼叫堆疊),通過這兩個資訊順藤摸瓜到加密函式的入口處,

image

顯然,這里的變數e就是我們要找的sign簽名字串,于是我們從這里開始順藤摸瓜,找到加密入口的地方,

分析方法y(i.data, m, S.a, v)

以下代碼段很顯然,變數e是由方法y(i.data, m, S.a, v)運算以后得來的,所以我們得進入y的函式內部,

y(i.data, m, S.a, v).then((function(e) {
	d.push("sign=" + e),
	n({
		originPath: f,
		search: d
	})
}))

image

把游標放在方法名上,會顯示方法所在位置,點擊可以進入到對應的方法的定義位置,

方法y(e, t, n, r)內仍然幾個值得斷點查看的方法_(n)、方法d([n, t, r, e].join("&"))以及變數n

image

分析方法_(n)

顯然該方法是用來獲取cookies內的_m_h5_tk的值,并且執行方法v(n),將_m_h5_tk的值用下劃線"_"分割,取左邊部分,

image

分析方法d([n, t, r, e].join("&"))

通過對方法d([n, t, r, e].join("&"))處的斷點,查看以下4個變數的值,

引數名 解釋
n af5ea7aa071afc99d96745743d3634d0 _m_h5_tk值的左邊
t 1641959319288 時間戳
r 12574478 appKey
e {"_fli_newpage":"1","hid":"0","adultNum":2,"shid":1002342 ...... 真正要傳的請求資料文本

使用.join("&")將四個變數的值用"&"連接在一起,傳送給方法d()

image

使用單步執行進入方法d()內部,發現其傳參變數為e,其內容為:

"af5ea7aa071afc99d96745743d3634d0&1641959319288&12574478&{"_fli_newpage":"1","hid":"0","adultNum":2,"shid":1002342 ....
由于篇幅問題,不將變數e的值全部展開查看,但可以發現,確實是由以上表格的四個值用"&"拼接起來的,

// 方法d()的內部
d = (r = function(e, t) {
    return e << t | e >>> 32 - t
}
,
i = function(e, t) {
    var n, r, i, o, a;
    return i = 2147483648 & e,
    o = 2147483648 & t,
    a = (1073741823 & e) + (1073741823 & t),
    (n = 1073741824 & e) & (r = 1073741824 & t) ? 2147483648 ^ a ^ i ^ o : n | r ? 1073741824 & a ? 3221225472 ^ a ^ i ^ o : 1073741824 ^ a ^ i ^ o : a ^ i ^ o
}
,
o = function(e, t, n, o, a, s, c) {
    return e = i(e, i(i(function(e, t, n) {
        return e & t | ~e & n
    }(t, n, o), a), c)),
    i(r(e, s), t)
}
,
a = function(e, t, n, o, a, s, c) {
    return e = i(e, i(i(function(e, t, n) {
        return e & n | t & ~n
    }(t, n, o), a), c)),
    i(r(e, s), t)
}
,
s = function(e, t, n, o, a, s, c) {
    return e = i(e, i(i(function(e, t, n) {
        return e ^ t ^ n
    }(t, n, o), a), c)),
    i(r(e, s), t)
}
,
c = function(e, t, n, o, a, s, c) {
    return e = i(e, i(i(function(e, t, n) {
        return t ^ (e | ~n)
    }(t, n, o), a), c)),
    i(r(e, s), t)
}
,
u = function(e) {
    var t, n = "", r = "";
    for (t = 0; t <= 3; t++)
        n += (r = "0" + (e >>> 8 * t & 255).toString(16)).substr(r.length - 2, 2);
    return n
}
,
function(e) {
    var t, n, r, l, p, f, d, h, g, m;
    for (e = function(e) {
        e = e.replace(/\r\n/g, "\n");
        for (var t = "", n = 0; n < e.length; n++) {
            var r = e.charCodeAt(n);
            r < 128 ? t += String.fromCharCode(r) : r > 127 && r < 2048 ? (t += String.fromCharCode(r >> 6 | 192),
            t += String.fromCharCode(63 & r | 128)) : (t += String.fromCharCode(r >> 12 | 224),
            t += String.fromCharCode(r >> 6 & 63 | 128),
            t += String.fromCharCode(63 & r | 128))
        }
        return t
    }(e),
    t = function(e) {
        for (var t, n = e.length, r = n + 8, i = 16 * ((r - r % 64) / 64 + 1), o = new Array(i - 1), a = 0, s = 0; s < n; )
            a = s % 4 * 8,
            o[t = (s - s % 4) / 4] = o[t] | e.charCodeAt(s) << a,
            s++;
        return a = s % 4 * 8,
        o[t = (s - s % 4) / 4] = o[t] | 128 << a,
        o[i - 2] = n << 3,
        o[i - 1] = n >>> 29,
        o
    }(e),
    d = 1732584193,
    h = 4023233417,
    g = 2562383102,
    m = 271733878,
    n = 0; n < t.length; n += 16)
        r = d,
        l = h,
        p = g,
        f = m,
        d = o(d, h, g, m, t[n + 0], 7, 3614090360),
        m = o(m, d, h, g, t[n + 1], 12, 3905402710),
        g = o(g, m, d, h, t[n + 2], 17, 606105819),
        h = o(h, g, m, d, t[n + 3], 22, 3250441966),
        d = o(d, h, g, m, t[n + 4], 7, 4118548399),
        m = o(m, d, h, g, t[n + 5], 12, 1200080426),
        g = o(g, m, d, h, t[n + 6], 17, 2821735955),
        h = o(h, g, m, d, t[n + 7], 22, 4249261313),
        d = o(d, h, g, m, t[n + 8], 7, 1770035416),
        m = o(m, d, h, g, t[n + 9], 12, 2336552879),
        g = o(g, m, d, h, t[n + 10], 17, 4294925233),
        h = o(h, g, m, d, t[n + 11], 22, 2304563134),
        d = o(d, h, g, m, t[n + 12], 7, 1804603682),
        m = o(m, d, h, g, t[n + 13], 12, 4254626195),
        g = o(g, m, d, h, t[n + 14], 17, 2792965006),
        h = o(h, g, m, d, t[n + 15], 22, 1236535329),
        d = a(d, h, g, m, t[n + 1], 5, 4129170786),
        m = a(m, d, h, g, t[n + 6], 9, 3225465664),
        g = a(g, m, d, h, t[n + 11], 14, 643717713),
        h = a(h, g, m, d, t[n + 0], 20, 3921069994),
        d = a(d, h, g, m, t[n + 5], 5, 3593408605),
        m = a(m, d, h, g, t[n + 10], 9, 38016083),
        g = a(g, m, d, h, t[n + 15], 14, 3634488961),
        h = a(h, g, m, d, t[n + 4], 20, 3889429448),
        d = a(d, h, g, m, t[n + 9], 5, 568446438),
        m = a(m, d, h, g, t[n + 14], 9, 3275163606),
        g = a(g, m, d, h, t[n + 3], 14, 4107603335),
        h = a(h, g, m, d, t[n + 8], 20, 1163531501),
        d = a(d, h, g, m, t[n + 13], 5, 2850285829),
        m = a(m, d, h, g, t[n + 2], 9, 4243563512),
        g = a(g, m, d, h, t[n + 7], 14, 1735328473),
        h = a(h, g, m, d, t[n + 12], 20, 2368359562),
        d = s(d, h, g, m, t[n + 5], 4, 4294588738),
        m = s(m, d, h, g, t[n + 8], 11, 2272392833),
        g = s(g, m, d, h, t[n + 11], 16, 1839030562),
        h = s(h, g, m, d, t[n + 14], 23, 4259657740),
        d = s(d, h, g, m, t[n + 1], 4, 2763975236),
        m = s(m, d, h, g, t[n + 4], 11, 1272893353),
        g = s(g, m, d, h, t[n + 7], 16, 4139469664),
        h = s(h, g, m, d, t[n + 10], 23, 3200236656),
        d = s(d, h, g, m, t[n + 13], 4, 681279174),
        m = s(m, d, h, g, t[n + 0], 11, 3936430074),
        g = s(g, m, d, h, t[n + 3], 16, 3572445317),
        h = s(h, g, m, d, t[n + 6], 23, 76029189),
        d = s(d, h, g, m, t[n + 9], 4, 3654602809),
        m = s(m, d, h, g, t[n + 12], 11, 3873151461),
        g = s(g, m, d, h, t[n + 15], 16, 530742520),
        h = s(h, g, m, d, t[n + 2], 23, 3299628645),
        d = c(d, h, g, m, t[n + 0], 6, 4096336452),
        m = c(m, d, h, g, t[n + 7], 10, 1126891415),
        g = c(g, m, d, h, t[n + 14], 15, 2878612391),
        h = c(h, g, m, d, t[n + 5], 21, 4237533241),
        d = c(d, h, g, m, t[n + 12], 6, 1700485571),
        m = c(m, d, h, g, t[n + 3], 10, 2399980690),
        g = c(g, m, d, h, t[n + 10], 15, 4293915773),
        h = c(h, g, m, d, t[n + 1], 21, 2240044497),
        d = c(d, h, g, m, t[n + 8], 6, 1873313359),
        m = c(m, d, h, g, t[n + 15], 10, 4264355552),
        g = c(g, m, d, h, t[n + 6], 15, 2734768916),
        h = c(h, g, m, d, t[n + 13], 21, 1309151649),
        d = c(d, h, g, m, t[n + 4], 6, 4149444226),
        m = c(m, d, h, g, t[n + 11], 10, 3174756917),
        g = c(g, m, d, h, t[n + 2], 15, 718787259),
        h = c(h, g, m, d, t[n + 9], 21, 3951481745),
        d = i(d, r),
        h = i(h, l),
        g = i(g, p),
        m = i(m, f);
    return (u(d) + u(h) + u(g) + u(m)).toLowerCase()
})

至此,加密入口已暴露出來了,即方法d

0x04 驗證加密方法可用性

sign簽名方法已經拿到手,接下來當然是要驗證它是否可用,

Sources(源代碼)選項卡左側的Snippets(代碼片段)Tab頁中新增一個代碼片段,將sign簽名方法復制到里面將其保存,并且復制將4個關鍵引數傳入到方法中,然后點擊運行(Ctrl+Enter)

image

重新發送一個請求,然后將H5端真實發送的四個引數的值分別復制到自定義引數中,查看H5端生成的sign值是否與自己新建的代碼片段運行的值是一致的,若是一致的則表示該sign簽名函式可被使用,

image

image

image

image

可以看見飛豬H5端產生的sign值與自定義產生的sign值是一致的,都是fd232f8836d8713c277215d71f43820c,說明我們找到的sign簽名加密函式是正確的,

0x05 作者的一些話

該篇講述如何使用瀏覽器F12開發者工具對一個加密函式的定位與尋找思路,作者強烈反對大家使用該技術進行實質性地爬蟲以及其他形式的利用,

請時刻牢記:誰把法律當兒戲,誰就必然亡于法律,

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

標籤:其他

上一篇:cloudflare官方案例檔案使用腳本更新案列詳解【DDNS動態域名決議】

下一篇:XSS-lab通過教程🐶

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(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
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more