jni 调用共享SO库

本文介绍了如何破解竞品的ARM SO库,并通过JNI调用X86版本的SO库进行加密操作。作者首先尝试通过IDA反编译并重写加密逻辑,但发现X86的SO库后,决定直接使用JNI调用。详细步骤包括编译SO库,创建CPP包装层,使用javah生成头文件,最后用g++编译生成java_hello.so,并在Java中成功调用。
摘要由CSDN通过智能技术生成

为了分析竞品对手的定位精度,破解了竞品的SO库,调用加密,Post 到竞品服务器上。得到竞品定位效果,难题出在竞品用的是ARM,必须用手机来进行加密,想用服务器直接加密。开始使用第一种方案,嘻嘻,IDA 反编译 SO库 得到加密函数,分析反汇编代码,得到加密逻辑,重新写一下,真心写了一半了,后来发现了X86的SO库,靠~! 那就可以直接JNI调用SO库。

为了不暴漏代码用hello.so来替代解决方案如下:

首先,就假装写一个库函数是

#include <stdio.h>
void hello(void)
{
    printf("hello\n");
}


编译 gcc -shared -o hello.so hello.c


先包装一个CPP 调用hello.so,然后编译为新的SO库, 然后用JNI调用 

先来java代码

public class Hello {
  static {
    System.load("/home/xietian/java_hello.so");
  }

  //public native static void encode(char[] trans, String src, int len);
  public native static void hello();

  public static void main(String[] args) {
    hello();
  }
}

javac Hello.j

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值