首页 > 其他分享 >aes简单混淆加模拟执行

aes简单混淆加模拟执行

时间:2024-10-27 20:19:51浏览次数:3  
标签:混淆 aes Java jstring result str var method01 模拟

github中的示例

在gtihub中有一个混淆示例,https://github.com/luck-apple/aesTool,把它clone到本地

创建项目

新建一个native项目,语言选择Java
MainActivity中添加代码

    /**
     * AES加密, CBC, PKCS5Padding
     */
    public static native String method01(String str);

    /**
     * AES解密, CBC, PKCS5Padding
     */
    public static native String method02(String str);

native-lib.cpp里面添加函数的实现和头文件

#include "aes_utils.h"
#include "tools.h"
#include "junk.h"


extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_aestool_MainActivity_method01(JNIEnv *env, jclass clazz, jstring str_) {
    // TODO: implement method01()

    const char *str = env->GetStringUTFChars(str_, JNI_FALSE);
    char *result = AES_128_CBC_PKCS5_Encrypt(str);

    env->ReleaseStringUTFChars(str_, str);

    jstring jResult = getJString(env, result);
    free(result);

    return jResult;
}
extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_aestool_MainActivity_method02(JNIEnv *env, jclass clazz, jstring str_) {
    // TODO: implement method02()
    const char *str = env->GetStringUTFChars(str_, JNI_FALSE);
    char *result = AES_128_CBC_PKCS5_Decrypt(str);

    env->ReleaseStringUTFChars(str_, str);

    jstring jResult = getJString(env, result);
    free(result);

    return jResult;
}

向cpp目录里面添加文件,把aesTool里的cpp里的下图中选中的文件,copy到项目里
在这里插入图片描述
向cMakeLists.txt里添加加载的源文件

add_library(${CMAKE_PROJECT_NAME} SHARED
        # List C/C++ source files with relative paths to this CMakeLists.txt.
        aes.h
        aes.c
        hex_utils.h
        hex_utils.c
        tools.h
        tools.cpp
        aes_utils.h
        aes_utils.c
        native-lib.cpp)

然后修改MainActivity中的函数调用内容

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        // Example of a call to a native method
        TextView tv = binding.sampleText;
        tv.setText(method01("Bileton"));
        Toast.makeText(this,method02(method01("Bileton")),Toast.LENGTH_SHORT).show();
    }

运行结果如下

在这里插入图片描述
在这里插入图片描述

反编译apk,反编译so

使用jadx打开apk,可以得到如下一部分信息,可以看到method01和method02的实现是在so层的
在这里插入图片描述

反编译libaestool.so文件,在导出函数表里找到method01,看到有两个被混淆了名字的函数ll11l1l1llo0OoOOOO
在这里插入图片描述
我们先使用Frida对method01这个函数进行Hook
Java层hook
在Java层Hook,使用spawn方式进行hook

setImmediate(function(){
    Java.perform(function(){
        var MainActivity = Java.use("com.example.aestool.MainActivity");
        MainActivity.method01.implementation = function(str){
            console.log("arg:",str);
            var result = this.method01(str);
            console.log("result:",result);
            return result;
        }
    })
})

在这里插入图片描述

主动调用

setImmediate(function(){
    Java.perform(function(){
        var MainActivity = Java.use("com.example.aestool.MainActivity");
        console.log("My invoke :",MainActivity.method01("Bileton"));
    })
})

在这里插入图片描述
Native层Hook

setImmediate(function(){
    var android_dlopen_ext = Module.findExportByName(null,"android_dlopen_ext");
    console.log("fun_android_dlopen_ext",android_dlopen_ext);
    var islibaestool = false;
    Interceptor.attach(android_dlopen_ext,{
        onEnter:function(args){
            var pathptr = args[0];
            if(pathptr!=null && pathptr != undefined){
                var path = ptr(pathptr).readCString();
                if (path.indexOf("libaestool")!=-1){
                    console.log("android_dlopen_ext:",path);
                    islibaestool = true;
                }
            }
        },
        onLeave:function(retval){
            if (islibaestool){
                var method01 = Module.findExportByName("libaestool.so","Java_com_example_aestool_MainActivity_method01");
                console.log("addr of method01",method01);
                Interceptor.attach(method01,{
                    onEnter:function(args){ 
                        var env = Java.vm.getEnv();
                        var jstring = args[2];
                        var cstring = env.getStringUtfChars(jstring,null).readCString();
                        console.log("args[2]:",cstring);
                    },
                    onLeave:function(retval){
                        var env = Java.vm.getEnv();
                        var jstring = retval;
                        var cstring = env.getStringUtfChars(jstring,null).readCString();
                        console.log("result:",cstring);
                    }
                })
                islibaestool = false;
            }
        }
    })
})

