Jarvis OJ 【REVERSE】 Smali

题目:都说学好Smali是学习Android逆向的基础,现在刚好有一个smali文件,大家一起分析一下吧~~

链接:Crackme.smali.36e0f9d764bb17e86d3d0acd49786a18

 

之前接触过点smali,看下文件就是smali,本来想找smali转java工具,但看了下smali发现几个函数名能推出东西,如下

然后结合smali语法花点时间看了下代码逻辑,大致就是在构造函数中调用GetFlag函数,然后GetFlag中调用decrypt函数,最终输出解密结果。那就要找加密算法和密文,密钥。

首先在construtor中有两个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!

你可能感兴趣的:(每天一道ctf)