MOBILE
之前一直没怎么接触过安卓逆向这一块,以至于在某某CC狠狠坐牢,在新生赛也学到很多
APK基础理解
跟随提示一个一个块找到然后拼起来




凯撒加密
没仔细看,甚至偏移量都是手试出来的


So层加密
lib里是个换表base64


frida
收获最大的一道题,配好了环境,学会了如何使用frida以及编写脚本。

通过hook checkPassword获得CorrectPassword,输入弹窗获取flag
function hookTest1(){
var utils = Java.use("com.togakushi.touko.MainActivity");
utils.checkPassword.implementation = function(str){
var correctPassword = this.generatePassword();
var retval = this.checkPassword(str);
console.log(correctPassword,retval);
return retval;
}
}
function main(){
Java.perform(function(){
hookTest1();
});
}
setImmediate(main);
so与java的交互
分析了挺久的一道题,一直在找密文在哪里,以为是个二重加密,没想到只有一层RC4

跟踪nativeVerify函数,三个参数分别是input,key,cipher(原来名称就暗示了吗)


Constants对象有key和cipher,具体加密逻辑在so文件中

这里解决了一个疑惑,为什么jadx中反编译出来的只有三个参数,但是so文件中的对应函数有五个参数。

前两个参数是Java函数表的指针和this指针,后面的参数顺序与jadx中的一样。

看了半天前面全在处理输入,这个指针传给那个变量,那个指针释放之类的,除了对数据的跟踪,关键的只有框起来的部分。

跟进是个标准的RC4,随后是加密结果与密文进行比较。

虽然是新生赛,但是题目的质量对于入门来说还是值得一做地,后续别的方向也尽可能地尝试做一做。

Comments NOTHING