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

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

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

【jarvisoj刷题之旅】逆向题目DDCTF - Android Easy的writeup_第1张图片

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

输入123456789

发现Wrong Key

【jarvisoj刷题之旅】逆向题目DDCTF - Android Easy的writeup_第2张图片

 

载入Androidkiller

第一步:搜索Wrong

第二步:搜索flag_result_no

第三步:搜索0x7f060023

【jarvisoj刷题之旅】逆向题目DDCTF - Android Easy的writeup_第3张图片

 

【jarvisoj刷题之旅】逆向题目DDCTF - Android Easy的writeup_第4张图片

 

得到三个好玩的

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

 

   

   

 

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

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

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

【jarvisoj刷题之旅】逆向题目DDCTF - Android Easy的writeup_第5张图片

 

 

【jarvisoj刷题之旅】逆向题目DDCTF - Android Easy的writeup_第6张图片

 

 

【jarvisoj刷题之旅】逆向题目DDCTF - Android Easy的writeup_第7张图片

那就对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_第8张图片

验证一下   成功!

【jarvisoj刷题之旅】逆向题目DDCTF - Android Easy的writeup_第9张图片

你可能感兴趣的:(我的逆向之路,我的CTF之路,我的CTF进阶之路)