打开apk发现有native库,直接把so拖入ida,分析主程序如下:
首先输入的字符串判断是否是flag{xxxx}的形式,而且总长度是否为38,不是则报错退出
然后中间32字节经过check1函数处理,进行0-15位和16-31的高位互换,
然后再经过一个标准TEA加密
这里的key是假的:
调试的时候才发现实际是这样的:
原来是JNI_Onload的时候才修改掉。
然后就是base64encode,再和固定字符串比较,相等表示成功。
但是这里的base64encode是魔改的:
3->4的bit顺序为: [12,13,14,15,0,1,22,23,8,9,10,11,2,3,4,5,6,7,16,17,18,19,20,21]
同时base表也有变化:
abcdefghijklmnopqrstuvwxyz!@#$%^&*()ABCDEFGHIJKLMNOPQRSTUVWXYZ+/
最后用手工方式对e)n*pNe%PQy!^oS(@HtkUu+Cd$#hmmK&ieytiWwYkIA=
进行解base64,得到:3448e110fc5e633d1ad9f3a24dbacafb8526703747b8c320608113588ebc90ab
再用TEA解密得到:
6560343634356738373535653135306232323361603136343962316361673535
转ascii以后是:
e`4645g8755e150b223a`1649b1cag55
还需要最后一步处理才是flag,就是高位替换
最后得出flag为:flag{504fd5787e5eae02bb3101f4921c175e}