将jar库注入apk app

时间:2018-04-13 21:42:09

标签: java android apk code-injection smali

我想将一个jar库注入apk文件,以便从smali代码中使用它。

这就是我的所作所为:

  1. 解压缩apk apktool d -f -r app-debug.apk
  2. 将jar文件复制到反编译项目的/libs目录
  3. 将我的库调用添加到create hook上的主要活动,如下所示:

    invoke-static {p0}, Lcom/example/injection/Inject;->test(Landroid/content/Context;)V
    
  4. 重新包装了apk apktool b .

  5. 使用jarsigner
  6. 对生成的apk进行签名
  7. 然后我使用/dist/
  8. adb install app-debug.apk目录安装应用

    该应用程序安装成功,但立即崩溃。 每次崩溃时,logcat都会输出以下消息:

    4-14 00:37:45.397 3016-3162/? I/logserver: extract_appname, forward search, appname=com.example.ben.myapplication
    04-14 00:37:45.397 3016-3162/? I/logserver: get_fault_appname, appname=com.example.ben.myapplication
    04-14 00:37:45.400 3016-3161/? I/logserver: handle_notify_event, send msg [submit:trigger=0,bugtype=2,modulename=com.example.ben.myapplication,level=1,testtype=NORMAL,path=/data/log/unzip/ALE-L21_ALE-L21C432B584_0000000000_20180414003745_crash,mode=1;]
    04-14 00:37:45.688 23691-23691/com.example.ben.myapplication I/Process: Sending signal. PID: 23691 SIG: 9
    

    我在设备上运行此功能,因此我无法真正访问崩溃报告,但显然是因为找不到com/example/injection/Inject

    之前我已经完成了注射,但是我没有添加jar,而是将smali类添加到项目中,但我想尝试添加jar库。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

libs文件夹用于本机库,而不用于JAR文件。 JAR文件包含可以在桌面JRE中执行的.class文件,但不能在Android上执行,因为Android使用不同的字节码格式。为了在Android上运行JRE字节码,DX编译器用于生成DEX(Dalvik可执行文件)文件。 如果要将JAR文件中包含的类注入APK(并且已经通过apk工具获得了SMALI IR代码),则必须使用DX从jar中生成dex文件,然后使用baksmali工具来生成smali文件,然后您必须将它们集成到反编译的APK的文件夹结构中。