• ISC2016训练赛 phrackCTF--Smali


    测试文件:https://static2.ichunqiu.com/icq/resources/fileupload/phrackCTF/REVERSE/Crackme.smali

    参考资料:https://www.cnblogs.com/lz2017/p/6917049.html

    1.文件分析

    使用SmaliJavaUI反编译文件,得到

     1 /**
     2   * Generated by smali2java 1.0.0.558
     3   * Copyright (C) 2013 Hensence.com
     4   */
     5 
     6 package net.bluelotus.tomorrow.easyandroid;
     7 
     8 import android.util.Base64;
     9 import java.io.PrintStream;
    10 import java.security.NoSuchAlgorithmException;
    11 import javax.crypto.NoSuchPaddingException;
    12 import java.security.InvalidKeyException;
    13 import javax.crypto.IllegalBlockSizeException;
    14 import javax.crypto.BadPaddingException;
    15 import javax.crypto.spec.SecretKeySpec;
    16 import javax.crypto.Cipher;
    17 import java.security.Key;
    18 import java.security.GeneralSecurityException;
    19 
    20 public class Crackme {
    21     private String str2 = "cGhyYWNrICBjdGYgMjAxNg==";
    22     
    23     public Crackme() {
    24         GetFlag("sSNnx1UKbYrA1+MOrdtDTA==");
    25     }
    26     
    27     private String GetFlag(String p1) {//将上面两段字符串经过base64解密
    28         byte[] "content" = Base64.decode(p1.getBytes(), 0x0);
    29         String "kk" = new String(Base64.decode(str2.getBytes(), 0x0));
    30         System.out.println(decrypt("content", "kk"));
    31         return null;
    32     }
    33     
    34     private String decrypt(byte[] p1, String p2) {//将解密后的序列,一段用来生成key,一段作为被AES加密的字符串。
    35         String "m" = 0x0;
    36         try {
    37             byte[] "keyStr" = p2.getBytes();
    38             SecretKeySpec "key" = new SecretKeySpec("keyStr", "AES");
    39             Cipher "cipher" = Cipher.getInstance("AES/ECB/NoPadding");
    40             "cipher".init(0x2, "key");
    41             byte[] "result" = "cipher".doFinal(p1);
    42             return "m";
    43         } catch(NoSuchPaddingException "e") {
    44             "e".printStackTrace();
    45         }
    46         return  "m";
    47     }
    48 }

    2.脚本获取

    from Crypto.Cipher import AES
    import base64
    
    key = base64.b64decode("cGhyYWNrICBjdGYgMjAxNg==")
    str1 = base64.b64decode("sSNnx1UKbYrA1+MOrdtDTA==")
    
    cryptor = AES.new(key, AES.MODE_ECB)
    result = cryptor.decrypt(str1)
    print(result)

    3.get flag!

    PCTF{Sm4liRiver}

  • 相关阅读:
    CF785E Anton and Permutation
    P4054 [JSOI2009]计数问题
    P4396 [AHOI2013]作业
    AD PCB中各层的含义
    AD21 使用手册 快捷键(二)
    AD 汉化和界面恢复
    AD21 使用手册 快捷键(一)
    TINA-TI 安装
    B站下载 视频
    restful-work基本组件
  • 原文地址:https://www.cnblogs.com/Mayfly-nymph/p/11681883.html
Copyright © 2020-2023  润新知