0
点赞
收藏
分享

微信扫一扫

安卓逆向 -- NDK开发实现MD5算法


源码下载地址:

一、正常SO层校验框架

1、新建一个NativeC++项目

安卓逆向 -- NDK开发实现MD5算法_算法

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、运行结果

安卓逆向 -- NDK开发实现MD5算法_微信_02

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、运行结果

安卓逆向 -- NDK开发实现MD5算法_算法_03

二、加入MD5进行校验

1、导入md5.cpp及md5.h文件

安卓逆向 -- NDK开发实现MD5算法_Java_04

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、运行结果

安卓逆向 -- NDK开发实现MD5算法_字符串_05

禁止非法,后果自负

欢迎关注视频号:之乎者也吧

安卓逆向 -- NDK开发实现MD5算法_微信_06


举报

相关推荐

0 条评论