0ctf simpleapk writeup


Java层分析

Init中生成flag.txt


按键处理中,将用户输入与flag.txt中内容比较。


直接在手机上找到了flag.txt文件,得到内容如下:

0ctf{Too_Simple_Sometimes_Naive!!!}

提交,发现不对。


So分析:

定位到init函数


猜测应该是so库对read函数进行了hook,导致java层读取的数据并不是文件中真正的内容。

另外checksigcheckstracecheckptrace看这名字都知道不怀好意,checksig应该是对签名做判断,checkstracecheckptrace应该是反调试的。

不过分析发现checkstrace实际是调用checkptrace。而checkptrace函数的代码肉眼看不出采用了什么反调试技术,只好上调试器看看。

结果调试发现checkptrace中间接调用调用的居然是read函数,所以基本猜测程序就是用checkptracehookread。往下看,发现一个明显的异或操作,对read读入的内容进行异或。


直接在调试器中获取到异或的值,写了个程序解了一下:

charflag[]="0ctf{Too_Simple_Sometimes_Naive!!!}";
charkey[]={0x00,0x00,0x00,0x00,0x00,0x1D,0x1B,0x48,0x2C,0x0C,0x24,0x02,0x02,0x09,0x3A,0x0B,
0x3B,0x0E,0x03,0x3A,0x39,0x0C,0x08,0x11,0x00,0x00,0x1A,0x09,0x0C,0x29,0x20,0x58,
0x44,0x00,0x00};
for(inti = 0; i < strlen(flag); i++)
{
<span style="white-space:pre">	</span>flag[i]^=key[i];
}
printf("%s\n",flag);

flag为:0ctf{It's_More_Than_Meets_The_Eye!}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值