下载附件之后   改后缀为.apk

本来是直接载入jd-gui的   结果不好看明白代码

【jarvisoj刷题之旅】逆向题目DDCTF - Android Easy的writeup

那我们就先放到安卓模拟器运行一下看看   

输入123456789

发现Wrong Key

【jarvisoj刷题之旅】逆向题目DDCTF - Android Easy的writeup

 

载入Androidkiller

第一步:搜索Wrong

第二步:搜索flag_result_no

第三步:搜索0x7f060023

【jarvisoj刷题之旅】逆向题目DDCTF - Android Easy的writeup

 

【jarvisoj刷题之旅】逆向题目DDCTF - Android Easy的writeup

 

得到三个好玩的

发现0x7f060025对应yes   猜测这个id对应的是正确的路

 

    <public type="string" name="flag_result_no" id="0x7f060023" />

    <public type="string" name="flag_result_none" id="0x7f060024" />

<public type="string" name="flag_result_yes" id="0x7f060025" />

 

这次对照着这个类   就可以很明白了

将2131099685转成十六进制   得到0x7f060025   即yes

那么我们就可以知道关键就在i()这个方法里

【jarvisoj刷题之旅】逆向题目DDCTF - Android Easy的writeup

 

 

【jarvisoj刷题之旅】逆向题目DDCTF - Android Easy的writeup

 

 

【jarvisoj刷题之旅】逆向题目DDCTF - Android Easy的writeup

那就对i()方法进行分析

大致意思就是说先创建一个数组a1   令长度与数组p一样

for循环使a1[i] = p[i] ^ q[i](每位异或赋值给a1的每位)

接着令k 等于a1[0] 

由a1[k + j] != 0得到j

最后再来一个循环赋值得到flag

具体直接看py代码:

【jarvisoj刷题之旅】逆向题目DDCTF - Android Easy的writeup

验证一下   成功!

【jarvisoj刷题之旅】逆向题目DDCTF - Android Easy的writeup

相关文章: