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 下沒有對應的標頭檔案函式宣告,需要通過dlsym
或extern 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手遊中戰鬥系統和城建系...