역의 사용에서 가장 포괄적 인 교육의 안드로이드 __Xposed 역사


그는, 버그의 더미는 모든 새로운 사람들이 코드는 혼란을 변경하기 시작했다 이해하지 못했다 테스트 왼쪽 및 제출 준 후 그냥 안드로이드을 자극, 건조는 2 주 사임했다.
그가 유사한 버그를 정리하기 위해 쓴까지 절반 이상이 한 달에 월 정리하는 두통이다. 그것은 촛불 가치가되지 않습니다.
이 경고와 함께, 부부가 사전 직업 훈련에주의를 지불해야했다, 결국 인터뷰는 너무 어려운 찾을 수 있습니다 시작되었다.
"초보자의 신병 교육 자료 용으로 작성"- 치 하오 2019년 7월 18일 18시 20분 30초에 의해

자습서 내용 :
제 하나 장 : 안드로이드 JAVA 역으로
클래스 1 : 안드로이드 환경 구성 및 일반 도구 소개  
클래스 2 : 디버깅 방법 및 파일 구조 Smali의
클래스 3 : 새로운 버전의 디버깅 방법 및 Smali 기능 파일 수정
실험 3 개의 새로운 버전의 디버깅 방법 Smali 기능 파일 수정 
클래스 4 : JD-GUI의 코드를 빠르게 읽고 분석
클래스 5 : 앱의 광고를 제거하는 방법에 대한 실제적인 운동은
6 장 : 분석 이슈 젭 사용
클래스 7 : 일반적인 안드로이드는 빠르게 키 방법을 찾을 설명
실험 7 공통 빠른 안드로이드 키 포인트 위치 방법을 설명 
자신의 공격 코드 라이브러리를 만들려면 처음부터 0 : 시간을 8

제 2 장 : 안드로이드 후크 플러그인 개발
클래스 1 : 안드로이드의 구조적 기초를 설명
Cydia를 기판의 후크 코드 빠른 빌드 : 클래스 2
Xposed의 훅 코드 빠른 빌드 : 클래스 3

제 3 장 : 평가 단계의
클래스 1 : 평가 단계
실험 1 단계 평가 

제 IV : 안드로이드 시스템 컴파일 된
클래스 1 : 설치 및 배포 환경 안드로이드 소스 컴파일러
클래스 2 : 안드로이드 소스 디렉토리 구조와 부트를 수정
클래스 3 :. 브러쉬 수정 및 안드로이드 소스 설명
클래스 4 : 안드로이드 JNI 프로그래밍

장 : 안드로이드 팔 네이티브 역
클래스 1 : ARM 어셈블리 코드는 설명하기 위해
이 설명 암 어셈블리 코드 : 클래스 2를
팔 어셈블리 코드 3 설명 : 시간 3
시간 4 : 4 암 어셈블리 코드 가이드
암 어셈블리 코드 5 설명 : 시간 (5)

제 VI : 안드로이드 예비 응용 프로그램 프로그래밍 보호
클래스 1 : 설명하기 class.dex 파일 형식
클래스를 2 : 안드로이드는 동적으로의 원칙에서 코드를 수정
클래스 3 : 안드로이드 동적 자기 수정 코드는 달성하는 것입니다
(2)를 구현 안드로이드 동적 자기 수정 코드 : 클래스 4

제 VII : 스리랑카, 타밀 반군 안드로이드 응용 프로그램의
클래스 1 : 안드로이드 아이디어에 포격 능력
2 급 : 엘프 자세한 구조 : 동적 런타임 파일의 구조를 구성하는 파일이 너무
엘프 자세한 구조 : 클래스 3 파일로드 프로세스 그래서
클래스 4 : ELF 파일 변형 및 보호
클래스 5 : 엘프 파일을 복구 분석
클래스 6 : 그래서 압축 파일 복구
를 통해 디버깅 일반적인 검출 방법 및 검출 방법 : 클래스 7
사용자 정의 안티 - 안티 디버깅 메커니즘을 추가하는 안드로이드 소스 코드 : 클래스 8
시간 9 : 안드로이드 DVM 포격 2
10 시간 안드로이드 DVM 포격 3
시간 11 알빅 덱스의 처리 및 분석
클래스 12 : IDA 포격 스크립팅
클래스 13 : ODEX 수정
클래스 14 IDAOdex 수리 스크립팅

