源码下载地址:
关注微信公众号回复:20211014
一、正常SO层校验框架
1、新建一个NativeC++项目
2、新建一个SignatureUtils类,里面写一个原生方法
package com.bucuo.ndk20211010;
public class SignatureUtils {
public static native String signatureparams(String param);
}
3、在报错处按alt+enter,自动添加native层代码
extern "C"
JNIEXPORT jstring JNICALL
Java_com_bucuo_ndk20211010_SignatureUtils_signatureparams(JNIEnv *env, jclass clazz,
jstring param) {
const char *sparam=env->GetStringUTFChars(param,0);//将Java的String转为C的字符串
return env->NewStringUTF(sparam);
}
4、java层调用
tv.setText(SignatureUtils.signatureparams("aiyoubucuo!!!"));
5、运行结果
6、对校验进行加盐操作
using namespace std;
static const char* sigstr="aybc";
const char *sparam=env->GetStringUTFChars(param,0);//将Java的String转为C的字符串
string str(sparam);
str.insert(0,sigstr);
str=str.substr(0,str.length()-3);
return env->NewStringUTF(str.c_str());
7、运行结果
二、加入MD5进行校验
1、导入md5.cpp及md5.h文件
2、实现md5
const char *sparam=env->GetStringUTFChars(param,0);//将Java的String转为C的字符串
string str(sparam);
str.insert(0,sigstr);
str=str.substr(0,str.length()-3);
MD5_CTX context;
MD5Init(&context);
MD5Update(&context, (unsigned char *) str.c_str(), str.length());
unsigned char digest[16];
MD5Final(&context,digest);
char md5_str[33]={0};
for(int i=0;i<16;i++){
sprintf(md5_str,"%s%02x",md5_str,digest[i]);
}
return env->NewStringUTF(md5_str);
}
3、运行结果
禁止非法,后果自负
欢迎关注公众号:逆向有你
欢迎关注视频号:之乎者也吧