题目:都说学好Smali是学习Android逆向的基础,现在刚好有一个smali文件,大家一起分析一下吧~~
链接:Crackme.smali.36e0f9d764bb17e86d3d0acd49786a18
之前接触过点smali,看下文件就是smali,本来想找smali转java工具,但看了下smali发现几个函数名能推出东西,如下
然后结合smali语法花点时间看了下代码逻辑,大致就是在构造函数中调用GetFlag函数,然后GetFlag中调用decrypt函数,最终输出解密结果。那就要找加密算法和密文,密钥。
首先在constructor中有两个base64,如下:
其中第一个可解码为“phrack ctf 2016”,第二个解为乱码,这两个很可能就是密钥和密文,然后顺着代码看,果然看到了base64->decode,在decrypt中明示
再对应aes的密钥长度,第一个base64正好对应ascii16byte,然后就可以写解码了:
#-*- coding:utf8 -*-
import base64
from Crypto.Cipher import AES
cipher="sSNnx1UKbYrA1+MOrdtDTA=="
cipher=base64.b64decode(cipher)
key="cGhyYWNrICBjdGYgMjAxNg=="
key=base64.b64decode(key)
cryptor=AES.new(key, AES.MODE_ECB)
plain_text = cryptor.decrypt(cipher)
print(plain_text)
bingo!