Smali

0x01 题目描述

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

0x02 题解

这道题下载下来是一个smali文件,先用smali2java工具将其转换为java文件,具体工具可以谷歌一个自己用的比较顺手的

转换之后的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/**
* Generated by smali2java 1.0.0.558
* Copyright (C) 2013 Hensence.com
*/

package net.bluelotus.tomorrow.easyandroid;

import android.util.Base64;
import java.io.PrintStream;
import java.security.NoSuchAlgorithmException;
import javax.crypto.NoSuchPaddingException;
import java.security.InvalidKeyException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.BadPaddingException;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.Cipher;
import java.security.Key;
import java.security.GeneralSecurityException;

public class Crackme {
private String str2 = "cGhyYWNrICBjdGYgMjAxNg==";

public Crackme() {
GetFlag("sSNnx1UKbYrA1+MOrdtDTA==");
}

private String GetFlag(String p1) {
byte[] "content" = Base64.decode(p1.getBytes(), 0x0);
String "kk" = new String(Base64.decode(str2.getBytes(), 0x0));
System.out.println(decrypt("content", "kk"));
return null;
}

private String decrypt(byte[] p1, String p2) {
String "m" = 0x0;
try {
byte[] "keyStr" = p2.getBytes();
SecretKeySpec "key" = new SecretKeySpec("keyStr", "AES");
Cipher "cipher" = Cipher.getInstance("AES/ECB/NoPadding");
"cipher".init(0x2, "key");
byte[] "result" = "cipher".doFinal(p1);
return "m";
} catch(NoSuchPaddingException "e") {
"e".printStackTrace();
}
return "m";
}
}

分析代码,不难发现这是一个AES ECB模式NoPadding填充模式的解密代码,传入GetFlag函数的base64字符串应该就是flag加密后的base64,str2是密钥,因此直接解密即可得到flag

本文标题:Smali

文章作者:Pino-HD

发布时间:2018年06月10日 - 16:06

最后更新:2018年06月10日 - 16:06

原始链接:https://pino-hd.github.io/2018/06/10/Smali/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!