ISC2016训练赛-phrackCTF-Smali
1.ISC2016训练赛-phrackCTF-FindKey2.第三届上海市大学生网络安全大赛-crackme3.2017年全国大学生信息安全竞赛-填数游戏4.“百度杯”CTF比赛 2017 二月场-爆破-15.“百度杯”CTF比赛 2017 二月场-爆破-2
6.ISC2016训练赛-phrackCTF-Smali
7.“百度杯”CTF比赛 九月场-Upload8.“百度杯”CTF比赛 九月场-SQL9.《从0到1:CTFer成长之路》题目-SQL注入-210.“百度杯”CTF比赛 九月场-SQLi11.“百度杯”CTF比赛 2017 二月场-爆破-312.2017第二届广东省强网杯线上赛- who are you13.i春秋 第二届春秋欢乐赛-Hello-World14.“百度杯”CTF比赛 十月场-Login15.“百度杯”CTF比赛 九月场-123ISC2016训练赛-phrackCTF
Smali:
类型:Reverse
题目描述:都说学好Smali是学习Android逆向的基础,现在刚好有一个smali文件,大家一起分析一下吧
解题方法:将题目附件下载下来之后发现是一个.smali文件,将它放进jadx-gui里面进行一下反编译得到:
package net.bluelotus.tomorrow.easyandroid;
import android.util.Base64;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
/* loaded from: C:\Users\76649\AppData\Local\Temp\jadx-3466106792537216802.dex */
public class Crackme {
private String str2 = "cGhyYWNrICBjdGYgMjAxNg==";
public Crackme() {
GetFlag("sSNnx1UKbYrA1+MOrdtDTA==");
}
private String GetFlag(String str) {
byte[] content = Base64.decode(str.getBytes(), 0);//这里将getflag里的值进行base64解密
String kk = new String(Base64.decode(this.str2.getBytes(), 0));//这里将str2里面的值进行base64解码
System.out.println(decrypt(content, kk));
return null;
}
private String decrypt(byte[] content, String password) { //将解码后的Getflag和str2传下来
try {
byte[] keyStr = password.getBytes();
SecretKeySpec key = new SecretKeySpec(keyStr, "AES"); //将解码后的str2作为AES的密钥
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");//进行AES编码解码
cipher.init(2, key);
byte[] result = cipher.doFinal(content); //将解码后的Getflag作为AES的密文
String m = new String(result);
return m;
} catch (InvalidKeyException | NoSuchAlgorithmException | BadPaddingException | IllegalBlockSizeException | NoSuchPaddingException e) {
e.printStackTrace();
return null;
}
}
}
简单分析完这段代码之后,我们发现str2进行base64解码可以得到一串字符串,然后Getflag里面的值经过base64解码得到的是一串乱码,所以这里就比较符合上面分析出来的,str2可能是AES的密钥,Getflag是AES的密文
所以这里我们可以用python脚本来进行解码:
from Crypto.Cipher import AES
import base64
key = base64.b64decode("cGhyYWNrICBjdGYgMjAxNg==")
str1 = base64.b64decode("sSNnx1UKbYrA1+MOrdtDTA==")
print(str1)
cryptor = AES.new(key, AES.MODE_ECB)
print(key)
result = cryptor.decrypt(str1)
print(result)
解码得到flag:
PCTF{Sm4liRiver}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通