---
# System prepended metadata

title: 資安系列讀書會 part 2

---

# 資安系列讀書會part 2筆記
時間：2023/10/11
講者：陳兆閔
簡報連結：https://docs.google.com/presentation/d/15cgJYQ_8S3YdUlzSicowIiMC0RmgDX6L56FZpn2crmE/edit#slide=id.p

## 資安

* 各領域都需要在意
* 功能->風險->漏洞
* 有各種sub domain
    * 防火牆->流量控管、封包分析
    * 病毒防護->逆向工程、作業系統、資料探勘
    * 數據加密->密碼學
    * 安全政策->ISO

## 如何設計

* 各種成本限制
    * 主機效能
    * 網路流量
    * 開發時程
* 儲存方案
    * json,binary
    * SQL
    * 自訂義
* 使用者體驗
    * 中途斷線重連機制

## 抽卡系統hack

* 順序決定方式
    * 透過預測決定順序的規則來預判結果
* 數據儲存方式
    * 透過修改數據儲存位置更改結果
* vuln(漏洞)
    * 利用備份資料
    * LCG attack
    * 直接修改local數據

## 及時對戰系統 hack
* 修改邏輯
* 直接傳送傷害資料包
* 無視受到的傷害包
<br>
### 只要有功能，就會衍生出風險以及漏洞，所以在設計階段時就要做好使用者輸入的驗證及成本管理
<br>




# 需求與風險: 遊戲設計哲學

## core aspect

* 盡量不要重新造輪子
* 實作越複雜的功能，越有可能出現漏洞
* 直接使用別人的library，會繼承他的風險
* 但是我們沒辦法避免重複造輪子

## 網路資料傳輸設計
* TCP
    * 高延遲
    * 保證資料送達&完整性
* UDP
    * 低延遲
    * 無罰保證完整性
    * 大部分遊戲採用
* 攻擊手段
    * 緩衝區溢位攻擊with window size control
* 實際例子
    * Valve Source Engine RCE

## It's not a bug. It's a feature!!

### 即時射擊遊戲設計

* wall hacks(透視掛)
    * 將所有玩家資訊撈出來後畫一層在畫面上
    
### unity game engine & C#

* unity為目前市面上開發者最喜歡用的遊戲引擎
* unity 101 in 30 sec
    * 遊戲內可分成數個場景
    * 每個場景有數個遊戲物件(GameObject)
    * 每個遊戲物件內可以有數個元件(Component)
    * 每個元件通常是一個物件(aka 一段C #程式碼)

* C# with unity in 30 sec
    * u_can_see_in_editor: 沒辦法被其他物件摸到 但可以從編輯器修改
    * u_can_t_see: 只有自己可以摸到
    * u_can_see_anywhere: 編輯器跟其他物件都可以摸到
* 成品環境
    * mono
    * il2cpp

<br>

## 攻與防: 遊戲上的冰與火之歌

* 常見的作弊方式及防護手段
    * 記憶體修改
        * 可使用檔案完整性驗證、作業系統防作弊驅動
    * 封包攔截/修改/重放
        * 封包加密

* 實例1:MITM(中間人攻擊)
    * 原始數據並未加上nonce(單次驗證碼)導致封包可以被攔截重放
    * 憑證驗證機制可被繞過 可連線至偽造的網站
    * 透過中間人攻擊(MITM)建立流量轉發(proxy) 並且修改/重放封包取得任意虛寶

* 實例2:Genshin impact
    * 避免被逆向工程所做的防護 
    * 手法
        * 加密il2cpp常用的global-metadata.dat
        * 自定義global-metadata.dat內部結構
        * 對global-metadata.dat內部字串進行二次加密
        * 部分原始碼混淆

* 實例3:Genshin impact












