首页
社区
课程
招聘
[ReverseMe挑战赛]答案提交
发表于: 2014-10-2 21:01 6302

[ReverseMe挑战赛]答案提交

2014-10-2 21:01
6302

附件是同等功能的源码和bin
有空再来还原原始代码


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

上传的附件:
收藏
免费 3
支持
分享
赞赏记录
参与人
雪币
留言
时间
飘零丶
为你点赞~
2024-5-31 03:44
shinratensei
为你点赞~
2024-5-31 03:30
PLEBFE
为你点赞~
2023-3-2 07:18
最新回复 (7)
雪    币: 287
活跃值: (137)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
原始字节码框架是:
sub     esp, 0x1c
mov     eax, dword ptr [0x403000]
xor     eax, esp
mov     dword ptr [esp+0x1c], eax
push    edi

.......

mov     ecx, dword ptr [esp+0x1c]
pop     edi
xor     ecx, esp
xor     eax, eax
call    004011C7
add     esp, 0x1c
retn
2014-10-2 21:09
0
雪    币: 287
活跃值: (137)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
最后是 retn 4, 怎么不能编辑
2014-10-2 21:10
0
雪    币: 287
活跃值: (137)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
简单分析下这个虚拟机吧

1. 和VMP很相似,但是比VMP复杂很多
2. 寄存器随机变换,每次读写寄存器都会进行32次移位
3. VMP是通过NNA实现逻辑运算,  此虚拟机是NNA + NNR
4. 全程代码校验,不知道该不该这么叫,虚拟机引擎本身参与计算,所以下断点要小心。
5. 解析后的指令序列也乱序了,跳的晕头转向
2014-10-2 21:21
0
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
5
感谢参与 大问题没有 不过最好将答案规范一下 需要还原的是hash函数 不是main函数
另外请再比对一下输入输出
  
BTW:对虚拟机引擎的评价也很中肯到位
2014-10-4 19:46
0
雪    币: 287
活跃值: (137)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
代码规范一下

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
unsigned char szData[1000] = {0};
unsigned int nHash = 0;
 
scanf( "%s", szData);//overflow
 
for ( int i=0; i<(int)strlen((char*)szData); i++ )
{
    __asm{
        pushad
        mov eax, [nHash]
        mov edx, [nHash]
        mov cl, 3
        shld eax, edx, cl
        mov [nHash], eax
        popad
            }
    nHash += szData[i];
    nHash ^= 0x20141001;
    nHash  = ~nHash;
    nHash += 0x20141007;
 
    __asm
    {
        pushad
        mov eax, [nHash]
        mov edx, 0xCEBEA6DA
        mul edx
        mov [nHash], eax
        popad
    }
    __asm{
        pushad
            mov eax, [nHash]
            mov edx, [nHash]
            mov cl, 0x7
            shld eax, edx, cl
            mov [nHash], eax
            popad
 
    }
}
 
 
nHash = ~nHash;
 
unsigned char Key1[12] = {0x83, 0x97, 0xA9, 0x99, 0xA7, 0xA9, 0x9C, 0x85, 0x9E, 0x5B, 0x00, 0x00};
unsigned char Key2[12] = {0x15, 0x30, 0x26, 0x25, 0x21, 0x15, 0x33, 0x27, 0x27, 0x2F, 0x00, 0x00};
 
for ( i=0; i<10; i++ )
{
    __asm{
            pushad
            mov eax, [nHash]
            mov edx, [nHash]
            mov cl, 0x5
            shld eax, edx, cl
            mov [nHash], eax
            popad
             
    }
    nHash ^= Key2[i];
    nHash ^= 'A' + i;
    nHash -= Key1[i];
    nHash += '1' + i;
}
 
nHash ^= 0x19810304;
 
printf("%08X\n", nHash);
 
return 0;
2014-10-4 23:11
0
雪    币: 55963
活跃值: (21450)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
7
答案提交区,提交时间也是成绩计算一部分,因此发的帖不能编辑,若有错,可以跟帖把新答案付上。

附件只能上传,不能下载和删除。
若有新附件,请重新跟帖上传新附件。
2014-10-5 19:50
0
雪    币: 55963
活跃值: (21450)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
8
活动结束,答案移出来了。
具体参考活动发起帖:http://bbs.pediy.com/showthread.php?t=192742
2014-10-8 10:12
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册