제 VIII : 안드로이드 응용 프로그램 보호
클래스 1 : 안드로이드의 원리 패커
안드로이드 쉘 보호 도구 1 개 작성 : 2 등급
2로 작성 안드로이드 쉘 보호 도구 : 클래스 3
(3)를 작성하는 안드로이드 쉘 보호 도구 : 시간 (4)

제 9 장 : 안드로이드 응용 프로그램의 후크
클래스 1 : 후크 원칙
루트 환경 후크 : 클래스 2
클래스 3 : ASP 코드 주입 쓰기
클래스 4 : 안드로이드 무료 루트 실시 후크

장 X : 안드로이드 가상 머신 기술
클래스 1 : 가상 머신의 원리는 설명 할 원칙을 엽니 다.
클래스 2 : 내부 APK는, 가상 머신을 쓰기에 APK의 APK를 설치
클래스 3 : VM은 휴대 전화의 다양한에 맞는
클래스 4 : 그것은 가상 머신 코드를 개발하기 위해 자신 쉬운 작업을 수행

물론 역 나는 회사의 내부 교육 새로운 사람들에 대한 이야기 것들 중 일부는 너무 복잡, 더 많은 콘텐츠가되고 있으며, 학생들은이 콘텐츠를 배우고 싶은이있는 경우, 당신은 내 마이크로 채널을 추가 할 수 있습니다, 우리는 내 비밀, 아무것도 무료로하지 않습니다 ... ... 토론에 오신 것을 환영합니다
공식 웹 사이트 주소 : http://repo.xposed.info/의
소스 주소 : https://github.com/rovo89




Xposed 부 C ++, Xposed는 주로 / 시스템 / 빈 / app_process를 교체하고, JNI XposedBridge 방법 제공하는 데
단지 패키지로드 XposedBridge 제공 Xposed JAR 파일을 app_process 시작할 때, 다른 모듈이 개발 항아리 패키지를 기반으로
XposedInstaller, Xposed 설치 패키지, Xposed 기반 프레임 모듈의 관리를 제공합니다

①Xposed 설치

첫째, 필요 루트 안드로이드 폰이있다.
때 ROOT, 당신은 휴대 전화의 잠금을 해제해야합니다. 모두가 알고 ROOT을했다.
참고 : HTTP : 시장 주변 //www.7to.cn/ ROOT 도보 이해 당신이 정말로 기계를 솔질하는 방법을 모르는 경우, 예를 들면 찾아주십시오.

