首页
社区
课程
招聘
[求助]一小段IDA抠出的代码,求转C。 若违规请删除
发表于: 2016-5-27 16:24 10667

[求助]一小段IDA抠出的代码,求转C。 若违规请删除

2016-5-27 16:24
10667
unsigned __int8 *v2;
  const char *v3;
  int v4;
  int v5;

  v3 = "ABCDEFG";
  do
  {
    v4 = *(_DWORD *)v3;
    v3 += 8;
    v5 = *(_DWORD *)&v3[0xFFFFFFFC];
    *(_DWORD *)v2 = v4;
    *((_DWORD *)v2 + 1) = v5;
    v2 += 8;
  }

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

收藏
免费 0
支持
分享
最新回复 (20)
雪    币: 225
活跃值: (188)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
抠出的不太明白,特别是v5 = *(_DWORD *)&v3[0xFFFFFFFC];  解释一下也行
2016-5-27 16:26
0
雪    币: 112
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
v3 += 8;
v5 = *(_DWORD *)&v3[0xFFFFFFFC];
这两句一起看啊,
v5 = *(DWORD *)&v3[4];
v3 += 8;
2016-5-27 16:34
0
雪    币: 62
活跃值: (971)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
[QUOTE=FckTheDog;1431116]v3 += 8;
v5 = *(_DWORD *)&v3[0xFFFFFFFC];
这两句一起看啊,
v5 = *(DWORD *)&v3[4];
v3 += 8;[/QUOTE]

把 0xFFFFFFFC 当成 -4 就好了
2016-5-27 16:39
0
雪    币: 225
活跃值: (188)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这样翻译对吗?

int len=8;
unsigned char *v2[len];
unsigned char *v3[len] = "ABCDEFGH";

for (int i=0;i<len;i++)
{
  v2[i] = v3[i+4];
}
2016-5-27 16:53
0
雪    币: 357
活跃值: (3398)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
6
do的下面应该有一个while
2016-5-27 17:08
0
雪    币: 225
活跃值: (188)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这是另一个版本的F5扣出来的
  do
  {
    v4 = *(_DWORD *)v3;
    v3 += 8;
    v5 = *((_DWORD *)v3 - 1);
    *(_DWORD *)v2 = v4;
    *((_DWORD *)v2 + 1) = v5;
    v2 += 8;
  }
2016-5-27 17:10
0
雪    币: 225
活跃值: (188)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
是否就是将字符串转换成BYTE数组?
2016-5-27 17:11
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
9
你把汇编代码贴出来 看看
2016-5-27 17:55
0
雪    币: 2228
活跃值: (2346)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
你把汇编代码贴出来,或者你缺少一本《C++反汇编与逆向分析技术揭秘》的书
2016-5-28 09:41
0
雪    币: 3
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
IDA 有调试功能,调试一下就知道了
2016-5-29 14:43
0
雪    币: 225
活跃值: (188)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
arm的汇编,没有搭建调试环境
2016-5-30 11:38
0
雪    币: 803
活跃值: (850)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
13
贴出ARM汇编的代码不就清晰啦
2016-5-30 13:23
0
雪    币: 2907
活跃值: (1301)
能力值: ( LV12,RANK:215 )
在线值:
发帖
回帖
粉丝
14
[QUOTE=rock;1431114]抠出的不太明白,特别是v5 = *(_DWORD *)&v3[0xFFFFFFFC];  解释一下也行[/QUOTE]

好像就是一个把字符串v3拷贝给到v2的过程。。只不过他分开考了 先ABCD 然后在EFG\0 考过去。然后地址+8继续考后面的
2016-5-30 14:22
0
雪    币: 24
活跃值: (102)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
char str[] = "ABCDEFG";
2016-5-30 15:06
0
雪    币: 225
活跃值: (188)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
按DWORD拷贝的话,会不会高低位颠倒?
2016-5-30 15:29
0
雪    币: 2907
活跃值: (1301)
能力值: ( LV12,RANK:215 )
在线值:
发帖
回帖
粉丝
17
不会啊,这跟那个没关系
2016-6-1 12:24
0
雪    币: 180
活跃值: (80)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
18
while都没有少个条件
2016-6-4 01:26
0
雪    币: 201
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
19
你加我qq949119824帮我破解一下,有茶水
2017-8-3 11:16
0
雪    币: 211
活跃值: (118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
unsigned  __int8  *v2;                                                //v2是个long  long型    8个字节的指针
    const  char  *v3;                                                            //v3是个char  *  指针
    int  v4;                                                                                 
    int  v5; 

    v3  =  &quot;ABCDEFG&quot;;
    do
    {
        v4  =  *(_DWORD  *)v3;                                            //把v3强制转为4个字节的整型指针,然后取值赋给v4,V4的值应该是0x44434241
        v3  +=  8;                                                                                        //V3的值+8,
        v5  =  *(_DWORD  *)&amp;v3[0xFFFFFFFC];    //  V3的值减4,  同样转换为4字节整型取值给v5,  v5的值应该是0x00474645
        *(_DWORD  *)v2  =  v4;                                                          //V2也转为4字节整形,在将v4的值赋给v2,则v2指向地址按由低到高依次为  0x41  0x42  0x43  0x44
        *((_DWORD  *)v2  +  1)  =  v5;                                          //V2也转为4字节整形然后加1,在将v5的值赋给v2,则v2指向地址按由低到高依次为  0x41  0x42  0x43  0x44  0x45  0x46  0x47  0x00
        v2  +=  8;                                                                                                  //V2指向下一个地址。 
    }

这个程序不考虑其他,只看代码就是一个快速复制内存的程序。因为单个字节的复制没有4个字节的速度快。memcpy等内存复制函数一般也是这么操作。强制指针转成整形进行整型赋值。
2017-8-5 21:54
1
雪    币: 225
活跃值: (188)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
孤山散人 unsigned __int8 *v2; //v2是个long long型 8个字节的指针 const char *v3; ...
非常感谢
2017-8-24 09:27
0
游客
登录 | 注册 方可回帖
返回
//