資源簡介
反調試在代碼保護中扮演著很重要的角色,雖然不能完全阻止攻擊者,但是還是能加大攻擊者的時間成本,一般與加殼結合使用,核心還是加殼部分。

代碼片段和文件信息
#include?“com_example_zbb_jiagu02_Myndk.h“
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?“android/log.h“
#include?
#include?
#include?
#include?
#include?
#include?
using?namespace?std;
//ptrace自己使得android_server附加不上
void?anti_debug01()
{
????ptrace(PTRACE_TRACEME?0?0?0);
}
//檢測Tracepid的值
void?anti_debug02()
????????????????????????{
????????????????????????????try
????????????????????????????{
????????????????????????????????const?int?bufsize?=?1024;
????????????????????????????????char?filename[bufsize];
????????????????????????????????char?line[bufsize];
????????????????????????????????int?pid?=?getpid();
????????????????????????????????sprintf(filename?“/proc/%d/status“?pid);
????????????????????????????????FILE*?fd?=?fopen(filename?“r“);
????????????????????????????????if?(fd?!=NULL)
????????????????????????????????{
????????????????????????????????????while?(fgets(line?bufsize?fd))
????????????????????????????????????{
????????????????????????????????????????if?(strncmp(line?“TracerPid“?9)?==?0)
????????????????????????????????????????{
????????????????????????????????????????????int?statue?=?atoi(&line[10]);
????????????????????????????????????????????if?(statue?!=?0)
????????????????????????????????????????????{
????????????????????????????????????????????????fclose(fd);
????????????????????????int?ret?=?kill(pid?SIGKILL);
????????????????????}
????????????????????break;
????????????????}
????????????}
????????????fclose(fd);
????????}?else
????????{
????????????//?LOGD(“open?%s?fail...“?filename);
????????}
????}?catch?(...)
????{
????}
}
//將文件讀入字符串中,c++能用,此處不能包括頭文件
/*jstring?readFileIntoString(char?*?filename)
{
????ifstream?ifile(filename);
????//將文件讀入到ostringstream對象buf中
????ostringstream?buf;
????char?ch;
????while(buf&&ifile.get(ch))
????????buf.put(ch);
????//返回與流對象buf關聯的字符串
????return?buf.str();
}
?*/
//檢測端口號,針對android_server這個端口號
void?anti_debug03()?{
????const?int?bufsize=512;
????char?filename[bufsize];
????char?line[bufsize];
????int?pid?=getpid();
????sprintf(filename“/proc/net/tcp“);
????FILE*?fd=fopen(filename“r“);
????if(fd!=NULL){
????????while(fgets(linebufsizefd)){
????????????if?(strncmp(line?“5D8A“?4)==0){
????????????????int?ret?=?kill(pid?SIGKILL);
????????????}
????????}
????}
????fclose(fd);
}
//檢測這些調試進程的名字
void?anti_debug04(){
????const?int?bufsize?=?1024;
????char?filename[bufsize];
????char?line[bufsize];
????char?name[bufsize];
????char?nameline[bufsize];
????int?pid?=?getpid();
????//先讀取Tracepid的值
????sprintf(filename?“/proc/%d/status“?pid);
????FILE?*fd=fopen(filename“r“);
????if(fd!=NULL){
????????while(fgets(linebufsizefd)){
????????????????if(strstr(line“TracerPid“)!=NULL)
????????????????{
?????????????????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????9093??2016-09-28?22:08??反調試代碼.cpp
?????文件??????453026??2017-03-09?11:32??關于反調試方法總結(一)以及源碼實現.pdf
評論
共有 條評論