【攻防世界】学习记录-Mobile(系数4)


0792 Android2.0

解答:用反编译工具,直接看MainActivity。
不太清楚的可以先看AndroidManifest.xml,activity标签中指定了入口的activity类。
在这里插入图片描述

分析MainActivity可知关键函数是getResult:
在这里插入图片描述

查看JNI类的getResult方法,是个静态方法。 需要用ida查看so文件。
在这里插入图片描述

apk文件压缩包解压即可,找到so文件。
在这里插入图片描述

这里小小的说明一下怎么找函数(大佬们可以无视跳过~)
在搜索栏直接搜索这个函数就可以,可以看到他的名字起得非常的详细,java+包名+类名+函数名。
在这里插入图片描述

点击后,在出现的汇编代码中,按F5就可以查看反编译的代码了~
在这里插入图片描述

好了,开始正式的分析代码:

1)v2是传给getResult的参数,在题目中就是我们输入的pwd。可以看到先是进行了Init初始化操作,给v3v4v5进行了赋值,然后分别对v3v4v5进行操作(注意v3v4v5都是指针)。

2)v3经过First函数处理后,要满足返回的值不为1,这里将修改后的v3定义为change_v3

3)change_v4change_v3v4的前4个进行异或,最后一位保持原样,结果和byte_2888相等。

4)change_v5change_v4v5的前4个进行异或,最后一位保持原样,结果和AFBo}相等。
在这里插入图片描述

接下来看一下Init函数:实际就是将输入的字符串,每三个为一组,每组的第一个字符给v3,第二个字符给v4,第三个字符给v5
在这里插入图片描述

查看First函数:对v3的前4个字符进行了char*2^0x80操作,最后的结果等于LN^dl
在这里插入图片描述

可以推出最开始的v3的内容是:

c="LN^dl"
result3=""
for i in range(len(c)-1):
    result3+=chr((ord(c[i])^0x80)//2)
result3+=c[4]
print(result3) 
#fgorl

接下来再看v4,前4位通过change_v3byte_2888的前4位异或得到,最后一位是byte_2888的最后一位。(注意是改变后的v3的值,也就是LN^dl

查看byte_2888的内容
在这里插入图片描述

c="LN^dl"
result4=""
cmp4=[0x20,0x35,0x2d,0x16,0x61]
for i in range(len(cmp4)-1):
    result4+=chr(ord(c[i])^cmp4[i])
result4+=chr(cmp4[4])
print(result4)
#l{sra

v5的前4位是change_v4AFBo}的前4位异或,最后一位是}

cmp4=[0x20,0x35,0x2d,0x16,0x61]
result5=""
cmp5="AFBo}"
for i in range(0,4):
    result5+=chr(cmp4[i]^ord(cmp5[i]))
result5+=cmp5[4]
print(result5)
for i in range(5):
    print(result3[i]+result4[i]+result5[i],end="")
#asoy}

最后输出结果得到flag:

for i in range(5):
    print(result3[i]+result4[i]+result5[i],end="")
#flag{sosorryla}

0790 基础android

解答:这道题可以当作杂项题来做。
打开后,发现assets下的有内容,先看一下,根据显示的信息可知,这个压缩包实际是个jpg图片。

assets文件夹存放的是静态资源文件

在这里插入图片描述

直接解压apk,找到这个文件,修改一下后缀获取flag。
在这里插入图片描述

虽然出了结果,但是还是要顺一下代码学习学习~

先看一下AndroidManifest.xml,这里还注册了一个广播接收器,是GetAndChange。
在这里插入图片描述

在MainActivity中,对输入的password进行check判断输入“Good,Please go on!”,可知这只是第一步,并不是最后结果。

继续看后面的内容,发现显示启动了MainActivity2。
在这里插入图片描述

在MainActivity2中调用sendBroadcast方法发送了广播,这里广播接收器所接收的广播种类需要我们自己输入,就是AndroidManifest.xml中在<intent-filter>标签指定的android.is.very.fun
在这里插入图片描述

接下来看一下GetAndChange接收广播后的操作,又启用了NextContent。
在这里插入图片描述

在NextContent中,将timg_2.zip写入到了img.jpg中。
在这里插入图片描述

最后再看一下check类中的内容,代码很简单,分析可知输入的pass的每个字符对应的是(255 - len) - 100-ord('0')
在这里插入图片描述

写脚本跑一下~

for i  in range(0,12):
    print(chr((255 - i) - 100-ord('0')),end="")
# kjihgfedcba`

接下来,通过apk走一下正经的流程。在apk中输入得到的字符串,进入下一阶段
在这里插入图片描述

这里输入android.is.very.fun即可(原因在上面已经写过了)
在这里插入图片描述

获取flag
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值