試了幾個都可以正常解密的
正在研究解決中…
寫的亂七八糟的~~~~
貼出來給大家笑話~~~
可能要做其它的事了
解密代碼端的函數
BOOL DecryptCode()
{
DWORD dwEBP =
__asm
{
xor edi
je _L
jmp _LFEND
_L
mov edx
;cmp byte ptr [esp+
mov esi
xor edi
je _L
jmp _LFEND
_L
mov ecx
;lea edi
mov edi
sub edi
xor ecx
je _L
jmp _LFEND
_L
mov eax
cmp edx
not eax
/*
jnz _L
mov eax
test eax
js _L
mov eax
mov eax
mov dword ptr[eax +
mov eax
mov eax
movzx eax
test eax
jnz _L
jmp _L
_L
xor eax
mov al
test eax
jnz _L
jmp _L
_L
_L
or dwEBP
jmp _L
nop
_L
mov al
mov byte ptr[edi]
inc esi
inc edi
_L
add ebx
jnz _L
_L
mov ebx
sub esi
adc ebx
_L
jb _L
mov eax
_L
add ebx
jnz _L
mov ebx
sub esi
adc ebx
_L
adc eax
add ebx
jnb _L
jnz _L
mov ebx
sub esi
adc ebx
jnb _L
_L
xor ecx
sub eax
jb _L
shl eax
mov al
inc esi
xor eax
je _L
mov dwEBP
_L
add ebx
jnz _L
mov ebx
sub esi
adc ebx
_L
adc ecx
add ebx
jnz _L
mov ebx
sub esi
adc ebx
_L
adc ecx
jnz _L
inc ecx
_L
add ebx
jnz _L
mov ebx
sub esi
adc ebx
_L
adc ecx
add ebx
jnb _L
jnz _L
mov ebx
sub esi
adc ebx
jnb _L
_L
add ecx
_L
cmp dwEBP
adc ecx
mov edx
lea edx
cmp dwEBP
jbe _L
_L
mov al
mov byte ptr[edi]
inc edx
inc edi
dec ecx
jnz _L
jmp _L
nop
_L
mov eax
mov dword ptr[edi]
add edx
add edi
sub ecx
ja _L
add edi
jmp _L
_L
}
return TRUE;
__asm
{
_LFEND:
}
return FALSE;
}
//代碼段解密後會有原始PE頭
//估計是版本不同E
//
BOOL ModfiyJmpCall()
{
LPBYTE pbyte = (LPBYTE)pvdUPX
DWORD dwC =
for(int i =
{
if( (pbyte[i]
{
i++;
if( pbyte[i] ==
{
DWORD dwBuf = *(LPDWORD)(&pbyte[i])
DWORD dwA = HIWORD(dwBuf)
//高低位互換
BYTE byah = LOWORD(HIBYTE(dwA))
BYTE byal = LOWORD(LOBYTE(dwA))
dwA = byal *
dwA
dwA += (DWORD)pvdUPX
*(LPDWORD)&pbyte[i] = dwA;
txtout(_t(
i +=
n++;
}
}
}
txtout(_t(
return TRUE;
}
再說一個就是IAT表的格式為
模塊名稱相對地址 + IAT表地址偏移 + 函數名稱列表
函數名稱前有個標志
//
//
大家有興趣的可以寫了
我可能需要做其他的事
應該大家都能寫出來了
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26570.html