能力值:
( LV12,RANK:200 )
|
-
-
2 楼
vm..................
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
surport!!!
|
能力值:
( LV15,RANK:2473 )
|
-
-
4 楼
|
能力值:
( LV6,RANK:80 )
|
-
-
5 楼
和upx-d结果不同,是没加VM的,不是加了后去掉VM的
|
能力值:
(RANK:410 )
|
-
-
6 楼
这个以后校验用吧,以后再研究算法,算法估计搞不定。先看能不能还原vm
|
能力值:
(RANK:410 )
|
-
-
7 楼
vm_optalbe地址还原idc脚本
#include <idc.idc>
static decrypt(from,size)
{
auto i;
auto value;
for ( i=0; i < size; i=i+1 )
{
value=Dword(from+i*4);
Message("%x:%x",from+i*4,value);
if(value!=0)
{
value++;
Message("=>%x",value);
value=rotate_dword(value,30);
Message("=>%x",value);
value=value^0xffffffff;
Message("=>%x",value);
value=value^0x7AC2D8AA;
Message("=>%x",value);
if(value!=BADADDR)
{
//MakeNameEx(value,form("vm_opcode_%d",i),0x100);
//MakeRptCmt(from+i*4,form("%08x",value));
PatchDword(from+i*4,value);
}
}
}
}
static main(void) {
auto vm_table_addr;
vm_table_addr = 0x406000;
//vm_table_addr = AskAddr(here, "Please enter the vm_table_addr");
//vm_table_addr = ScreenEA();
if ( vm_table_addr == BADADDR ) return;
decrypt(vm_table_addr,256);
}
|
能力值:
(RANK:410 )
|
-
-
8 楼
用cc提供的注册码,跟了遍注册流程,后面都是猜测的,以后修正.类c表示如下。
#define ROL(val,n) ((val>>(32-n))|(val<<n))
DWORD size[8]={0x1620,0x973,0x1402,0x1438,0x9a9,0x14a3,0x14d9,0xc9c,0xd19};
DWORD keycrc=0x0;//40440c
DWORD baseptr=0x401000;
DWORD crcval=0;
unsigned char name[16]="shellwolf";
unsigned char sn[60]="1C1A9961EBFC090050F1D2FA9B5F272C92D51E590D7A37576EAEB80000";//12d7f0
DWORD nameval;
int namelen,snlen;
BYTE snx[1000];
BYTE buff[1032];
void onbtnclick()
{
int tmpi;
//1.crc=>keysrc
for(tmpi=0;tmpi<7;tmpi++)
{
crcval=crc32(baseptr,size[i]);//E779BC52//4386092B
crcval=~crcval;//188643AD//BC79F6D4
keycrc^=crcval;//188643AD
keycrc+=size[i]+baseptr-0x100;//18C668CD
}
//2.getname
nameval=0x0;//keycrc=0x7a08383e;
namelen=GetDlgItemText(IDC_name,&name[0],);//0x3e8
if(namelen<3||namelen>0x20)
return;
//namehash
for(tmpi=0;tmpi<namelen;tmpi++)//401a39
{
nameval+=name[tmpi];
nameval=ROL(nameval,3)^keycrc;
}//nameval=0x50356f68
//3.getsn
snlen=GetDlgItemText(IDC_sn,&sn[0],);//0x3e9
if(snlen<0x10||snlen>0x40)
return;
for(tmpi=0;tmpi<snlen;tmpi++)//401966
{
if(!isxdigit(sn[tmpi]))
return;
}
//4.set buff for vm
memset(&snx[0],0,996);//0x12d40c
memset(&buff[0],0,1032);//0x12d004
for(tmpi=0;tmpi<snlen/2;tmpi++)
sscanf(&sn[tmpi*2],"%02x",&snx[tmpi]);
if((snlen/2-1)!=snx[0])
return;
else
buff[0]=snx[0];//snlen/2-1
//5.crc & vm1
for(tmpi=7;tmpi<8;tmpi++)//401b97//1993?401110
{
crcval=crc32(baseptr,size[tmpi]);
crcval=~crcval;
keycrc^=crcval;//EDDEEA7F
keycrc+=size[tmpi]+baseptr-0x100;//EE1F061B
}
enter_vm(0xCD1BD9CD);//4020d6
//6.crc & vm2
for(tmpi=8;tmpi<9;tmpi++)
{
crcval=crc32(baseptr,size[tmpi]);////778b992d
crcval=~crcval;////887466D2
keycrc^=crcval;//666B60C9
keycrc+=size[tmpi]+baseptr-0x100;//66AB7CE2
}
if(enter_vm(0xA78AD9CD)==0x00)//00407384=>402400
return;
//7.messgebox
if(*(DWORD *)(&buff[0])==nameval)
{
strcpy(&sn[0],"pediy cm 2009");
MessageBoxA(&buff[8],&sn[0],0);//0x12d00c
}
}
vm_optable,可能很多不对,都时猜的,只是个临时标记。好像以前跟过这个版本的,vmp1.65?
UPX0:00406000 vm_optable dd offset vm_pushimm ; 0 ; DATA XREF: sub_4066E7+F72r
UPX0:00406000 ; UPX0:00407C3Fr ...
UPX0:00406000 dd offset vm_imul ; 1
UPX0:00406000 dd offset vm_retn ; 2
UPX0:00406000 dd offset vm_shr ; 3
UPX0:00406000 dd offset vm_movb_B_AA ; 4
UPX0:00406000 dd offset vm_pushb_reg ; 5
UPX0:00406000 dd offset vm_shlf ; 6
UPX0:00406000 dd offset vm_mov_AA_A1 ; 7
UPX0:00406000 dd offset vm_shiftadd ; 8
UPX0:00406000 dd offset vm_pop_reg ; 9
UPX0:00406000 dd offset vm_movb_B_AA_0; 10
UPX0:00406000 dd offset vm_movw_AA_A ; 11
UPX0:00406000 dd offset vm_mov_AA_A ; 12
UPX0:00406000 dd offset vm_movb_B_AA_0; 13
UPX0:00406000 dd offset vm_rdtsc ; 14
UPX0:00406000 dd offset vm_shrd ; 15
UPX0:00406000 dd offset vm_pushespw_0 ; 16
UPX0:00406000 dd offset vm_imul ; 17
UPX0:00406000 dd offset vm_shlf ; 18
UPX0:00406000 dd offset vm_addb_A_B ; 19
UPX0:00406000 dd offset vm_pushimmw ; 20
UPX0:00406000 dd offset vm_popw_reg ; 21
UPX0:00406000 dd offset vm_shiftadd ; 22
UPX0:00406000 dd offset vm_push_immb ; 23
UPX0:00406000 dd offset vm_rdtsc ; 24
UPX0:00406000 dd offset vm_mov_AA_A ; 25
UPX0:00406000 dd offset vm_pushimm ; 26
UPX0:00406000 dd offset vm_mov_AA_A ; 27
UPX0:00406000 dd offset vm_divw ; 28
UPX0:00406000 dd offset vm_mov_AA_B ; 29
UPX0:00406000 dd offset vm_shlb ; 30
UPX0:00406000 dd offset loc_40721F ; 31
UPX0:00406000 dd offset vm_popx ; 32
UPX0:00406000 dd offset vm_shiftadd ; 33
UPX0:00406000 dd offset vm_popx ; 34
UPX0:00406000 dd offset vm_nand ; 35
UPX0:00406000 dd offset vm_popx ; 36
UPX0:00406000 dd offset vm_popw_reg ; 37
UPX0:00406000 dd offset vm_popx ; 38
UPX0:00406000 dd offset vm_imul ; 39
UPX0:00406000 dd offset vm_popx ; 40
UPX0:00406000 dd offset vm_mov_B_AA ; 41
UPX0:00406000 dd offset vm_popx ; 42
UPX0:00406000 dd offset vm_shld ; 43
UPX0:00406000 dd offset vm_popx ; 44
UPX0:00406000 dd offset vm_nandb ; 45
UPX0:00406000 dd offset vm_popx ; 46
UPX0:00406000 dd offset vm_nandw ; 47
UPX0:00406000 dd offset vm_popx ; 48
UPX0:00406000 dd offset vm_mov_AA_A ; 49
UPX0:00406000 dd offset vm_popx ; 50
UPX0:00406000 dd offset vm_push_esp ; 51
UPX0:00406000 dd offset vm_popx ; 52
UPX0:00406000 dd offset vm_pushespw_0 ; 53
UPX0:00406000 dd offset vm_popx ; 54
UPX0:00406000 dd offset vm_mul ; 55
UPX0:00406000 dd offset vm_popx ; 56
UPX0:00406000 dd offset vm_pushw_reg ; 57
UPX0:00406000 dd offset vm_popx ; 58
UPX0:00406000 dd offset vm_movb_AA_A ; 59
UPX0:00406000 dd offset vm_popx ; 60
UPX0:00406000 dd offset vm_shlf ; 61
UPX0:00406000 dd offset vm_popx ; 62
UPX0:00406000 dd offset vm_rdtsc ; 63
UPX0:00406000 dd offset vm_pushx ; 64
UPX0:00406000 dd offset vm_shrd ; 65
UPX0:00406000 dd offset vm_pushx ; 66
UPX0:00406000 dd offset vm_pushimmw ; 67
UPX0:00406000 dd offset vm_pushx ; 68
UPX0:00406000 dd offset vm_pushimm ; 69
UPX0:00406000 dd offset vm_pushx ; 70
UPX0:00406000 dd offset vm_movw_AA_A_0; 71
UPX0:00406000 dd offset vm_pushx ; 72
UPX0:00406000 dd offset vm_push_immb ; 73
UPX0:00406000 dd offset vm_pushx ; 74
UPX0:00406000 dd offset vm_popw_reg ; 75
UPX0:00406000 dd offset vm_pushx ; 76
UPX0:00406000 dd offset vm_mulw ; 77
UPX0:00406000 dd offset vm_pushx ; 78
UPX0:00406000 dd offset vm_movw_B_AA ; 79
UPX0:00406000 dd offset vm_pushx ; 80
UPX0:00406000 dd offset vm_shlw ; 81
UPX0:00406000 dd offset vm_pushx ; 82
UPX0:00406000 dd offset vm_shrb ; 83
UPX0:00406000 dd offset vm_pushx ; 84
UPX0:00406000 dd offset vm_pushimm ; 85
UPX0:00406000 dd offset vm_pushx ; 86
UPX0:00406000 dd offset vm_pushw_immw ; 87
UPX0:00406000 dd offset vm_pushx ; 88
UPX0:00406000 dd offset vm_pushimmw ; 89
UPX0:00406000 dd offset vm_pushx ; 90
UPX0:00406000 dd offset vm_addw_A_B ; 91
UPX0:00406000 dd offset vm_pushx ; 92
UPX0:00406000 dd offset vm_shld ; 93
UPX0:00406000 dd offset vm_pushx ; 94
UPX0:00406000 dd offset vm_shr ; 95
UPX0:00406000 dd offset vm_shrw ; 96
UPX0:00406000 dd offset vm_rdtsc ; 97
UPX0:00406000 dd offset vm_mul ; 98
UPX0:00406000 dd offset vm_shrb ; 99
UPX0:00406000 dd offset vm_movb_B_AA ; 100
UPX0:00406000 dd offset vm_jmp ; 101
UPX0:00406000 dd offset vm_movb_B_AA_0; 102
UPX0:00406000 dd offset vm_shlf ; 103
UPX0:00406000 dd offset vm_shld ; 104
UPX0:00406000 dd offset vm_shlb ; 105
UPX0:00406000 dd offset vm_pop_reg ; 106
UPX0:00406000 dd offset vm_imul ; 107
UPX0:00406000 dd offset vm_shlb ; 108
UPX0:00406000 dd offset vm_movb_B_AA_0; 109
UPX0:00406000 dd offset loc_40721F ; 110
UPX0:00406000 dd offset vm_shrw ; 111
UPX0:00406000 dd offset vm_imul ; 112
UPX0:00406000 dd offset vm_addf_a_b ; 113
UPX0:00406000 dd offset vm_shlb ; 114
UPX0:00406000 dd offset vm_shlb ; 115
UPX0:00406000 dd offset vm_retn ; 116
UPX0:00406000 dd offset vm_movw_AA_A ; 117
UPX0:00406000 dd offset vm_movb_AA_A ; 118
UPX0:00406000 dd offset vm_pop_reg ; 119
UPX0:00406000 dd offset vm_shrd ; 120
UPX0:00406000 dd offset vm_nandb ; 121
UPX0:00406000 dd offset vm_addw_A_B ; 122
UPX0:00406000 dd offset vm_nandb ; 123
UPX0:00406000 dd offset vm_movb_B_AA_0; 124
UPX0:00406000 dd offset vm_shrd ; 125
UPX0:00406000 dd offset vm_nandb ; 126
UPX0:00406000 dd offset vm_shrw ; 127
UPX0:00406000 dd offset vm_addf_a_b ; 128
UPX0:00406000 dd offset vm_nandb ; 129
UPX0:00406000 dd offset vm_shrd ; 130
UPX0:00406000 dd offset vm_movw_B_AA_0; 131
UPX0:00406000 dd offset vm_mulw ; 132
UPX0:00406000 dd offset vm_shiftadd ; 133
UPX0:00406000 dd offset vm_shlf ; 134
UPX0:00406000 dd offset vm_shrw ; 135
UPX0:00406000 dd offset vm_shrw ; 136
UPX0:00406000 dd offset vm_pushimm ; 137
UPX0:00406000 dd offset vm_shiftadd ; 138
UPX0:00406000 dd offset vm_movw_AA_A_0; 139
UPX0:00406000 dd offset vm_movw_B_AA_0; 140
UPX0:00406000 dd offset vm_pushimm ; 141
UPX0:00406000 dd offset vm_movb_AA_A ; 142
UPX0:00406000 dd offset vm_movw_B_AA ; 143
UPX0:00406000 dd offset vm_shld ; 144
UPX0:00406000 dd offset vm_movw_B_AA ; 145
UPX0:00406000 dd offset vm_movw_AA_A ; 146
UPX0:00406000 dd offset vm_imul ; 147
UPX0:00406000 dd offset vm_addw_A_B ; 148
UPX0:00406000 dd offset vm_nandb ; 149
UPX0:00406000 dd offset vm_movw_AA_A_1; 150
UPX0:00406000 dd offset vm_pushespw ; 151
UPX0:00406000 dd offset vm_addw_A_B ; 152
UPX0:00406000 dd offset vm_shr ; 153
UPX0:00406000 dd offset vm_movw_AA_A_0; 154
UPX0:00406000 dd offset vm_movb_B_AA ; 155
UPX0:00406000 dd offset vm_shrb ; 156
UPX0:00406000 dd offset vm_mulw ; 157
UPX0:00406000 dd offset vm_mov_AA_A ; 158
UPX0:00406000 dd offset vm_nand ; 159
UPX0:00406000 dd offset vm_addf_a_b ; 160
UPX0:00406000 dd offset vm_pushespw ; 161
UPX0:00406000 dd offset vm_shlb ; 162
UPX0:00406000 dd offset vm_shlb ; 163
UPX0:00406000 dd offset vm_shrb ; 164
UPX0:00406000 dd offset loc_40721F ; 165
UPX0:00406000 dd offset vm_shrb ; 166
UPX0:00406000 dd offset vm_shrw ; 167
UPX0:00406000 dd offset vm_mov_AA_A ; 168
UPX0:00406000 dd offset vm_pushb_reg ; 169
UPX0:00406000 dd offset vm_addw_A_B ; 170
UPX0:00406000 dd offset vm_pushespw_0 ; 171
UPX0:00406000 dd offset loc_40721F ; 172
UPX0:00406000 dd offset vm_addw_A_B ; 173
UPX0:00406000 dd offset vm_movw_AA_A_1; 174
UPX0:00406000 dd offset vm_pushw_reg ; 175
UPX0:00406000 dd offset vm_movb_AA_A ; 176
UPX0:00406000 dd offset vm_movb_B_AA ; 177
UPX0:00406000 dd offset vm_mov_AA_A ; 178
UPX0:00406000 dd offset vm_addw_A_B ; 179
UPX0:00406000 dd offset vm_jmp ; 180
UPX0:00406000 dd offset vm_pushw_immw ; 181
UPX0:00406000 dd offset vm_shlf ; 182
UPX0:00406000 dd offset vm_pushimm ; 183
UPX0:00406000 dd offset vm_divw ; 184
UPX0:00406000 dd offset vm_mul ; 185
UPX0:00406000 dd offset vm_mov_AA_A ; 186
UPX0:00406000 dd offset vm_shlb ; 187
UPX0:00406000 dd offset vm_movw_B_AA ; 188
UPX0:00406000 dd offset vm_mov_B_AA ; 189
UPX0:00406000 dd offset vm_popw_reg ; 190
UPX0:00406000 dd offset vm_retn ; 191
UPX0:00406000 dd offset vm_pushespw ; 192
UPX0:00406000 dd offset vm_shr ; 193
UPX0:00406000 dd offset vm_movw_AA_A_0; 194
UPX0:00406000 dd offset vm_pushimmw ; 195
UPX0:00406000 dd offset vm_pushb_reg ; 196
UPX0:00406000 dd offset vm_shiftadd ; 197
UPX0:00406000 dd offset vm_shlf ; 198
UPX0:00406000 dd offset vm_shld ; 199
UPX0:00406000 dd offset vm_shlf ; 200
UPX0:00406000 dd offset vm_pushesp ; 201
UPX0:00406000 dd offset vm_retn ; 202
UPX0:00406000 dd offset vm_push_esp ; 203
UPX0:00406000 dd offset vm_shiftadd ; 204
UPX0:00406000 dd offset vm_push_esp ; 205
UPX0:00406000 dd offset vm_pushb_reg ; 206
UPX0:00406000 dd offset vm_movw_AA_A_1; 207
UPX0:00406000 dd offset vm_movw_B_AA ; 208
UPX0:00406000 dd offset vm_popw_reg ; 209
UPX0:00406000 dd offset vm_movw_AA_A ; 210
UPX0:00406000 dd offset vm_movw_B_AA ; 211
UPX0:00406000 dd offset vm_shlb ; 212
UPX0:00406000 dd offset vm_movw_AA_A_1; 213
UPX0:00406000 dd offset vm_shrb ; 214
UPX0:00406000 dd offset vm_push_esp ; 215
UPX0:00406000 dd offset vm_movw_B_AA_0; 216
UPX0:00406000 dd offset vm_movw_B_AA_0; 217
UPX0:00406000 dd offset vm_movb_B_AA_0; 218
UPX0:00406000 dd offset vm_mov_B_AA ; 219
UPX0:00406000 dd offset vm_shlw ; 220
UPX0:00406000 dd offset vm_addf_a_b ; 221
UPX0:00406000 dd offset vm_shrb ; 222
UPX0:00406000 dd offset vm_movb_AA_A ; 223
UPX0:00406000 dd offset vm_imul ; 224
UPX0:00406000 dd offset vm_movb_AA_A ; 225
UPX0:00406000 dd offset vm_pushespw ; 226
UPX0:00406000 dd offset vm_mov_AA_A ; 227
UPX0:00406000 dd offset vm_divw ; 228
UPX0:00406000 dd offset vm_divw ; 229
UPX0:00406000 dd offset vm_movw_AA_A_0; 230
UPX0:00406000 dd offset vm_shlf ; 231
UPX0:00406000 dd offset vm_rdtsc ; 232
UPX0:00406000 dd offset vm_movw_AA_A_0; 233
UPX0:00406000 dd offset vm_mov_B_AA ; 234
UPX0:00406000 dd offset vm_mov_AA_A1 ; 235
UPX0:00406000 dd offset vm_movw_B_AA ; 236
UPX0:00406000 dd offset vm_pushimmw ; 237
UPX0:00406000 dd offset vm_pop_reg ; 238
UPX0:00406000 dd offset vm_jmp ; 239
UPX0:00406000 dd offset vm_nandw ; 240
UPX0:00406000 dd offset vm_addb_A_B ; 241
UPX0:00406000 dd offset vm_mulw ; 242
UPX0:00406000 dd offset vm_movw_AA_A_0; 243
UPX0:00406000 dd offset vm_push_immb ; 244
UPX0:00406000 dd offset vm_movb_B_AA_0; 245
UPX0:00406000 dd offset vm_jmp ; 246
UPX0:00406000 dd offset vm_pop_reg ; 247
UPX0:00406000 dd offset vm_shld ; 248
UPX0:00406000 dd offset vm_movw_AA_A ; 249
UPX0:00406000 dd offset vm_shrd ; 250
UPX0:00406000 dd offset vm_mov_AA_A1 ; 251
UPX0:00406000 dd offset vm_pushespw ; 252
UPX0:00406000 dd offset vm_shlf ; 253
UPX0:00406000 dd offset vm_mov_AA_A1 ; 254
UPX0:00406000 dd offset vm_nandb ; 255
自言自语?:(
发现两个奇怪的vm指令,vm_rdtsc,和vm_shiftadd.
rdtsc似乎只有几个用处,1、随机数,2、反调试
shiftadd用于代码自校验?
|
能力值:
( LV9,RANK:180 )
|
-
-
9 楼
帮老哥及老哥的老婆顶一下帖
你上面列出的256个你全进去看了一次标出来的 ?
|
能力值:
(RANK:410 )
|
-
-
10 楼
lp不喜欢crack。
其实没有256个。就几十个。多数是ida下猜的,有些猜不出来,就用OD跟了下。
还没敢进vm里看看,一直在犹豫,精力有限,怕进去后耽误太多时间。
|
能力值:
( LV9,RANK:180 )
|
-
-
11 楼
目前大家都是卡在多条的VM指令换成一个适当的PCode
这技术若没人发布的话, 永远都是人肉
看VM..我很懒,连标都不标. 白吃简单型的算法还能在脑中半懂半猜
再上去...战斗力'幸运度'智力都下降为0了
一起等吧.
|
能力值:
(RANK:410 )
|
-
-
12 楼
高版本的vmp可降级为vmp1.2,vmp1.2的可以多条转单条。
高手都不标,看内存变化就可以了,我也期望能这样。我只能笨方法,标签转到od下,再用脚本看流程。
有点疲惫,今天不看了。明天后天上不了网,假期要被这个cm折磨了。
|
能力值:
( LV9,RANK:180 )
|
-
-
13 楼
另外, 比赛放出的exe我在VM里有看到:
序号 -> 十六进制 , 第0个byte的作用就如你列出的程序码 :
if((snlen/2-1)!=snx[0])
再下去有 sn[1]= sn[1]^sn[最后]
sn[2]= sn[2]^sn[最后-1]
sn[3]= sn[3]^sn[最后-2]
.....
....
and 另一个byte的 xor
(东西全删了, xor 的 i 可能不是写得完全正确, 但大体上我有看到这动作.)
可是你上面的程序码里并没写出这步, 是我看错了 ?
|
能力值:
(RANK:410 )
|
-
-
14 楼
[QUOTE=sessiondiy;694881]另外, 比赛放出的exe我在VM里有看到:
序号 -> 十六进制 , 第0个byte的作用就如你列出的程序码 :
if((snlen/2-1)!=snx[0])
再下去有 sn[1]= sn[1]^sn[最后]
sn[2]= sn[2]^sn[最后-1]
...[/QUOTE]
你应该不会看错,我还没进vm里,你看到的估计都在vm里。多谢,我去看看。
“if((snlen/2-1)!=snx[0])”这个应该是在vm外。
|
能力值:
( LV15,RANK:1673 )
|
-
-
15 楼
玩这个一个字"累"...无奈...水平有限...玩不动...只有看大虾们表演了...
大虾们Go On And ,.On...
|
能力值:
( LV9,RANK:180 )
|
-
-
16 楼
有系统的整理是正确的, 期待你假期之后的成果分享
VMP的动作都是固定的.
用滴猎Dbg的无限断点应该就好还原原始指令动作了.
f-.- 忘了滴猎有没有支援脚本
rdtsc我曾见过用于ANTI, 在rdtsc之前会先判断即将要调用的API的第一个Byte是否为CC (全被VM了)
(我看的VMP Target没几个,所以是否VMP自动加入的ANTI我就不知了)
|
|
|