설치하는 방법은 여러 가지가 Xposed 있습니다 :
1. 공식 웹 사이트 http://repo.xposed.info/module/de.robv.android.xposed.installer 다운로드
전화 2. ROOT를, 모두는 Xposed 함께 제공하고있다 활성화 버전 (내 기장 5S)
루트의 모바일 애플리케이션 시장도 검색 할 수 있습니다 3. 후, 직접 검색을 설치할 수 있습니다. 그러나 Xposed 루트 권한을 부여 기억,
위로는 지금, Xposed 모든 권한의 루트를 필요로 할 수 있습니다.
또한, 설치 (https://www.cnblogs.com/QUSIR/p/6912032.html) 방법의 사본을 재 부착
설치가 완료이라면, 축하 녹색 부팅 xposed 페이지를 다시 시작합니다. Xposed 프레임 워크를 성공적으로 설치!

②Xposed 창고 플러그인

Xposed 딸깍 소리가 메인 인터페이스의 왼쪽 상단 모서리에서, 우리가 볼 수있는 (내 버전은 다음과 같습니다 version89)
: 여기에 각 메뉴에 대한 간략한 소개가 사용하는

프레임 워크 : Xposed 메인 인터페이스에,
모듈 : 자신의 또는 Xposed에서 주로 개발 창고
(창고 주소 : HTTP : //repo.xposed.info/module-overview)는 다운로드 모듈이 설치.
자신의 모듈은이 위치에서 찾을 수 있습니다 개발할 수 있습니다. 참고 :이 논문은 나중에 모듈, 개발 과정에 초점을 맞출 것이다.
다운로드 :이 통해 얻을 수있는 주요 창고 Xposed 주소, 창고 오픈 소스 Xposed 모듈을 다운로드하고 설치하는 순간을 제공 할 수 있습니다.
Alipay의 InstallB Alipay의 X 설치 모듈, 비브라토 플러그인 : 더 일반적으로 사용됩니다의 일부를 가지고 어떤!
로그인 : 코드에서 우리 자신의 인쇄 로그의 개발을위한 주요 모듈은 여기에 표시됩니다.
로그가 우리에게 디버그를 도와 키 진입 점의 정보를 확인하는 것이 중요합니다, 당신은 또한 방법에 의해 Log.d를 디버깅 할 수 있습니다!
설정 : 주로의 간단한 구성 Xposed를 위해.
초점 설정에 반대 "비활성화 자원 후크입니다." 사용에는 영향을 미치지 않는 경우, 권장을 해제하지!
지원 및 소개 : 건너 뜁니다.

③ 모듈 설치

여기 비브라토 플러그, 예를 들어, 설치 방법.
첫째, 검색 창에 "비브라토 플러그인"를 입력, 다운로드로 이동합니다.
입력을 클릭합니다. 당신이 보는 것은 탭을 설명,
뿐만 아니라 소스 모듈 및 창고의 주소 정보를 볼 수 있습니다.
설치, "버전"탭으로 직접 건너 뛸 경우, 설치의 안정 버전을 다운로드, 설치가 성공적입니다.
당신은 "모듈"메뉴 막대로 전환하고, 방금 설치 한 새 모듈을 확인해야합니다.
그런 다음 전화를 다시 시작 플러그인은 효력을 발생하고 Xposed 프레임 워크로드!
그럼 당신은 일반적으로 플러그인을 사용할 수 있습니다.
각 모듈을 설치 한 후 기억, 당신은 활성화하고 제대로 작동하려면 전화를 다시 시작해야합니다!

: ④ 개발 환경 구축

1 패키지를 가져옵니다

compileOnly 'de.robv.android.xposed : API : 82' 
compileOnly는 'de.robv.android.xposed : API : 82 : 소스' // 源码

 

다음 2 AndroidManifest.xml을 첨가

< 애플리케이션
 ......略
 > 

  < 메타 데이터     로이드 이름 = "xposedmodule"     로이드 여기서 value = "참" />   < 메타 데이터     로이드 이름 = "xposeddescription"     로이드 여기서 value = "卖客微信中控" />   < 메타 데이터     로이드 이름 = "xposedminversion"     로이드 : 값 = "30" />
</ 애플리케이션 >

 

xposedmodule : 값이 그가 xposed 모듈입니다, 사실
xposeddescription가 : 값이 휴대 전화에서 Xposed 프레임 워크에서 볼 수있는 모듈의 텍스트 설명입니다, 밤 줄
xposedminversion를 : 최소 버전은 xposed, 이것들이 될 수 있습니다 호환성, 맞죠? 그래서 직접 상품의 최소 버전 채울

입구를 표시하는, (3)

새 파일의 자산에서, 파일 이름 xposed_init (파일 형식 선택한 텍스트) 
:와 인은 (com.longji.XposedHookUtil를 자신에 채우기로 다음은, 예를 들어 클래스 경로입니다) 입구 클래스의 전체 경로를 쓰기 

때문에, xposed 모듈에 xposed_init 프레임 정보 항목을 찾아 읽을 수 있습니다

  

참고 :

즉시 실행하지 않도록해야합니다 (파일 - -> 설정 > 빌드, 실행, 배포 -> 즉시 실행),
그렇지 않으면, 클래스 APK에 직접 포함 실패 HOOK 발생되지 않습니다! ! !

다음은하지 삶과 죽음 후크,주의를 지불해야합니다, 공식에서 경고이며, 로그 출력 할 수 없습니다가,이 때문에입니다! ! !
그렇지 않으면, 당신은 당신이 같은 오류가 발생 반복 xposed 로그를 찾을 수 놀랄 것입니다 :
... (긴 목록을 생략) : 없습니다 찾기 클래스는 dexpathlist에서했던 xposed
이 오류는 (구글 죽음에 바이이다 ) 쓸모가 반드시 조사에 대한 해결책 (이 이야기는 공식 문서를 읽고 우리에게 상기시켜)없는
단지 성공적으로 실행이 후 데모, 포장 ...... 실행할 찾을 GitHub의에

모듈의 등장 찾을 수 있습니다, 우리는 xposed 열려 모듈 확인하고 전화를 다시 시작
하면 피트 xposed에있는 경우에도,이에.

물론, 위의 루틴은 실제 프로젝트가 훨씬 더 복잡하고, 비교적 간단, 당신은 github의 학습에 일부 오픈 소스 프로젝트를 찾을 수 있습니다.

모르는 경우 공식 API 참조 문서의 많은 :
http://api.xposed.info/reference/packages.html
https://github.com/rovo89/XposedBridge/wiki/Development-tutorial

예를 들면 종래의 후크 방식

/ ** 
* RES 후크 및 자원은 두 개의 서로 다른 인터페이스 다음 Java 클래스를 구현해야 
* IXposedHookLoadPackage, IXposedHookInitPackageResources이 
* 
* @author 도화 
2019년 5월 4일 15시 28분 ON *의 @date를 
* / 

공공  클래스 XposedHookUtil 구현 IXposedHookLoadPackage, IXposedHookInitPackageResources { 
문자열 class_name을 = "com.longji.xposdedemo.MainActivity" ;
 개인 컨텍스트 컨텍스트;
 개인 문자열 PKGNAME;
 개인 문자열 processName;
 개인 문자열 versionName과는; 

// 부팅 후크에서 시작 
@Override
 공공  무효 (handleLoadPackage최종 XC_LoadPackage.LoadPackageParam lpParam)이 발생 Throwable의 {를 
PKGNAME = lpparam.packageName; 
processName = lpparam.processName; 

// 후크 마이크로 채널 공정 
IF (processName.equals ( "com.tencent.mm" )) { 
Log.e ( "브로일러 정보 2 ","마이크로 채널 " ) 
} 

// 현재 컨텍스트 얻을 
컨텍스트 = (문맥) XposedHelpers.callMethod ( 
XposedHelpers.callStaticMethod ( 
XposedHelpers.findClass ( android.app.ActivityThread"를 " )
 "currentActivityThread " ,
 새로운 새로운 개체 [0 ] )
 "getSystemContext ",
 새로운 새로운 개체 [0 ]); 

// 버전 번호 얻을 
versionName을 context.getPackageManager = () getPackageInfo (PKGNAME, 0 ) .VersionName; 
Log.e ( "브로일러 정보 1", "PKGNAME을"+ PKGNAME + "processName = "processName + +"= versionName을 "+ versionName를) 

// 예를 다음과 같이 
IF (processName.equals ("com.longji.xposdedemo " )) {
 // 클래스를 가져가 Class.forName ()을 통과 할 수 있으며, 애플리케이션에 걸쳐 실패 할 때 
클래스 clazz에는 = lpparam.classLoader.loadClass (class_name에); 

// 후크 구체적인 방법 
XposedHelpers.findAndHookMethod (clazz에 "getTTAd" 새로운 새로운 XC_MethodReplacement () { 
@Override 
보호개체 replaceHookedMethod (MethodHookParam methodHookParam)이 발생 하는 Throwable { 
Log.e ( "肉鸡信息2", "PKGNAME는"+ PKGNAME + "processName ="+ processName + "= versionName을"+ versionName과);
반환 "广告被拦截了" ; 
} 
}); 
} 

경우 (processName.equals ( "com.youku.phone" )) { 
Log.e ( "肉鸡信息2", "优酷" ); 
} 

XposedHelpers.findAndHookMethod (
 "android.widget.ListView" , 
lpparam.classLoader,
 "는, setAdapter" , 
Class.forName를 ( "android.widget.ListAdapter" ),

보호  공극 afterHookedMethod (MethodHookParam의 PARAM)가 발생 하는 Throwable {
 슈퍼 .afterHookedMethod (PARAM)를;
경우 (param.thisObject instanceof를 ListView에) { 
XposedBridge.log (param.args [ 0 ]로 .toString ()); 
} 
} 
}); 

} 

// 在资源布局初始化时进行후크 
@Override
 공개  공극 handleInitPackageResources (XC_InitPackageResources.InitPackageResourcesParam의 resparam)을 발생 하는 Throwable { 
(Log.e "肉鸡信息22", "PackageResources을" ); 
resparam.res.hookLayout (resparam.packageName,"레이아웃", "activity_main" 새로운 XC_LayoutInflated는 () { 
@Override 
공개  공극 handleLayoutInflated (LayoutInflatedParam의 liparam) 발생 의 Throwable { 
Log.e를 ( "肉鸡信息22", "PackageResources" ); 
} 
}); 
resparam.res.hookLayout (resparam.packageName, "레이아웃", "view_demo" 새로운 XC_LayoutInflated () { 
@Override 
공개  공극 handleLayoutInflated (LayoutInflatedParam의 liparam) 발생 의 Throwable { 
XposedBridge.log ( "후크 view_demo ' ); 
} 
}); 
} 
}

 

모든 소스 코드 프로젝트는 지속적으로 업데이트 : HTTPS : //github.com/yugu88/MagicWX

추천

출처www.cnblogs.com/qi-hao/p/11209226.html