2021CISCN初赛部分RE

glass题目解压之后发现是apk文件,更改后缀为.zip,再次解压看到有.dex文件。dex文件是Android系统的可执行文件,包含应用程序的全部操作指令以及运行时数据。我们使用dex2jar反编译该文件。把class.dex复制到dex2jar.bat所在目录,即dex2jar目录下。打开cmd,进入dex2jar所在的目录然后运行dex2jar.bat classes.dex,生成classes-dex2jar.jar就是所要转化jar包。使用jd-gui打开classes-dex2
摘要由CSDN通过智能技术生成

glass

题目解压之后发现是apk文件,更改后缀为.zip,再次解压
在这里插入图片描述
在这里插入图片描述
看到有.dex文件。dex文件是Android系统的可执行文件,包含应用程序的全部操作指令以及运行时数据。我们使用dex2jar反编译该文件。
把class.dex复制到dex2jar.bat所在目录,即dex2jar目录下。打开cmd,进入dex2jar所在的目录然后运行dex2jar.bat classes.dex,生成classes-dex2jar.jar就是所要转化jar包。
在这里插入图片描述
在这里插入图片描述
使用jd-gui打开classes-dex2jar.jar

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

我们可以看到函数里面存在native定义,并且,在整个java代码里面没有checkFlag的定义,只有一个声明,这些都说明函数是定义在so文件之中的。
我们来寻找需要的so文件。
题目的lib文件里面只有一个so文件,正好也是寻找的native的so文件。

在这里插入图片描述
使用ida对其进行反编译。
通过搜索checkFlag函数找到该函数
在这里插入图片描述
我们可以知道flag的长度应该是39位的
接下来看函数sub_FFCsub_1088
sub_FFC:
在这里插入图片描述
sub_1088:
在这里插入图片描述
可以很明显的可以看出来是RC4加密,不清楚的同学可以对照百度百科上面的代码比较,会发现非常相像。同时,RC4的加密脚本也就是它的解密脚本。
那么checkFlag中的12345678就是key。
我们再查看函数sub_10D4
可以看到对RC4处理完成的字符串再次进行处理,先进行异或,后面还有一些处理,看似复杂但是不用太在意,写脚本的时候直接倒回去就可以。
返回主checkFlag,我们发现最后得到的字符要和unk_497C进行比较。
unk_497C:
Shift+E提取一下
在这里插入图片描述
写脚本破解

#include<stdio.h>

void rc4_init(unsigned char*s,unsigned char*key, unsigned long Len)
{
   
    int i=0,j=0;
    unsigned char k[256]={
   0};
    unsigned char tmp=0;
    for(i=0;i<256;i++) 
	{
   
        s[i]=i;
        k[i]=key[i%Len];
    }
    for(i=0;i<256;i++) 
	{
   
        j=(j+s[i]+k[i])%256;
        tmp=s[i];
        s[i]=s[j];
        s[j]=tmp;
    }
}

void rc4_crypt(unsigned char*s,unsigned char*Data,unsigned long Len)
{
   
    int i=0,j=0<
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值