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

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

2016-5-27 16:24
10221
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;
  }

[培训]科锐软件逆向50期预科班报名即将截止,速来!!! 50期正式班报名火爆招生中!!!

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

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

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

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

好像就是一个把字符串v3拷贝给到v2的过程。。只不过他分开考了 先ABCD 然后在EFG\0 考过去。然后地址+8继续考后面的
雪    币: 24
活跃值: (102)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wulumuqi 2016-5-30 15:06
15
0
char str[] = "ABCDEFG";
雪    币: 225
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rock 2016-5-30 15:29
16
0
按DWORD拷贝的话,会不会高低位颠倒?
雪    币: 2867
活跃值: (1106)
能力值: ( LV12,RANK:215 )
在线值:
发帖
回帖
粉丝
scxc 3 2016-6-1 12:24
17
0
不会啊,这跟那个没关系
雪    币: 180
活跃值: (75)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
kjliaorui 2016-6-4 01:26
18
0
while都没有少个条件
雪    币: 201
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
找高人破解 2017-8-3 11:16
19
0
你加我qq949119824帮我破解一下,有茶水
雪    币: 211
活跃值: (108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
孤山散人 2017-8-5 21:54
20
1
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等内存复制函数一般也是这么操作。强制指针转成整形进行整型赋值。
雪    币: 225
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rock 2017-8-24 09:27
21
0
孤山散人 unsigned __int8 *v2; //v2是个long long型 8个字节的指针 const char *v3; ...
非常感谢
游客
登录 | 注册 方可回帖
返回