Dexplore
v1.4.5
런타임에 난독 화 된 클래스 및 방법을 찾기위한 DEX 분석 라이브러리.
Dexplore는 난독 화 된 클래스 및 방법을 분석하고 찾기 위해 설계된 Java 라이브러리입니다. 라이브러리는 특정 쿼리를 기반으로 난독 화 된 클래스 및 메소드를 자동으로 찾을 수 있으므로 개발자는 난독 화 된 코드베이스에 대해 Xposed 모듈과 같은 휴대용 앱을 만들 수 있습니다.
또한 Dexplore는 정적 분석 및 App De-Compilation을 수행 할 수있는 기능을 제공하는 명령 줄 도구를 제공합니다. 이 도구는 특정 클래스 파일 및 리소스를 추출 할 수있어 더 빠르고 리소스 집약적 인 프로세스가 더 빠릅니다.
지원 유형 : APK, DEX, ODEX, OAT, ZIP.
지원되는 입력 : 파일 경로, 바이트 버퍼 (메모리 덱스).
릴리스 페이지에서 최신 버전의 Dexplore를 확인하십시오.
도서관 의존성
repositories {
mavenCentral()
}
dependencies {
implementation ' io.github.neonorbit:dexplore:1.4.5 '
}정적 분석 및 App De-Compilation을위한 명령 줄 도구
java -jar Dexplore.jar --help Xposed 모듈의 샘플.
자세한 설명은 위키 페이지를 참조하십시오.
public class XposedModule implements IXposedHookLoadPackage {
@ Override
public void handleLoadPackage ( XC_LoadPackage . LoadPackageParam lpparam ) {
if (! lpparam . packageName . equals ( "com.example.app" )) return ;
// Create a class filter to find your target class
ClassFilter classFilter = new ClassFilter . Builder ()
. setReferenceTypes ( ReferenceTypes . STRINGS_ONLY )
. setReferenceFilter ( pool ->
pool . contains ( "a unique string inside the class" )
). build ();
// Create a method filter to find your target method from the class
MethodFilter methodFilter = new MethodFilter . Builder ()
. setReferenceTypes ( ReferenceTypes . STRINGS_ONLY )
. setReferenceFilter ( pool ->
pool . contains ( "a unique string inside the method" )
). setParamSize ( 2 ) // suppose it has 3 parameters
. setModifiers ( Modifier . PUBLIC ) // and it's a public method
. build ();
// Load the base apk into Dexplore
Dexplore dexplore = DexFactory . load ( lpparam . appInfo . sourceDir );
// Perform a dex search
MethodData result = dexplore . findMethod ( classFilter , methodFilter );
// Load the actual method
Method method = result . loadMethod ( lpparam . classLoader );
// Hook with Xposed
XposedBridge . hookMethod ( method , XC_MethodReplacement . returnConstant ( true ));
// ------------------ Extra ------------------
// Please don't forget to save the result in Preferences.
preferences . edit ()
. putString ( "targetMethod" , result . serialize ()) // serialize and save the result
. putLong ( "appVersion" , pkgInfo . getLongVersionCode ()) // version code (NOT version name)
. apply ();
// Use the saved result until the app LongVersionCode changes.
String saved = preferences . getString ( "targetMethod" , null );
MethodData retrieved = MethodData . deserialize ( saved ); // Deserialize
// Please refer to the wiki page for a detailed explanation.
}
} 도움말 : XDA-Shread
XDA 스레드에서 샘플 프로젝트를 찾을 수 있습니다.
Copyright (C) 2022 NeonOrbit
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.