首页
社区
课程
招聘
[原创]过年打发时间写了个vmp, 发个样本上来求爆.
发表于: 2016-2-27 21:45 15091

[原创]过年打发时间写了个vmp, 发个样本上来求爆.

2016-2-27 21:45
15091


大神见笑了.

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 5954
活跃值: (66)
能力值: ( LV4,RANK:140 )
在线值:
发帖
回帖
粉丝
2
支持一下,看看我现在的功力怎么样了
2016-2-27 22:07
0
雪    币: 68
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
vmp下来学习下
2016-2-27 22:42
0
雪    币: 6
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢分享
2016-2-28 00:25
0
雪    币: 3411
活跃值: (2132)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
好厉害的样子。
2016-2-28 00:59
0
雪    币: 21
活跃值: (579)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
6
#include <Windows.h>
#include <stdint.h>
#include <stdio.h>
//init key table
void sub_00401000(BYTE *p1, BYTE *p2, int size){
	DWORD index = 0;
	DWORD table[0x100];//dword_0x0019F6E0
	BYTE  tmp;
	for (int i = 0; i < size; i++){
		table[i] = p2[i];
		p1[i] = i;
	}
	for (int i = 0; i < size; i++){
		//0042DB70 48    vAdd4               ;0x00000000+0x00000000=0x00000000
		index = (index + p1[i] + table[i]) & 0xFF;
		//004324BF 3C    vNor4               ;0x00000000 0xFFFFFF12=0x000000ED
		tmp = p1[i] ^ 0xED;
		//00431DF6 68    vWrite1             ;[0x0019FBFC]=0x81
		p1[i] = p1[index];
		//00431E31 48    vAdd4               ;0x00000081+0x0019FBFC=0x0019FC7D
		p1[index] = tmp;
	}
}
//encrypt
void sub_001150(BYTE *p1, char *psz, int len){
	BYTE index = 0;
	BYTE tmp = 0;
	for (int i = 0; i < len; i++){
		//0043AA49 5C    vRead1              ;[0x0019FBFD]=0x9F
		index = index + p1[i + 1];
		//0043AD6B 48    vAdd4               ;0x00000000+0x0000009F=0x0000009F

		//0043EFAB 48    vAdd4               ;0x0000009F+0x0019FBFC=0x0019FC9B
		//0043EFBC 5C    vRead1              ;[0x0019FC9B]=0x7F  [0x9F]
		//0043EFDB 68    vWrite1             ;[0x0019FBFD]=0x7F
		tmp = p1[i + 1];
		p1[i + 1] = p1[index];

		//0043F02D 5C    vRead1              ;[0x0019FAE3]=0x9F


		//0043F04C 68    vWrite1             ;[0x0019FC9B]=0x9F


		//0043F3FA 5C    vRead1              ;[0x0019FC9B]=0x9F


		//0043F715 48    vAdd4               ;0x0000009F+0x0000007F=0x0000011E

		//0043F715 48    vAdd4               ;0x0000009F+0x0000007F=0x0000011E
		//index + p1[index];

		//0043F925 3C    vNor4               ;0xFFFFFEE1 0x7FFFFF00=0x0000001E
		//(index)& 0xFF;
		//0044386D 48    vAdd4               ;0x0000001E+0x0019FBFC=0x0019FC1A
		//=p1[(index + p1[index]) & 0xFF];
		//00443BE0 5C    vRead1; [0x0019FD28] = 0x31
		//=psz[i];
		//00443F73 3C    vNor4               ;0x00000023 0x00000023=0xFFFFFFDC
		//004441DF 3C    vNor4               ;0x00000021 0xFFFFFFCC=0x00000012
		//= psz[i] ^ p1[(index + p1[index]) & 0xFF];
		//1E AA 76 78 58 F6

		//0044423B 68    vWrite1; [0x0019FD28] = 0x12
		psz[i] = psz[i] ^ p1[(tmp + p1[index]) & 0xFF];
		//00444291 5C    vRead1              ;[0x0019FD28]=0x12
		//= psz[i];
		//00444893 3C    vNor4               ;0x00000012 0xFFFFFF21=0x000000CC
		//004448EF 68    vWrite1             ;[0x0019FD28]=0xCC		
		psz[i] = psz[i] ^ 0xDE;
	}
}
void sub_004012A0(char *psz, int len){
	BYTE p1[0x100];
	BYTE p2[0x100] = {
		0x81, 0x3F, 0xBA, 0xDA, 0x6F, 0xBD, 0x5A, 0x3D, 0xA5, 0x62, 0x89, 0x8C, 0xE2, 0x13, 0xD8, 0x82,
		0xA5, 0xC9, 0x27, 0x19, 0x72, 0xF0, 0xF2, 0xCB, 0x71, 0x8B, 0x17, 0xA1, 0x1A, 0x42, 0x35, 0xBE,
		0xFD, 0x55, 0xF0, 0x65, 0x38, 0x21, 0x76, 0xD6, 0xD6, 0xF3, 0xC5, 0x58, 0xAB, 0xE8, 0x03, 0x9A,
		0x24, 0xB9, 0xB6, 0xE8, 0xD9, 0xF3, 0x64, 0xB4, 0x82, 0x62, 0x9D, 0x37, 0x1B, 0x36, 0x00, 0x8E,
		0x1C, 0x99, 0x93, 0xE5, 0xE5, 0xF7, 0xDC, 0xB8, 0x72, 0xEE, 0xE3, 0x48, 0x62, 0x20, 0x0C, 0x8C,
		0x1D, 0xCC, 0x2D, 0x94, 0x26, 0x1C, 0x64, 0xBE, 0x54, 0x59, 0x11, 0x3B, 0xF5, 0xE3, 0x5F, 0xC9,
		0x60, 0x1F, 0x59, 0xF9, 0xFA, 0xFD, 0xC0, 0xD6, 0x55, 0x58, 0xB9, 0x12, 0x95, 0xF4, 0x06, 0x1A,
		0x3C, 0xB1, 0x36, 0x86, 0x00, 0xDB, 0xE6, 0xD7, 0xA3, 0x1B, 0x9F, 0x75, 0xF2, 0xCA, 0x76, 0xEA,
		0xDD, 0x02, 0xB3, 0x8A, 0x08, 0x51, 0x99, 0xC9, 0x72, 0x36, 0x88, 0x2A, 0x19, 0x09, 0x7B, 0x3C,
		0x56, 0x60, 0x53, 0x28, 0xBA, 0x14, 0x0B, 0x88, 0x5C, 0x61, 0x65, 0x2F, 0x0D, 0x2D, 0xBA, 0x92,
		0x86, 0xB3, 0x01, 0x70, 0xE2, 0xAA, 0xB5, 0xF5, 0x84, 0xF9, 0xD5, 0x6A, 0x97, 0x6B, 0x3C, 0xC5,
		0xA5, 0xBA, 0x40, 0x82, 0xA0, 0x42, 0x4E, 0x83, 0xCA, 0x3F, 0x3E, 0x76, 0x2A, 0xF2, 0x3D, 0x5C,
		0x3F, 0xFC, 0x64, 0x0C, 0x53, 0x91, 0x97, 0xC7, 0xD6, 0xEA, 0x73, 0x42, 0x7B, 0x93, 0x05, 0x29,
		0x23, 0x94, 0x8B, 0x8C, 0x0E, 0xD4, 0x30, 0x2A, 0xCC, 0xCC, 0x9E, 0xB8, 0x8E, 0x77, 0x6B, 0xA4,
		0xE4, 0x0A, 0xAE, 0x05, 0xFD, 0xD0, 0x8E, 0x13, 0x80, 0x0D, 0xDB, 0xF7, 0xCB, 0x3A, 0x72, 0x9F,
		0xA5, 0xC3, 0x97, 0x58, 0x86, 0x23, 0x6B, 0x8E, 0xF5, 0x32, 0xC1, 0xFB, 0x42, 0x31, 0xD6, 0xF3,
	};
	if (len == 0){
		return;
	}
	sub_00401000(p1, p2, 0x100);
	sub_001150(p1, psz, len);
}

