ELF文件

elf文件的后缀为so,所有又叫做so文件,是unix(一个系统的名字)的动态连接库,是二进制文件,作用相当于windows下的.dll文件
Java的底层太容易被逆向,所以一些底层算法如果不想被看到,就都会放到so文件中。so和java相互有接口,可以相互调用。
在java中调用so的方法:

void System.load(String pathName);

smail调用so层方法

invoke-virtual {v1, v2}, Lcom/example/cctf/MainActivity;->verify([B)Ljava/lang/String;

elf文件的格式:

实例

攻防世界安卓2
首先我们分析主类MainActivity,查看点击事件,取值传入SecondActivity,Oncreate类代表窗体生成,其中获取了传入的参数,并对其作了加密。
Encryto.doRawData(this, paramBundle + str).equals("VEIzd/V2UPYNdn/bxH3Xig==")
继续跟进Encryto函数

其中daRRawData是so文件导入的,在Android中调用动态库文件(*.so)是通过JNI式,我们需要分析so文件。

打开lib中的一个so文件,拖入IDA

找到doRawData,tab查看伪代码,可以看到加密方式为AES,这里直接给出了密钥。

在分析apk的代码,调试代码,发现其中有一个FileDataActivity类没有被调用过,打开类可以看到明显被加密的字符串

之后自己构造一个AES加密或者直接从网上解密,可以得出flag


"孓然一身 , 了无牵挂"