主頁 >  其他 > Unity——淺談AB包(AssetBundle)

Unity——淺談AB包(AssetBundle)

2021-01-11 16:34:44 其他

淺談AB包


Unity資源管理

在Unity中,一般來說,資源加載方式主要分為Resources加載和AssetBundle加載,

Unity有個特殊檔案夾Resources,放在這個檔案夾下的資源可以通過Resources.Load()來直接加載,即Resources加載資源方式,

當獲得AssetBundle之后,也可以呼叫AssetBundle對應的API來加載資源,


什么是AB包

AB包全名AssetBundle(資源包),是一種Unity提供的用于存放資源的包,通過將資源分布在不同的AB包中可以最大程度地減少運行時的記憶體壓力,并且可以有選擇地加載內容,


為什么要用AB包

1、熱更新,(要熱更新需要確保AB包打出來的資源具有唯一性,且相同資源的AB包檢驗碼相同,)

2、Resources加載雖然簡單方便,但是也有很多問題:

  • 對記憶體管理造成一定的負擔,
  • 在打開應用時加載時間很長,
  • Resources檔案夾下的所有資源統一合并到一個序列化檔案中(可以看成統一打一個大包,巨型AB包有什么問題它就有什么問題),對資源優化有一定的限制,
  • 不建議大量使用Resources,

使用方法

打AB包:

public static AssetBundleManifest BuildAssetBundles(string outputPath, BuildAssetBundleOptions assetBundleOptions, BuildTarget targetPlatform);

BuildAssetBundleOptions列舉型別的值轉化為二進制都是只有一位是1,其他位都是0,如UncompressedAssetBundle是0000 0000 0001,IgnoreTypeTreeChanges是0000 0100 0000,DisableLoadAssetByFileName是1000 0000 0000,

BuildAssetBundles底層會對傳入的BuildAssetBundleOptions值進行處理,根據二進制位數來判斷使用哪種策略構建AB包,因此如果在構建AB包時想要使用多種策略,用&連接即可,

BuildTarget引數用來選擇針對的平臺,因為AB包在不同平臺下是不兼容的,

設定資源AB包名:

AssetImporter.assetBundleName // AB包名
AssetImporter.assetBundleVariant // AB包變體名

獲取AB包方法:

AssetBundle.LoadFromFile(string path)
AssetBundle.LoadFromFileAsync(string path)
AssetBundle.LoadFromMemory(byte[] binary)
AssetBundle.LoadFromMemoryAsync(byte[] binary)
AssetBundle.LoadFromStream(Stream stream)
AssetBundle.LoadFromStreamAsync(Stream stream)
WWW.assetBundle

LoadFromFile是從檔案中加載AB包,它從一個給定的路徑來加載AB包,如果AB包是LZ4加載方式,它只會加載AB包的Header,之后需要什么資源再加載那部分的AB包chunk,極大的減少了記憶體占用,(LoadFromFileAsync是它的異步版本)

LoadFromMemory是從記憶體中加載AB包,它從記憶體中的byte[]中加載AB包,它會完整的把AB包加載出來,(LoadFromMemoryAsync是它的異步版本)

LoadFromStream是從流中加載AB包,它從一個Stream中加載AB包,跟LoadFromFile一樣,如果AB包是LZ4加載方式,它也是只會加載AB包的Header,(LoadFromStreamAsync是它的異步版本)

WWW是Unity中的跟網路相關的類,可以通過該類從網路中下載資源,之后加載成AB包,

加載資源方法:

AssetBundle.LoadAsset(string assetName, Type resType)
AssetBundle.LoadAssetAsync(string assetName, Type resType)

LoadAsset是同步方法,LoadAssetAsync是異步方法,


還有很多關于AssetBundle的方法,官方API中有詳細的介紹,


AB包變體

即AssetBundleVariant,AB包變體被用來支持定制化引數,允許不同AB包中的不同Object在加載和決議instance ID參考時顯示為相同Object,

從概念上講,允許兩個Object顯示為共享相同的GUID和Local ID,但實際上由Variant ID來區分,

簡而言之,實際上就是一個資源的分類標簽,

如同一圖片的高清和低清資源,同一模型的高精度和低精度資源,

