首页
社区
课程
招聘
[求助]这个IDA反编译的解密代码怎么看
发表于: 2014-11-13 08:52 14323

[求助]这个IDA反编译的解密代码怎么看

2014-11-13 08:52
14323
牛牛们,能否指点下!!!!!!!!

void *__fastcall base64_decode(const char *a1)
{
  signed int v1; // r0@1
  void *result; // r0@1
  int v3; // r2@1
  int v4; // r1@1
  int v5; // r5@1
  signed int v6; // r4@1
  int v7; // r12@2
  int v8; // r6@3
  int v9; // r1@3
  char *v10; // r6@4
  int v11; // r1@4
  int v12; // r3@9
  unsigned __int8 v13; // ST04_1@10
  unsigned __int8 v14; // ST00_1@10
  signed int v15; // [sp+Ch] [bp-2Ch]@1
  const char *v16; // [sp+10h] [bp-28h]@1
  char v17; // [sp+1Ch] [bp-1Ch]@3
  unsigned __int8 v18; // [sp+1Dh] [bp-1Bh]@10
  unsigned __int8 v19; // [sp+1Eh] [bp-1Ah]@10
  char v20; // [sp+1Fh] [bp-19h]@10

  v16 = a1;
  v1 = strlen(a1);
  v15 = v1;
  result = malloc(3 * (v1 / 4) + 1);
  v3 = 0;
  v4 = result;
  v5 = 0;
  v6 = 0;
  while ( 1 )
  {
    v12 = 0;
    if ( v6 >= v15 )
      break;
    v7 = v4;
    do
    {
      v8 = *(&v16[v6] + v12);
      v9 = *(&v16[v6] + v12) - 43;
      *(&v17 + v12) = v8;
      if ( v9 <= 0x4F && (v10 = &aRstuvwxyzAbcde[v8 - 43], v11 = *v10, *v10) && v11 != 36 && v11 != 61 )
        *(&v17 + v12) = v11 - 62;
      else
        ++v3;
      ++v12;
    }
    while ( v12 != 4 );
    v5 += 3;
    v13 = v18;
    v6 += 4;
    *v7 = (v18 >> 4) | 4 * v17;
    v14 = v19;
    *(v7 + 1) = (v19 >> 2) | 16 * v13;
    *(v7 + 2) = (v14 << 6) | v20;
    v4 = v7 + 3;
  }
  *(result + v5 - v3) = 0;
  return result;
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
base64_decode..............还能怎么看
2014-11-13 09:47
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
都f5这样了还不能看?
2014-11-13 12:03
0
雪    币: 215
活跃值: (51)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
so文件用IDA ARM F5出来的吗
2014-11-13 12:11
0
雪    币: 30
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
是的。。。

看不懂!
2014-11-14 11:16
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这么清楚了,还要怎么看
2014-11-14 13:43
0
雪    币: 58
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
难道楼主想要IDA给出这样的输出?

base64_decode() {
//这个就是base64的解码代码,不用看了!!
}
2014-11-14 14:48
0
雪    币: 30
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
咋好像都很神的样子啊,楼上的几位说说这个代码具体的含义啊!
2014-11-15 09:32
0
雪    币: 2775
活跃值: (2226)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
这个你上网上找找BASE64解密源码不就出来了?
2015-4-18 09:36
0
雪    币: 30
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我主要是想知道,这怎么看。。都是F5出来的看不懂。。

v9 = *(&v16[v6] + v12) - 43

就好比这样的代码,具体啥意思,
2015-4-18 09:52
0
雪    币: 2775
活跃值: (2226)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
[QUOTE=cnywco;1365921]我主要是想知道,这怎么看。。都是F5出来的看不懂。。

v9 = *(&v16[v6] + v12) - 43

就好比这样的代码,具体啥意思,[/QUOTE]
v16很有可能是一个对象数组或结构体数组,应该不是数组的数组(二维数组),因为V12是变量,
具体的请去了解C数组寻址。

class node
{
      int a=0,b=0,c=0,d=0;
};

node v16[100];
int v6=2,v12=8;
int v9 = *(&v16[v6] + v12) - 43;

不知这样你能否看懂,我也是刚学反汇编,共勉哈
2015-4-18 10:06
0
雪    币: 2775
活跃值: (2226)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
[QUOTE=cnywco;1365921]我主要是想知道,这怎么看。。都是F5出来的看不懂。。

v9 = *(&v16[v6] + v12) - 43

就好比这样的代码,具体啥意思,[/QUOTE]

v16是char*类型,假如v16="123456";
那么

*(&v16[0]+1)-1你看是不是和你那个是不是类似
2015-4-18 10:18
0
游客
登录 | 注册 方可回帖
返回
//