IDA base64 F5

Base64 解码特征

signed int __cdecl base64_decode(BYTE *p_str_base64, int str_len, int p_out_bytes, int p_bytes_get)
{
  signed int result; // eax@3
  int v5; // [sp+0h] [bp-1Ch]@11
  int sum; // [sp+4h] [bp-18h]@7
  int suma; // [sp+4h] [bp-18h]@17
  signed int i; // [sp+8h] [bp-14h]@7
  int j; // [sp+8h] [bp-14h]@17
  signed int bits_count; // [sp+Ch] [bp-10h]@7
  int n_output_bytes; // [sp+10h] [bp-Ch]@4
  unsigned int v12; // [sp+14h] [bp-8h]@4
  signed int f_dontoutput; // [sp+18h] [bp-4h]@4

  if ( p_str_base64 && p_bytes_get )
  {
    v12 = (unsigned int)&p_str_base64[str_len];
    n_output_bytes = 0;
    f_dontoutput = p_out_bytes == 0;
    while ( (unsigned int)p_str_base64 < v12 && *p_str_base64 )
    {
      sum = 0;
      bits_count = 0;
      for ( i = 0; i < 4 && (unsigned int)p_str_base64 < v12; ++i )// 每4个字符换3个字节
      {
        v5 = sub_15E88A0((char)*p_str_base64++); //v5等于base64字符对应的数
        if ( v5 == -1 )
        {
          --i;
        }
        else
        {                                       // 应该是base64算法
          sum = v5 | (sum << 6);                // 2^6=64    高位编码在前
          bits_count += 6;                      //
        }
      }
      if ( !f_dontoutput && n_output_bytes + bits_count / 8 > *(_DWORD *)p_bytes_get )
        f_dontoutput = 1;
      suma = sum << (24 - bits_count);
      for ( j = 0; j < bits_count / 8; ++j )
      {
        if ( !f_dontoutput )
          *(_BYTE *)p_out_bytes++ = ((unsigned int)byte_FF0000 & suma) >> 16;
        suma <<= 8;
        ++n_output_bytes;
      }
    }                                           // while
    *(_DWORD *)p_bytes_get = n_output_bytes;
    if ( f_dontoutput )
      result = 0;
    else
      result = 1;
  }
  else
  {
    result = 0;
  }
  return result;
}

附上base64 table:

索引
对应字符
索引
对应字符
索引
对应字符
索引
对应字符
0
A
17
R
34
i
51
z
1
B
18
S
35
j
52
0
2
C
19
T
36
k
53
1
3
D
20
U
37
l
54
2
4
E
21
V
38
m
55
3
5
F
22
W
39
n
56
4
6
G
23
X
40
o
57
5
7
H
24
Y
41
p
58
6
8
I
25
Z
42
q
59
7
9
J
26
a
43
r
60
8
10
K
27
b
44
s
61
9
11
L
28
c
45
t
62
+
12
M
29
d
46
u
63
/
13
N
30
e
47
v
   
14
O
31
f
48
w
   
15
P
32
g
49
x
   
16
Q
33
h
50
y


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值