1.一種反調(diào)試方法,其特征在于,該方法包括:
步驟S101,將需要反調(diào)試的進程設置為調(diào)試狀態(tài);
步驟S102,在需要反調(diào)試的進程中創(chuàng)建子進程;
步驟S103,將所創(chuàng)建的子進程附加到需要反調(diào)試的進程中;
步驟S104,子進程接收需要反調(diào)試的進程發(fā)送的反饋消息,并對該反饋消息進行處理。
2.根據(jù)權利要求1所述的反調(diào)試方法,其特征在于,將需要反調(diào)試的進程設置為調(diào)試狀態(tài)包括:
通過調(diào)用Android系統(tǒng)接口函數(shù)prctl(option,arg2,arg3,arg4,arg5)來將需要反調(diào)試的進程設置為調(diào)試狀態(tài),其中參數(shù)option是PR_SET_DUMPABLE,參數(shù)arg2的值是1, 參數(shù)arg3的值是0, 參數(shù)arg4的值是0, 參數(shù)arg5的值是0。
3.根據(jù)權利要求1所述的反調(diào)試方法,其特征在于,在需要反調(diào)試的進程中創(chuàng)建子進程包括:
通過調(diào)用Android系統(tǒng)函數(shù)fork來完成子進程的創(chuàng)建。
4.根據(jù)權利要求1所述的反調(diào)試方法,其特征在于,將所創(chuàng)建的子進程附加到需要反調(diào)試的進程中包括:
通過調(diào)用Android系統(tǒng)函數(shù)getppid來獲取到需要反調(diào)試的進程的進程ID,將所創(chuàng)建的子進程附加到需要反調(diào)試的進程中。
5.根據(jù)權利要求4所述的反調(diào)試方法,其特征在于,將所創(chuàng)建的子進程附加到需要反調(diào)試的進程中包括:
調(diào)用Android系統(tǒng)函數(shù)ptrace(PTRACE_ATTACH, ppid, NULL, NULL)來執(zhí)行附加操作,其中參數(shù)PTRACE_ATTACH表明是附加操作,參數(shù)ppid是獲取到的需要反調(diào)試的進程的進程ID,表示將所創(chuàng)建的子進程附加到該需要反調(diào)試的進程的進程ID所指示的進程中,NULL代表空缺。
6.根據(jù)權利要求1所述的反調(diào)試方法,其特征在于,子進程接收需要反調(diào)試的進程發(fā)送的反饋消息,并對該反饋消息進行處理包括:
通過調(diào)用Android系統(tǒng)函數(shù)WSTOPSIG(status)來獲取需要反調(diào)試的進程的反饋消息,其中變量status用于存放變量信號值,
判斷該status的值是否等于以下四個信號中的任意一個,四個信號包括:停止該反調(diào)試的進程的執(zhí)行信號SIGSTOP、停止該反調(diào)試的進程的運行信號SIGTSTP、當后臺作業(yè)要從用戶終端讀數(shù)據(jù)時的信號SIGTTIN、在寫終端或修改終端模式時收到的信號SIGTTOU,如果上述判斷不成立,則不對所述的反饋消息進行任何處理,如果上述判斷成立,則設置需要反調(diào)試的進程刪除所述反饋消息。
7.根據(jù)權利要求6所述的反調(diào)試方法,其特征在于,包括:
通過調(diào)用Android系統(tǒng)函數(shù)ptrace(PTRACE_CONT, ppid, 0, 0) 來實現(xiàn)刪除操作,其中,參數(shù)PTRACE_CONT用于指示需要反調(diào)試的進程繼續(xù)執(zhí)行系統(tǒng)調(diào)用過程,參數(shù)ppid是需要反調(diào)試的進程的進程ID值,參數(shù)0指示需要反調(diào)試的進程刪除所述的反饋消息。
8.一種反調(diào)試系統(tǒng),該系統(tǒng)包括設置模塊、創(chuàng)建模塊、調(diào)試模塊以及處理模塊,其特征在于:
設置模塊,用于將需要反調(diào)試的進程設置為調(diào)試狀態(tài);
創(chuàng)建模塊,用于在需要反調(diào)試的進程中創(chuàng)建子進程;
調(diào)試模塊,用于將所創(chuàng)建的子進程附加到需要反調(diào)試的進程中;
處理模塊,用于子進程等待需要反調(diào)試的進程的消息,并對消息進行處理。
9.根據(jù)權利要求8所述的反調(diào)試系統(tǒng),其特征在于,設置模塊中包括:
調(diào)用單元:
用于通過調(diào)用Android系統(tǒng)接口函數(shù)prctl(option,arg2,arg3,arg4,arg5)來設置當前進程可以被調(diào)試, 其中參數(shù)option是PR_SET_DUMPABLE,參數(shù)arg2的值是1, 參數(shù)arg3的值是0, 參數(shù)arg4的值是0, 參數(shù)arg5的值是0;
創(chuàng)建模塊中包括:
建立單元,用于通過調(diào)用系統(tǒng)函數(shù)fork來完成新進程的創(chuàng)建;
將所創(chuàng)建的子進程附加到需要反調(diào)試的進程中包括:
通過調(diào)用函數(shù)getppid來獲取到需要反調(diào)試的進程的進程ID,將所創(chuàng)建的子進程附加到需要反調(diào)試的進程中;
子進程等待需要反調(diào)試的進程的消息,并對消息進行處理包括:
通過調(diào)用Android系統(tǒng)函數(shù)WSTOPSIG(status)來獲取需要反調(diào)試的進程的反饋消息,其中變量status用于存放變量信號值,
判斷該status的值是否等于以下四個信號中的任意一個,四個信號包括:停止該反調(diào)試的進程的執(zhí)行信號SIGSTOP、停止該反調(diào)試的進程的運行信號SIGTSTP、當后臺作業(yè)要從用戶終端讀數(shù)據(jù)時的信號SIGTTIN、在寫終端或修改終端模式時收到的信號SIGTTOU,如果上述判斷不成立,則不對所述的反饋消息進行任何處理,如果上述判斷成立,則設置需要反調(diào)試的進程刪除所述反饋消息。
10.根據(jù)權利要求9所述的反調(diào)試系統(tǒng),其特征在于,將所創(chuàng)建的子進程附加到需要反調(diào)試的進程中包括:
調(diào)用函數(shù)ptrace(PTRACE_ATTACH, ppid, NULL, NULL)來執(zhí)行附加操作,其中參數(shù)request填入PTRACE_ATTACH,參數(shù)ppid是獲取到的需要反調(diào)試的進程的進程ID,表示將所創(chuàng)建的子進程附加到該需要反調(diào)試的進程的進程ID所指示的進程中,NULL代表空缺。