基础Android
题目链接:https://adworld.xctf.org.cn/task/answer?type=mobile&number=6&grade=1&id=5489&page=1
解法1:
该解法为捷径解法
查看包结构,没有lib,说明逻辑全在java层,但是有一个assets,assets里面的东西一般会比较值钱



解法2:
该解法为正规解法
在主活动中存在一个密码校验,输入正确后可以进入下一个活动

Java.perform(function(){
var Check = Java.use(com.example.test.ctf02.Check);
Check.checkPassword.overload(java.lang.String).implementation = function (str) {
return true;
}
});
跳转后同样是一个校验页面,下面有一张图片。代码逻辑中会把输入的内容以广播的形式发送



APK逆向
题目链接:https://adworld.xctf.org.cn/task/answer?type=mobile&number=6&grade=1&id=4875&page=1
解法:
该题目很简单,在程序初始化时定义了字符串Tenshine,并在检查函数中获取了其md5,每隔一位取一个字符,最终组成为flag,flag为flag{bc72f242a6af3857}

Android 2.0
题目地址:https://adworld.xctf.org.cn/task/answer?type=mobile&number=6&grade=1&id=5491&page=1
解法:
flag检查逻辑为so中得getResult函数

定义了三个变量分别用于获取输入,1、4、7、10、13位赋给v5,2、5、8、11、14赋给v6,3、6、8、12、15位附给v7

遍历并修改v5的前四位,进行
(2 * a1[i]) ^ 0x80 运算后于LN^dl比较

v6前4位与v5做亦或并修改,v7前4位与v6(修改后的)做亦或并修改,分别于内存中给定的数据作比较

组合三个变量值即为flag,flag{sosorryla}