主动调用

setImmediate(function(){
    var method01_addr = Module.findExportByName("libaestool.so","Java_com_example_aestool_MainActivity_method01");
    console.log("address of method01 is:",method01_addr);
    Java.perform(function(){
        var jstring = Java.vm.getEnv().newStringUtf("Bileton");
        var method01 = new NativeFunction(method01_addr,"pointer",["pointer","pointer","pointer"]);
        var result = method01(Java.vm.getEnv(),jstring,jstring);
        console.log("result:",Java.vm.getEnv().getStringUtfChars(result,null).readCString())
    })
})

在这里插入图片描述

使用unidbg进行模拟执行

后续补充

标签:混淆,aes,Java,jstring,result,str,var,method01,模拟
From: https://blog.csdn.net/weixin_74305514/article/details/143258099

相关文章

  • 如何在Android Studio中配置模拟器
    在AndroidStudio中配置模拟器需遵循以下步骤:1、打开AVD管理器;2、创建新的虚拟设备;3、选择合适的系统镜像;4、配置虚拟设备硬件参数;5、启动模拟器。在这些步骤中,选择合适的系统镜像至关重要,因为它决定了模拟器运行的Android版本和API级别,同时也影响应用的兼容性测试。开发者应根据......
  • AutoGLM:智谱 AI 推出模拟人类操作手机的 AI 产品,内附官方演示和申请通道!
    ❤️如果你也关注大模型与AI的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的AI应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!......
  • 如何进行游戏物理模拟?
    游戏物理模拟要做到准确和流畅,你需要遵循以下几个步骤:1.理解物理基础;2.选择合适的物理引擎;3.优化物体碰撞检测;4.模拟物体动态行为;5.考虑外部环境因素如气象和地形影响。首要任务是对物理原理有清晰的认识,确保游戏内的行为仿真真实世界。1.理解物理基础对于游戏开发者而言,深入......
  • 【小记】探探学习平台的字体混淆dm
    正在某学习平台做题,想着把题目复制出来和搜索娘深入探讨一下,却发现:嗯?怎么是一坨火星文?实际上有好几个学习平台都引入了这种字体混淆机制以防止复制,打乱了部分汉字Unicode码点和字形的对应关系。这回咱就来折腾折腾,看看这是怎么个事儿。1.怎么个混淆法来到某课堂平台,打开......
  • 20241016 模拟赛(最终测试,空间跳跃,快速访问,门童)
    看题目戳这里总结时间分配:早自习20min。听歌60min,游走60min。100min考试。t1看了40min没看出来转t2,t2打了一半发现负数没想出来,最后二三十分钟打t3暴力,结果神奇般地0pts,因为根节点深度设为1。当然t4没看一眼。唉。下次打模拟赛的时候把耳机摘了。结果:30+0+0+0总结:wssb解析......
  • 《模拟退火算法:在随机中探寻最优解的奇妙之旅》
    在优化算法的广阔天地中,模拟退火算法犹如一颗璀璨的明星,以其独特的魅力和强大的功能吸引着众多研究者和实践者。今天,让我们一同踏上模拟退火算法的奇妙之旅,探索它的奥秘与魅力。一、模拟退火算法的起源与灵感模拟退火算法的灵感来源于固体退火过程。在物理学中,退火是将固体加......
  • 【小记】探探学习平台的字体混淆
    正在某学习平台做题,想着把题目复制出来和搜索娘深入探讨一下,却发现:嗯?怎么是一坨火星文?实际上有好几个学习平台都引入了这种字体混淆机制以防止复制,打乱了部分汉字Unicode码点和字形的对应关系。这回咱就来折腾折腾,看看这是怎么个事儿。1.怎么个混淆法来到某课堂平台,打开......
  • [CSP-J 2023] 一元二次方程(模拟)
    变态的大模拟……洛谷题目传送门https://www.luogu.com.cn/problem/P9750解题思路主要还是模拟,题目让你求啥你就求啥,要注意细节。然后化简根式的可以用质因数分解一下即可。代码#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongintq,n;intaabs(......
  • uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝扫码支付/收付款
    uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝扫码支付/收付款等功能,界面漂亮颜值高,视频商城小工具等,蚂蚁森林种树养鸡农场偷菜样样齐用于视频,商城,直播,聊天等sumer-alipay介绍uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝......
  • 基于圆柱体镜子和光线跟踪实现镜反射观测全景观图的matlab模拟仿真
    1.程序功能描述基于圆柱体镜子和光线跟踪实现镜反射观测全景观图.模拟的场景如下所示: 2.测试软件版本以及运行结果展示MATLAB2022a版本运行 3.核心程序%%step1fori=1:mmx_new(i)=i-round(mm/2);endfori=1:nny_new(i)=i-round(nn/2);......