package com.dta.test.frida.activity;
import
android.view.View;
import
com.dta.test.frida.R;
import
com.dta.test.frida.base.BaseActivity;
import
com.dta.test.frida.base.Level;
import
java.io.ByteArrayOutputStream;
import
java.io.InputStream;
import
java.lang.reflect.Method;
import
java.nio.ByteBuffer;
import
dalvik.system.InMemoryDexClassLoader;
public
class
SeventhActivity extends BaseActivity {
private Class<?> MyCheckClass;
@Override
protected String getDescription() {
return
getString(R.string.seventh);
}
@Override
public void onClick(View v) {
super
.onClick(v);
try
{
loadDex();
Method check
=
MyCheckClass.getDeclaredMethod(
"check"
);
Object
handle
=
MyCheckClass.newInstance();
boolean flag
=
(boolean) check.invoke(handle);
if
(flag){
gotoNext(Level.Eighth);
}
else
{
failTip();
}
} catch (Exception e) {
failTip();
}
}
private void loadDex() {
if
(MyCheckClass !
=
null){
return
;
}
if
(android.os.Build.VERSION.SDK_INT >
=
android.os.Build.VERSION_CODES.O) {
try
{
InputStream is_dex
=
getAssets().
open
(
"mycheck.dex"
);
ByteArrayOutputStream bos
=
new ByteArrayOutputStream();
byte[] bytes
=
new byte[
1024
];
int
len
;
while
( (
len
=
is_dex.read(bytes,
0
,bytes.length) ) !
=
-
1
){
bos.write(bytes,
0
,
len
);
}
bos.flush();
ByteBuffer
buffer
=
ByteBuffer.wrap(bos.toByteArray());
InMemoryDexClassLoader classLoader
=
new InMemoryDexClassLoader(
buffer
, getClassLoader());
MyCheckClass
=
classLoader.loadClass(
"com.dta.frida.MyCheck"
);
}catch (Exception e){
e.printStackTrace();
failTip();
}
}
}
@Override
protected String getActivityTitle() {
return
"第七关"
;
}
}