在Unity編輯器右下角設定AB包名的后面就是設定AB包變體名,


BuildAssetBundleOptions:

None - 0:默認方式,使用LZMA壓縮演算法,該演算法壓縮后包體很小,但是加載的時候需要花費很長的時間解壓,第一次解壓之后,該包又會使用LZ4壓縮演算法再次壓縮,這就是為什么第一次加載時間長,之后加載時間就沒那么長了,(LZMA需要完整解壓之后才能加載包內資源,LZ4不需要完整解壓就可以加載包內資源,)

UncompressedAssetBundle - 1:不壓縮,雖然包體大,但是加載快,

DisableWriteTypeTree - 8:不包含TypeTree資訊,雖然可以使得AB包更小,但是對低版本不兼容,不建議使用,

DeterministicAssetBundle - 16:創建一個哈希來映射存盤在AB包里的物件的id,

ForceRebuildAssetBundle - 32:強制重建AB包,

IgnoreTypeTreeChanges - 64:當做增量構建檢測時,忽略type tree的變化,

AppendHashToAssetBundleName - 128:添加哈希到AB包名,

ChunkBasedCompression - 256:使用基于塊的LZ4壓縮演算法,

StrictMode - 512:如果在構建時有任何錯誤,則不允許構建成功,

DryRunBuild - 1024:干構建,

DisableLoadAssetByFileName - 4069:禁止AB包通過檔案名加載資源,

DisableLoadAssetByFileNameWithExtension - 8192:禁止AB包通過檔案擴展名加載資源,

AssetBundleStripUnityVersion:構建時從壓縮檔案和序列化檔案的header中移除Unity版本號,


LZMA和LZ4

LZMA是流壓縮方式(stream-based),流壓縮再處理整個資料塊時使用同一個字典,它提供了最大可能的壓縮率,但是只支持順序讀取,所以加載AB包時,需要將整個包解壓,會造成卡頓和額外記憶體占用,

LZ4是塊壓縮方式(chunk-based),塊壓縮的資料被分為大小相同的塊,并被分別壓縮,如果需要實時解壓隨機讀取,塊壓縮是比較好的選擇,LoadFromFile()和LoadFromStream()都只會加載AB包的Header,相對LoadFromMemory()來說大大節省了記憶體,


記憶體占用

下面是AB包再記憶體中的占用情況:

AssetBundle記憶體

這是從網路中下載資源的記憶體占用情況,

下載的資源包括AB包、圖片、材質、影片、音頻等,以Stream的形式存盤在記憶體中,(AB包中也可以有圖片、材質、影片、音頻等資源)

之后通過加載AB包的方法,將AB包加載到記憶體中去,

AB包內的資源需要通過AssetBundle.Load()來加載到記憶體中,

對于GameObject來說,通常情況下需要對其進行改動,所以它是完全復制一份該資源來進行的實體化,也就是說,當AB包中的GameObject從記憶體中卸載后,實體化的GameObject不會因此丟失,并且對實體化物件的修改不會影響到GameObject資源,

對于Shader和Texture來說,通常情況下不需要對其進行改動,所以它是通過參考來進行的實體化,也就是說,當AB包中的Shader和Texture資源從記憶體中卸載后,實體化的Shader和Texture會出現資源丟失的情況,并且對實體化物件的修改會影響到Shader和Texture資源,

對于Material和Mesh來說,有時候可能需要對其進行改動,所以它是通過參考+復制來進行的實體化,也就是說,當AB包中的Material和Mesh資源從記憶體中卸載后,實體化的Material和Mesh會出現資源丟失的情況,并且對實體化物件的修改不會影響到Material和Mesh資源,

總結大致流程為:

AB包先要從硬碟或者網路中加載到記憶體中,然后將AB包內的每一份資源加載到記憶體中,再之后在記憶體中實體化這些資源,每種資源有其自己不同的實體化方式,卸載資源的時候需要注意,


AB包內部結構

AssetBundleFileHeader:記錄了版本號、壓縮等主要描述資訊,

AssetFileHeader:包含一個檔案串列,記錄了每個資源的name、offset、length等資訊,