void sub_00401A50(){
	printf("%s\n", "----> Hello, SVMP!!!");
}


int main(int argc, char **argv){
	char szInput[260];
	int len = 0;
	sub_00401A50();
	printf("in:");
	scanf("%s", szInput);
	len = strlen(szInput);
	sub_004012A0(szInput, len);
	printf("out:");
	for (int i = 0; i < len; i++){
		printf("%02x ", (BYTE)szInput[i]);
	}
	fflush(stdin);
	getchar();
	return 0;
}

2016-2-28 14:40
0
雪    币: 220
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
默默被VM蹂躏了无数年
看到6楼,直接跪了。。。。
2016-2-28 17:15
0
雪    币: 258
活跃值: (100)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
8
这位同学还原的很对哦,这里面就 mov add xor read write 几乎没有使用拆分指令, 如果明白nor的就很快能还原了。  明天上班了, 有时间在来加个包含拆分指令的算法给你玩。
2016-2-28 22:11
0
雪    币: 5954
活跃值: (66)
能力值: ( LV4,RANK:140 )
在线值:
发帖
回帖
粉丝
9
能介绍下分析虚拟机有什么技巧吗?
2016-2-29 17:50
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
不一定非要还原得100%精确,能容易读懂就行了。看人家还原的程度,你再怎么改,他最多也是多费点时间。  

其实你可以先自己去看看VMP2.9以后的版本,能分析别人的VM,你才能写出高强度的vm
2016-2-29 18:55
0
雪    币: 12502
活跃值: (3088)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
我的天你是火星来的吗?。。。还原的这么清楚
2016-2-29 20:16
0
雪    币: 258
活跃值: (100)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
12
不是说我要改vm哦,是我要选一些拆分指令的源码加密, 因为这个样本里面的源码只有add跟 xor 还有个 mov指令, 这3个指令add 就是v_add跑的, mov 就是 push pop 只有xor 是 nor跑出来的. 所以很容易分析的,只要花一点时间跟就能出结果,  本身vmopcode生成的时候我也没加垃圾opcode进去的。
2016-3-1 14:38
0
雪    币: 258
活跃值: (100)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
13
大神来着,这是他小号。
2016-3-1 14:40
0
雪    币: 12502
活跃值: (3088)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
已非地球人。。。
2016-3-1 19:59
0
游客
登录 | 注册 方可回帖
返回