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

[ReverseMe挑战赛]答案提交

2014-10-2 21:01
6108

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


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (7)
雪    币: 287
活跃值: (102)
能力值: ( 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
活跃值: (102)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
最后是 retn 4, 怎么不能编辑
2014-10-2 21:10
0
雪    币: 287
活跃值: (102)
能力值: ( 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
活跃值: (102)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
代码规范一下

	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
雪    币: 47147
活跃值: (20410)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
7
答案提交区,提交时间也是成绩计算一部分,因此发的帖不能编辑,若有错,可以跟帖把新答案付上。

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