Asset1:

  • AssetHeader:記錄了TypeTree大小、檔案大小、format等資訊,
  • TypeTree(可選,有不要TypeTree的構建方式):記錄了Asset物件的class ID,Unity可以用class ID來序列化和反序列化一個類,(每個class對應了一個ID,如0是Object類,1是GameObject類等,具體可在Unity官網上查詢,)
  • ObjectPath:記錄了path ID(資源唯一索引ID)等,
  • AssetRef:記錄了AB包對外部資源對參考情況,

Asset2…


.manifest

這是AB包對應的.manifest檔案,

ManifestFileVersion: 0 # 檔案版本
CRC: 2657307167 # CRC校驗碼
Hashes: # 哈希
  AssetFileHash: # AB包中所有資源的哈希,可用于增量更新檢測
    serializedVersion: 2 # Unity序列化版本
    Hash: 717e408ba50ee41b0960161fd2d5a827
  TypeTreeHash: # AB包中所有型別的哈希,可用于增量更新檢測
    serializedVersion: 2 # Unity序列化版本
    Hash: 8d552bf2f5bdba1177c938cb98ca6f2f
HashAppended: 0
ClassTypes: # TypeTree
- Class: 1 # GameObject
  Script: {instanceID: 0}
- Class: 21 # Material
  Script: {instanceID: 0}
- Class: 28 # Texture2D
  Script: {instanceID: 0}
- Class: 48 # Shader
  Script: {instanceID: 0}
