APK文件构成
没有aidl文件的解决方法:在build.gradle中添加如下代码:
android{ buildFeatures { aidl = true } }
|
DexClassLoader
DexClassLoader(参数1,参数2,参数3,参数4); 参数1:要加载的Jar的路径 参数2:缓存目录 参数3:Native目录,可以为空 参数4:父类加载器
|
静态资源文件
不需要编译的文件夹:assets
assets目录的添加方法:
MainActivity.java,部分代码
findViewById(R.id.btn_startLoad).setOnClickListener(new View.OnClickListener() { AssetManager assetManager = MainActivity.this.getAssets(); try { InputStream in = assetManager.open("test2.jar"); File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS + "/" + "jarSaveDir"); if(!dir.exists()) { dir.mkdir(); } String fullFilePath = dir + "/" + "test.jar"; File jar = new File(fullFilePath); if(jar.exists()) { jar.delete; } File jar = new File(fullFilePath); FileOutputStream fos = new FileOutputStream(jar.getAbsolutePath(),false); byte[] buff = new byte[1024]; int len = 0; while((len = in.read(buff))>0) { fos.write(buff,0,len); } fos.flush(); fos.close(); in.close(); }catch(Exception e) { e.printStackTrace(); } loadJar(); }); private void loadJar() { File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS + "/" + "jarSaveDir"); File tmp = Environment.getExternalStoragePublic(Environment.DIRECTORY_DOWNLOADS + "/" + "jarTmpDir"); String fullFilePath = dir + "/" +"test2.jar"; DexClassLoader loader = new DexClassLoader(FullFilePath,tmp.getAbsolutePath(),null,this.getClassLoader()); try { Class clz = loader.loadClass("com.example.mylibrary2.OneFun2"); Object ins_OneFun2 = clz.newInstance(); Method method_add2 = clz.getMethod("add2",int.class,int.class); Object ret = method_add2.invoke(ins_OneFun2,11,22); Log.i("qqqqqqqq","add2 ret "+(String)ret ); }catch (Exception e) { e.printStackTrace(); Log.i("qqqqqqqq",e.toString()); } }
|
库文件
build.gradle->android->defaultConfig->ndk abiFilters->属性->abd install–abi arm64-v8a
注意:这里配置ndk的写法不同的版本会有不同
安卓apk文件代码
可以看到被安装到data.data中
强制安装x86架构的
签名文件
CERT.RSA、CERT.SF和MANIFEST.MF
生成Release版本的签名的方法
编译资源文件
编译的文件夹:res
代码会引用的文件,位置统一,名字固定,系统分配资源ID
配置清单文件
android:usesCleartextTraffic="true"
|
可用Android逆向助手 解码,这里注意java环境一定要配置好,我这里出现的问题是jre没配置
逆向时,可重点关注继承application的类,因为application的生命周期贯穿整个应用,重点看下图中标出的部分
核心代码
代码:classes.dex classes.1.dex classes2.dex(命名是固定的)
安装后会被放到私有目录下,Dalivik虚拟机加载运行
资源映射文件
resources.arsc(用010Editor打开)
包含了应用程序的ID和资源类型的映射关系