/*
//////////////////////////////////////////////////
Назначение скрипта eXePressor Unpacker 1.5.01
скрипт написан для распаковки самого прота!
Author : Автор скрипта
OS : XP SP2 Олька любая патченая + Фантом, Адвансед
Note : Дополнительная информация
/////////////////////////////////////////////////
*/
var oep
var mh
var cb
var csz
var mbase
var em
var iat
var E8
var iat_start
mov iat_start,0047F740 
/*
//////////////////////////////////////////////////
Выберем пустое место для записи эмуленых функция я выбрал
чуть выше оригинальной иат! 
00480000  77DC7883  ADVAPI32.RegQueryValueExA
00480004  77DC761B  ADVAPI32.RegOpenKeyExA
00480008  77DEC123  ADVAPI32.RegDeleteKeyA
0048000C  77DCEBE7  ADVAPI32.RegSetValueExA
будет примерно так лень было разбирать по библам
импрек покажет их как инвалидные :) но сделает все правильно
0047F740  7C810C8F  kernel32.GetFileSize
0047F744  7C80180E  kernel32.ReadFile
0047F748  7C810DA6  kernel32.SetFilePointer
0047F74C  7C80180E  kernel32.ReadFile
0047F750  77D3E2AE  USER32.SendMessageA
0047F754  7C809B77  kernel32.CloseHandle
0047F758  7C80180E  kernel32.ReadFile
0047F75C  77D3A2DE  USER32.wsprintfA
0047F760  77D3A2DE  USER32.wsprintfA
0047F764  7C80B357  kernel32.GetModuleFileNameA
/////////////////////////////////////////////////
*/
mov iat,0047F740
GMI eip,CODEBASE
mov cb,$RESULT
GMI eip,CODESIZE
mov csz,$RESULT
GMI eip,ENTRY
mov oep,$RESULT
BC oep

gpa "GetProcAddress","kernel32.dll"
find $RESULT,#5F5BC9C2#
bp $RESULT+3
erun
bc eip
rtu
find eip,#595985C0#
cmp $RESULT,0
je quit
mov [$RESULT+4],#9090# // убираем переходники в иат
run
mov [eip],#cc# // обходим проверку на дебаг 
mov mh,[esp+8]
bp mh
run
bc eip
add mh,10
bp mh
run
bc eip
add eip,7
rtr
sti
find eip,#586A01585E5B5FC9C3#
/*
//////////////////////////////////////////////////
00B43EF1     8945 D8                  mov dword ptr ss:[ebp-28],eax
00B43EF4     837D D8 00               cmp dword ptr ss:[ebp-28],0
00B43EF8     75 07                    jnz short 00B43F01
получем функу в еах
00B440EC     C600 E8                  mov byte ptr ds:[eax],0E8
00B440EF     8B45 E4                  mov eax,dword ptr ss:[ebp-1C]
00B440F2     40                       inc eax
и перезаписываем так как нам нужно
00B44118     8908                     mov dword ptr ds:[eax],ecx
00B4411A     EB 01                    jmp short 00B4411D
т.е call 01xxxxxx перепишем на
call dword ptr ds:[0047FXXX]
/////////////////////////////////////////////////
*/
cmp $RESULT,0
je quit
mov oep,$RESULT+8
bp oep
GMEMI eip, MEMORYBASE
mov mbase,$RESULT
find mbase,#8945D8837DD800750733C0#
mov em,$RESULT
bp em
find em,#C600E88B45E4#
mov E8,$RESULT
bp E8
mov mbase,E8+2C
bp mbase
loop:
erun
cmp eip,em
jne oepfind
mov [iat],eax
erun
sti
mov [eax],#FF15#
erun
inc eax
add eip,2
mov [eax],iat
add iat,4
jmp loop

oepfind:
bc eip
sti
BPRM cb, csz
run
BPMC
bc E8
bc em
bc mbase
CMT eip,"OEP"
eval "eXePressor Unpacked! Iat fixed, emul api remove!IAT Start: {iat_start}"
msg $RESULT
ret




