能力值:
(RANK:270 )
|
-
-
2 楼
赞!
有个小疑问,dx --dex转换以后,实际应该就是个DEX文件吧?虽然楼主把它命名成Jar。
|
能力值:
( LV3,RANK:30 )
|
-
-
3 楼
支持学习一下
|
能力值:
( LV6,RANK:90 )
|
-
-
4 楼
转换之后dex文件就放在jar包里
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
有比较通用的内存加载的技术么、
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
核心是说用dx把jar编译成dex么
|
能力值:
( LV6,RANK:90 )
|
-
-
7 楼
差不多吧
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
加载的jar包无法调用apk里面的资源,“爱加密”出来的加密包确可以..
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
那么按楼主所描述。。
我想问下。。如果已经有一个jar包,是按照楼主所述,内部是DEX格式,但是披着jar的外衣。
有什么办法也就是不用动态加载的方式调用,静态还原解析可以用JD-GUI读取么?
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
楼主,根据你帖子中描述的方法进行实践,发现总提示ClassNotFound.
我的java代码如下:
package com.example.testjar;
import java.io.File;
import dalvik.system.DexClassLoader;
import android.R.string;
import android.support.v7.app.ActionBarActivity;
import android.content.Context;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends ActionBarActivity {
public native void callHook(String dexPath,String optPath,String className,String methodName);
static {
System.loadLibrary("loadJar");
}
public static String APP_JAR="D:\\Android_development\\loadSource";
public static String DEX_NAME="data@app@com.example.hookentry-2.apk@classes.dex";
// public static String OPT_DEX="D:\\Android_development\\loadSource\\data@app@com.example.hookentry-2.apk@classes.dex";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("two","testjar is running!");
File dexInternalStoragePath = new File(
getDir(APP_JAR, Context.MODE_PRIVATE), DEX_NAME);
final File optimizedDexOutputPath = getDir(APP_JAR,
Context.MODE_PRIVATE);
Log.e("internal",dexInternalStoragePath.getAbsolutePath());
Log.e("optimized",optimizedDexOutputPath.getAbsolutePath());
callHook(dexInternalStoragePath.getAbsolutePath(), optimizedDexOutputPath.getAbsolutePath(), "com.example.hookentry.MainActivity", "test");
}
}
求指导。DEX_NAME是从/data/dalvik-cache中或得到的优化后的dex文件
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
怎么调用资源文件呢?
|
能力值:
( LV13,RANK:360 )
|
-
-
12 楼
楼主的转化是把jar源代码转换成了jar binaries
|
能力值:
( LV3,RANK:20 )
|
-
-
13 楼
我用的是C,不是C++,我的代码是
//调用加载的类中的非静态方法
jobject str = (*env)->CallObjectMethod(env,javaClientClass,inject_method);
想调用jar包中的getHelloWorldStr函数,返回一个String类型
为什么执行这一句的时候会报错呢?
显示JNI WARNING: can't call xxx;.getHelloWorldStr on instance of Ljava/lang/Class; (CallObjectMethod)
|
|
|