- Class: 114 # MonoBehaviour
  Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- Class: 114 # MonoBehaviour
  Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- Class: 114 # MonoBehaviour
  Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- Class: 114 # MonoBehaviour
  Script: {fileID: -146154839, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- Class: 114 # MonoBehaviour
  Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- Class: 114 # MonoBehaviour
  Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- Class: 114 # MonoBehaviour
  Script: {fileID: 11500000, guid: 20e8969313b8e4614b498f042e99683a, type: 3}
- Class: 114 # MonoBehaviour
  Script: {fileID: 11500000, guid: c86dbe77db44a434bb15895563508b65, type: 3}
- Class: 114 # MonoBehaviour
  Script: {fileID: 11500000, guid: 1a7e2f4cb82d9b94a91270d550c880c0, type: 3}
- Class: 115 # MonoScript
  Script: {instanceID: 0}
- Class: 128 # Font
  Script: {instanceID: 0}
- Class: 198 # ParticleSystem
  Script: {instanceID: 0}
- Class: 199 # ParticleSystemRenderer
  Script: {instanceID: 0}
- Class: 213 # Sprite
  Script: {instanceID: 0}
- Class: 222 # CanvasRenderer
  Script: {instanceID: 0}
- Class: 224 # RectTransform
  Script: {instanceID: 0}
- Class: 687078895 # SpriteAtlas
  Script: {instanceID: 0}
Assets: # 包含資源
- Assets/Bundle/.../a.prefab
- Assets/Bundle/.../b.prefab
- Assets/Bundle/.../c.spriteatlas
Dependencies: # AB包依賴
- /Users/apple/.../AssetBundles/Android/q
- /Users/apple/.../AssetBundles/Android/w
- /Users/apple/.../AssetBundles/Android/e
- /Users/apple/.../AssetBundles/Android/r
- /Users/apple/.../AssetBundles/Android/t

特殊路徑

Resources

對應的是Resources特殊檔案夾路徑,(只讀)

在Unity下對應為:/Assets/Resources,


Application.streamingAssetsPath

對應的是StreamingAsset檔案夾路徑,(只讀)

在Unity下對應為:/Assets/StreamingAssets,

在Android下對應為:jar:file:///data/app/xxx.apk!/assets,

在iOS下對應為:Application/…/xxx.app/Data/Raw,


Application.persistentDataPath

對應的是應用持久化資料存盤檔案夾路徑,應用更新、覆寫安裝時,這里的資料都不會被清除,(可讀可寫)

在Unity下對應為:/該Unity專案檔案夾路徑,

在Android下對應為:/…/data/應用名/files,

在iOS下對應為:Application/…/Documents,iOS還會自動將persistentDataPath路徑下的檔案上傳到iCloud,會占用用戶的iCloud空間,如果persistentDataPath路徑下的檔案過多,蘋果審核可能被拒,所以,iOS平臺,有些資料得放temporaryCachePath路徑下,


Application.dataPath

對應的是應用Asset檔案夾路徑,(只讀,Android不可讀,因為改目錄指向的是個.apk檔案,而不是目錄)

在Unity下對應為:/Assets,

在Android下對應為:/data/app/…/xxx.apk,

在iOS下對應為:Application/…/xxx.app/Data,


Application.temporaryCachePath

對應的是應用臨時資料快取檔案夾路徑,(只讀)

在Unity下對應為:/該Unity專案檔案夾路徑,

在Android下對應為:/…/data/應用名/cache,

在iOS下對應為:Application/…/Library/Caches,


依賴問題

依賴問題,通俗的話來說就是A包中某資源用了B包中的某資源,然而如果A包加載了,B包沒有加載,這就會導致A包中的資源出現丟資源的現象,

在Unity5.0后,BuildAssetBundleOptions.CollectDependencies永久開啟,即Unity會自動檢測物體參考的資源并且一并打包,防止資源丟失遺漏的問題出現,

因為這個特性,有些情況下,如果沒指定某公共資源的存放在哪個AB包中,這個公共資源就會被自動打進參考它的AB包中,所以出現多個不同的AB包中有重復的資源存在的現象,這就是資源冗余,

這種情況下,哪怕資源是一模一樣,也無法進行合并優化,

要防止資源冗余,就需要明確指出資源存放在哪個AB包中,形成依賴關系,所以對于一些公共資源,建議單獨存放在一個AB包中,


在加載的時候,如果AB包之間相互依賴,那么加載一個AB包中的資源時,先需要加載出另一個AB包的資源,這樣就會導致不必要的消耗,所以說盡可能地減少AB包之間的依賴,并且公共資源盡量提前加載完成,


細粒度問題

細粒度問題即每個AB包分別放入多少資源的問題,一個好的策略至關重要,

加載資源時,先要加載AB包,再加載資源,如果AB包使用了LZMA或LZ4壓縮演算法,還需要先給AB包解壓,

AB包數量較多,包內資源較少AB包數量較少,包內資源較多
加載一個AB包到記憶體的時間短,玩家不會有卡頓感,但每個資源實際上加載時間變長,加載一個AB包到記憶體的時間較長,玩家會有卡頓感,但之后包內的每個資源加載很快,
熱更新靈活,要更新下載的包體較小,熱更新不靈活,要更新下載的包體較大,
IO次數過多,增大了硬體設備耗能和發熱壓力,IO次數不多,硬體壓力小,

簡單策略:

  • 經常更新和不經常更新的物件拆分到不同的AB包中,
  • 同時加載的物件放在一個AB包中,
  • 不可能同時加載的物件拆分到不同的AB包中,
  • 根據專案邏輯功能來分組打AB包,
  • 根據同一型別物件來分組打AB包,
  • 公共資源和非公共資源拆分到不同的AB包中,

卸載問題

當呼叫Resources.UnloadAsset()時,雖Object被銷毀,但Instance ID被保留且包含有效的GUID和Local ID參考,

當呼叫AssetBundle.Unload(true)時,不僅Object被銷毀,而且Instance ID的GUID和Local ID參考變無效,

當呼叫AssetBundle.Unload(false)時,雖Object不被銷毀,但Instance ID的GUID和Local ID參考變無效,場景中的物體會與該AB包分離鏈接,即該物體的instance ID參考的GUID和Local ID會斷開參考,無法再通過該instance ID找到GUID和Local ID,

如果再次加載該AB包時,分離了鏈接的物體不會受該新加載的AB包管理,因此如果不注意的話可能會導致一些不可控的問題,Unity中有Resources.UnloadUnusedAssets()方法可以很好地解決這個問題,


AB包的加密

因為AB包存放著游戲的各種資源,所以如果AB包不加密,那么別人在得到AB包的時候可以直接看到AB包內所有的資源,經過一定特殊操作后可以直接從AB包中匯出圖片、音頻、影片,甚至可以在Unity中直接實體化出來另存為Prefab,

加密思路如下:

1、在構建完AB包后,可以將AB包中的內容以byte[]形式讀取,

2、之后選用任意加密方式對該byte[]加密,

3、加密完后重新寫入AB包中,

4、AB包加密完成,

這樣對AB包加密之后,如果使用AssetBundle.LoadFromFile()來加載加密的AB包是會報錯的,因為Unity以及無法識別加密過后的內容了,這樣也就防止了別人隨意對AB包進行的讀取和加載,保證了資源的安全性,

解密思路如下:

1、先以byte[]形式讀取AB包中的內容,

2、之后使用對應的解密演算法對該byte[]進行解密,

3、解密過后的byte[]通過AssetBundle.LoadFromMemory()來進行加載,

4、AB包加載完成,

總的來說,這種二進制加密AB包的方式雖然有效,但是加載時間和記憶體占用是一個需要考慮的問題,很多時候選擇不進行加密,一方面原因是因為需要多占用一份記憶體的問題,代價過大,雖然說從byte[]加載成AB包之后,byte[]可以從記憶體中釋放,但是在加載的程序中還是會有一個記憶體占用的巔峰,

另一種簡單的加密方式,即可以實作直接手段加載不出AB包,而且相對上述二進制加密AB包方式加載更快、耗費更小,

本質是通過在AB包中添加偏移量來實作加密,

public static AssetBundle LoadFromFile(string path, uint crc, ulong offset);

AssetBundle.LoadFromFile()的第三個引數是AB包內容的byte偏移量,也就是說從offset個byte開始讀取AB包的內容,

因此如果在構建完AB包之后,在AB包前插入N個隨機byte,那么此時想要加載該AB包,如不知道這個N值,則是無法成功讀取和加載AB包的,這也就實作了加密,


從Stream中加載

AssetBundle.LoadFromStream()不像AssetBundle.LoadFromMemory()會多占用一份記憶體,

public static AssetBundle LoadFromStream(Stream stream, uint crc, uint managedReadBufferSize)

這是從托管流中加載AB包的方法,它跟LoadFromFile()一樣,只會讀取AB包的頭檔案,

使用Stream加載的限制:

1、AB包資料必須是從Stream的0位置開始,

2、當從AssetBundle資料的末尾開始并嘗試讀取資料時,Stream實作必須回傳讀取的0位元組且不引發例外,

3、Stream必須是可讀(CanRead回傳true)和可搜尋(CanSeek回傳true)的,

4、可以從任何Unity執行緒中呼叫Seek()和Read(),


CRC校驗

AB包加載資源的完整方法實際上是AssetBundle.LoadFromFile(string path, uint crc, ulong offset),三個引數,其中第二個引數就是CRC校驗符,

每個AB包的.manifest檔案中也有CRC校驗符,用于校驗資料完整性,


各種ID

序列化后,資源用GUID和Local ID管理,

GUID對應Asset,GUID存在.meta檔案中,提供了檔案特定位置的抽象,是一種映射,無需關心資源在磁盤上的存放位置,

Local ID對應Asset內的每一個Object,(Asset中)


雖然GUID和Local ID比較好用,但是畢竟因為存在磁盤上,讀取比較耗時,因此Unity快取一個instance ID對應Object,通過instance ID快速找到Object,instance ID是一種快速獲取物件實體的ID,包含著對GUID和Local ID的參考,決議instance ID可以快速回傳instance表示的已加載物件,如果為加載目標物件,則可以將檔案GUID和Local ID決議為物件源資料,從而允許Unity即時加載物件,每次AB包重新加載時,都會為每個物件創建新的instance ID,


總結

沒有最好的打AB包方式,只有最適合專案的打AB包方式,


參考資料

https://docs.unity3d.com/ScriptReference/AssetBundle.html
https://docs.unity3d.com/Manual/ClassIDReference.html
https://www.xuanyusong.com/?s=AssetBundle
https://blog.csdn.net/lodypig/category_6315960.html
https://blog.csdn.net/BillCYJ/article/details/99712313
https://learn.unity.com/tutorial/assets-resources-and-assetbundles#5c7f8528edbc2a002053b5a6



后記

這是很早之前學習AB包的時候寫的筆記,有很多地方理解不到位,歡迎各位進行指正和討論,

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

標籤:其他

上一篇:Turtlebot3除錯必看——爬坑筆記

下一篇:動態規劃-數字三角形模型

標籤雲
其他(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