91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 9KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-05-28
  • 語言: Java
  • 標簽: JVMTI??JAVA加密??

資源簡介

通用JAVA加密或者是混淆更貼切技術是將class、方法及包,以隨機命名方式進行混淆,雖然這種方式增加了閱讀難度,但還不足以將字節碼文件進行完整保護。本文介紹一種以JVMTI和JNI方式對字節碼進行加密的辦法,并提供測試源碼下載

資源截圖

代碼片段和文件信息

#include?“Common.h“
#include?“WjcDes.h“

#?define?NELEM(x)?((int)?(sizeof(x)?/?sizeof((x)[0])))

std::string&?replace_all(std::string&???strconst??std::string&???old_valueconst?std::string&???new_value)
{
while(true)???{
std::string::size_type???pos(0);
if(???(pos=str.find(old_value))!=std::string::npos???)
str.replace(posold_value.length()new_value);
else???break;
}
return???str;
}

JNIEXPORT?void?JNICALL?classloadHook?(jvmtiEnv?*jvmti_env JNIEnv*?jni_envjclass?class_being_redefined
jobject?loader const?char*?name
jobject?protection_domain
jint?class_data_len?
const?unsigned?char*?class_data
jint*?new_class_data_len
unsigned?char**?new_class_data);

JNIEXPORT?void?JNICALL?cbVminit(jvmtiEnv?*jvmti_env?JNIEnv*?jni_env?jthread?thread);

char?*?jstringTostring(JNIEnv*?env?jstring?jstr)
{???????
char*?rtn?=?NULL;
jclass?clsstring?=?env->FindClass(“java/lang/String“);
jstring?strencode?=?env->NewStringUTF(“utf-8“);
jmethodID?mid?=?env->GetMethodID(clsstring?“getBytes“?“(Ljava/lang/String;)[B“);
jbyteArray?barr=?(jbyteArray)env->CallobjectMethod(jstr?mid?strencode);
jsize?alen?=?env->GetArrayLength(barr);
jbyte*?ba?=?env->GetByteArrayElements(barr?JNI_FALSE);
if?(alen?>?0)
{
rtn?=?(char*)malloc(alen?+?1);
memcpy(rtn?ba?alen);
rtn[alen]?=?0;
}
env->ReleaseByteArrayElements(barr?ba?0);
return?rtn;
}

JNIEXPORT?jint?JNICALL?Agent_onload(JavaVM?*vm?char?*options?void?*reserved)
{
std::cout<<“Agent_onload?Start“< jvmtiEnv?*?jvmti;

//環境
jint?ret?=?vm->GetEnv((void?**)&jvmti?JVMTI_VERSION_1_0);

if(ret?!=?JNI_OK)
{
std::cout<<“GetEnvError“< return?ret;
}
//回調
jvmtiEventCallbacks?callbacks;
callbacks.ClassFileLoadHook?=?classloadHook;
callbacks.VMInit?=?cbVminit;
jvmti->SetEventCallbacks(&callbacks?sizeof(callbacks));
jvmti->SetEventNotificationMode(JVMTI_ENABLE?JVMTI_EVENT_CLASS_FILE_LOAD_HOOKNULL);
jvmti->SetEventNotificationMode(JVMTI_ENABLEJVMTI_EVENT_VM_INITNULL);
return?JNI_OK;
}

jclass?MyDefine1Class(JNIEnv?*?env?jobject?obj?jstring?name?jbyteArray?b?jint?off?jint?len?jobject?protection_doaminjstring?source)
{
jbyte?*?buff?=?env->GetByteArrayElements(b?NULL);
Header?header;
jclass?descClazz;
memcpy(&headerbuffsizeof(header));
char?*?className?=?jstringTostring(env?name);

std::string?realName(className);
replace_all(realName?“.“?“/“);

if(header.nSeqNum?==?DEFAULT_SEQ)
{
Des_Go((char?*)(buff)?(char?*)(buff?+?sizeof(header))?header.nHash?header.strPasssizeof(header.strPass)DES_DECRYPT);
descClazz?=?env->DefineClass(realName.c_str()?obj?buff?(jsize)header.nHash);
#ifdef?DEBUG
std::cout<<“find?A“< std::cout<<“name===============>“<#endif
}
else
{
#ifdef?DEBUG
std::cout<<“name=11111111111111>“<#endif
descClazz?=?env->DefineClass(realName.c_str()objbuff?len);

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????????700??2014-06-20?16:00??Common.h
?????文件????????8109??2014-06-21?14:51??JvmitPrj.vcxproj
?????文件????????1242??2014-06-19?17:53??JvmitPrj.vcxproj.filters
?????文件?????????143??2014-06-18?00:16??JvmitPrj.vcxproj.user
?????文件????????5367??2014-06-20?21:04??JvmMain.cpp
?????文件?????????486??2014-06-20?14:25??makefile
?????文件????????9082??2014-06-19?17:28??WjcDes.cpp
?????文件????????1061??2014-06-19?17:53??WjcDes.h

評論

共有 條評論