關於手遊反除錯的事

2021-09-13 18:32:52 字數 1453 閱讀 5255

tracerpid:/proc/self/status 的 tracerpid 字段,非除錯狀態下的數值為 0,除錯狀態下的數值為偵錯程式的程序 pid

子程序除錯:子程序對父程序進行除錯,占用除錯名額,防止其它偵錯程式附加

rtld_db_dlactivity:linker 符號rtld_db_dlactivity,函式指標,非除錯狀態下為空指標,除錯狀態下指向斷點;非匯出函式,遍歷記憶體中的/system/bin/linker的符號表獲得符號位址

debug 類:執行 android 系統函式android.os.debug.isdebuggerconnected(),返回當前的偵錯程式的附加狀態

方法效果

tracerpid

獲得偵錯程式pid

子程序除錯

佔據除錯名額,防止非法偵錯程式附加

rtld_db_dlactivity

獲得偵錯程式附加狀態

debug 類

獲得偵錯程式附加狀態

理論上這幾種反除錯單獨使用都能取得不錯的效果,但容易被繞過。所以一般情況下都是聯合使用,增加反反除錯的成本,同時還可以應對不同的場景。

如使用 sdk 方式分發安全模組,則不能影響手遊專案的正向開發。正常的開發環境下,偵錯程式和遊戲程序在同乙個使用者組中,這種情況下只能使用檢測 tracerpid 的方式。取出偵錯程式的 gid 和遊戲程序的 gid 看是否在同乙個使用者組中,即可判斷出是否為合法偵錯程式。

禁止附加:通過ptrace(pt_deny_attach,0,0,0)來禁止偵錯程式附加,ptrace函式在 ios 下沒有對應的標頭檔案函式宣告,需要通過dlsymextern int ptrace(int,pid_t,cadrr_t,int)的形式獲得

檢測跟蹤標識:使用sysctl查詢當前程序是否有p_traced標識,該標誌存在則標識程序正在被除錯

// 禁止附加

extern int ptrace(int, pid_t, caddr_t, int);

void disableptrace()

// 檢測跟蹤標識

int ispflagexist()

return 0;

}

### 禁止注入(已過時)

ios 下的注入大多數是通過環境變數dyld_insert_libraries來實現,如 cydia substrate、cycript 和 dumpdecrypted 等等。

方法:在 xcode 的other linker flags中新增引數-wl,-sectcreate,__restrict,__restrict,/dev/null

關於IP改編手遊

天諭 手遊測試體驗感想 來自新世界的mmo來了 手遊市場進入存量時代 存量經濟意味著 技術創新出現瓶頸,新的財富創造減少,人們不能從新增財富中分配,只能從原有財富分化,缺乏新的消費需求。對遊戲行業來講應該是使用者規模增長速度放緩,產品品質提公升進入瓶頸 率和使用者獲取是所有遊戲需要面對的難題。而ip...

關於航海類手遊的開發模式

遊戲具有的功能模組 1.登入功能 2.使用者資訊及遊戲功能選擇模組 3.匹配房間模組 4.房間模組 5.載入讀取進度條模組 6.遊戲戰鬥模組 7.退出遊戲 各個模組的具體實現方式 1 登入模組是登入伺服器並讀取使用者資料跳轉到使用者資訊及遊戲功能選擇模組 具體用資料庫及阿里雲伺服器還有unity的u...

一些關於SLG手遊的想法

目前,市面上rpg手遊產品已處於成熟的階段,不管是遊戲中的戰鬥模組還是其他玩法,在rpg手遊中變化不大,因而同質化現象比較嚴重。相比之下,slg手遊還處於成長階段,各個方面都還有很大的提公升空間,比如戰報式的戰鬥系統 城建及科技系統 大地圖玩法 全球性的對抗玩法等。下面就slg手遊中戰鬥系統和城建系...