学逆向论坛

找回密码
立即注册

只需一步,快速开始

发新帖

2万

积分

41

好友

1157

主题
发表于 2019-7-13 12:21:33 | 查看: 4070| 回复: 0

相关题目:

♦ android20

文件下载后发现是zip格式,我们可以将后缀改为.apk然后后用jeb打开进行分析。
217735d295bc14083d.png
我们可以看到有这么多复杂的东西,不要紧张,对于一般比较简单的题目,我们只需要找到函数的入口,即MainActivity中onCreate方法下的onClick点击事件,因为是找注册码(flag),那就肯定有一个按钮负责判断注册码是否正确,这个按钮的点击事件就是用onClick实现的,所以大部分这种题目直接找onClick就对了。我们双击之后可以看到以下的代码,这里是smail代码,可以说是Android下的汇编代码,看不懂没关系,右键选择Decompile反汇编查看java代码就明白了
808115d295bda3a41d.png

下面是java代码
222305d295bfe64559.png
上面是主要函数的内容,这里是要调用MainActivity的check()函数来判断flag是否正确,我们直接定位到check()函数
762245d295c2990b30.png
分析函数内容,可以看出数组v0即是我们输入的注册码,根据if语句可以确定注册码的长度和s[]数组一样有31位,下面又有一个if语句判断即为我们的关键语句:s[v1] == (v0[v1] ^ 23)
因为flag字符都是ASCII码在0-127中,所以这种题目我们直接用python进行爆破,我们用m替换v1,范围是(0,31),用i替换v0[v1],i即为flag中的一个一个字符,最后爆破得到flag
python代码:
s = [113, 123, 118, 112, 108, 94, 99, 72, 38, 68, 72, 87, 89, 72, 36, 118, 100, 78, 72, 87, 121, 83, 101, 39, 62, 94, 62, 38, 107, 115, 106]

flag = ""

for m in range(0,31):
        for i in range(0,127):
                if(s[m] == (i ^ 23)):
                        flag += chr(i)
print(flag)



温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的认可,还可以获得学币奖励,请尊重他人的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046

小黑屋|手机版|站务邮箱|学逆向论坛 ( 粤ICP备2021023307号 )|网站地图

GMT+8, 2024-5-18 11:00 , Processed in 0.118197 second(s), 41 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表