http://www.od85c.com.cn/html/,OllyDbg script for unpacking Enigma 4.xx and 5.xx

[Asm] 纯文本查看 复制代码// Enigma Protector 4.xx and 5.XX unpacker by GIV (some parts are from LCF-AT Alternativ 1.1 script and the API fix is from SHADOW_UA script)

// January 22 2016

// giv@reversing.ro

// PRIVATE

// 3D00F000007E13B800000100 - API COMPARE AND JUMP

// 3B????????0075??B2018BC2C3 - IAT EMULATION ROUTINE

// 8B08C601FF - OEP MARKER

// 85C00F95C08B??????????8B??8? - HWID

// 6A4068001010006800093D006A00E8??????FF - High memory allocation marker

//

// Script-Editing by LCF-AT

// ---------------------------------

// Enter ARImpRec.dll path below

// Added Screw Prevent patch

// Added Dumper

// Added Section Adder

// Added IAT Fixer (using SearchAndRebuildImports@28 of ARImpRec.dll) enter IATSTART & SIZE (last API-Entry+04 bytes / see counter)

var intermediar

var dumpvm

var disablehighvmalloc

var counter

var sectiuneenigma

var patchedvm

var SIZE

var SIZE2

var primacautarevariabile

var bazacod

var rulat_r

call VARS

//lc

log "Enigma 4.XX and 5.XX simple HWID bypass, IAT scrambling repair, OEP find by GIV - 0.2a - private"

log "Emulated API'S fixer by PC-RET"

bc

bphwc

bpmc

mov rulat_r, 0

var IS_DLL

mov IS_DLL, 0

//Change the Arimprec.dll path below or put in unpackme directory

gpi CURRENTDIR

mov dir_curent, $RESULT

/

//Declare options

// In case of Demo protected files you can set disablehighvmalloc to 0

//mov arimprecpath, "C:\ARImpRec.dll"

// LCF-AT

mov ARIMPREC_PATH, "C:\ARImpRec.dll"

mov primacautarevariabile, 0

mov patchedvm, 1 //0=Not patch the high alloc 1=patch the high alloc of the VM

mov dumpvm, 1 //Change to 0 if the OEP is not virtualized

mov disablehighvmalloc, 1 //Change to 0 if the OEP is not virtualized or in case of files protected with DEMO version

mov counter, 0 //Do not change

mov TYPE, 00101000 // MEM_COMMIT|MEM_TOP_DOWN

mov SIZE1, 00100000 //Do not cahnge

//HWID data

mov changeid, 1 //change to 0 if you do not want a HWID change

mov old, "FCD92259AB2EBE7BCB7D46C4AACACD626752" //Your HWID

mov new, "72662259EEF6548F4C6172CDD50B2BB8AED9" //The HWID that need to be

len old

mov marime, $RESULT

// If you want to change the HWID use changeid=1 and patchedvm=1

/

alloc 01000000

mov MYSEC, $RESULT

mov MYSEC2, MYSEC

gmi eip, PATH

mov exepath, $RESULT

len exepath// length of path+name+".exe" (full path)

sub $RESULT, 4// length of path+name

mov basepath, exepath, $RESULT

gmi eip, MODULEBASE

MOV IMAGEBASE, $RESULT

GPA "VirtualAlloc", "kernel32.dll"

mov VirtualAlloc, $RESULT

GPA "GetProcAddress", "kernel32.dll"

mov GetProcAddress, $RESULT

cmp changeid, 1

ifeq

mov schimbarehwid, 1

else

mov schimbarehwid, 0

endif

//jmp Continuare_VALLOC

GPA_AGAIN:

bp GetProcAddress

run

bc eip

rtr

bc

bphwc

cmp [esi], #4D5A# ,02

ifeq

cmp esi, 70000000

ja GPA_AGAIN

mov sectiuneenigma, esi

endif

cmp [edi], #4D5A# ,02

ifeq

cmp edi, 70000000

ja GPA_AGAIN

mov sectiuneenigma, edi

endif

// LCF-AT Patch

///

find sectiuneenigma, #F646038075??#

cmp $RESULT, 00

je IMPORTS_SCREW_NOT_FOUND

mov IMPORTS_SCREW, $RESULT

mov [IMPORTS_SCREW+04], 0EB, 01

eval "Prevent IMPORTS SCREW at: {IMPORTS_SCREW}"

log $RESULT, ""

///

IMPORTS_SCREW_NOT_FOUND:

log "No IMPORTS SCREW found!"

log "Fixing of IAT could get wrong later!"

///

NO_INT_VERSION:

findmem #85C00F95C08B??????????8B??8?#, IMAGEBASE

cmp $RESULT, 00

je NP_HWID_BASIC_FOUND

mov REG1, $RESULT+02

find REG1, #85C00F95C08B??????????8B??8?#

mov REG2, $RESULT+02

gci REG1, COMMAND

mov REG1_COM, $RESULT

gci REG2, COMMAND

mov REG2_COM, $RESULT

log ""

log "Possible used RegSheme found!"

log ""

eval "Address: {REG1} - {REG1_COM}"

log $RESULT, ""

eval "Address: {REG2} - {REG2_COM}"

log $RESULT, ""

log ""

///

NP_HWID_BASIC_FOUND:

findmem #89431?83C31C4E75??5F5E5BC3#, IMAGEBASE

cmp $RESULT, 00

jne FOUND_API_TABLE

je NO_MJ_FOUND

pause

pause

ret

///

FOUND_API_TABLE:

mov IAT_TABLE_1, $RESULT

mov [IAT_TABLE_1+02], 14, 01

findmem #33D2????????????74??????????????74??????????????74#, IMAGEBASE

cmp $RESULT, 00

je NO_MJ_FOUND

mov MJ, $RESULT

mov [MJ], #33D2B801000000C3#

log ""

eval "MJ found and patched at: {MJ}"

log $RESULT, ""

///

NO_MJ_FOUND:

findmem #8D047F8B55FC8B4DF0894C820447FF4DD0#, IMAGEBASE

cmp $RESULT, 00

je NO_QUCIK_RD_FOUND

mov QUICK, $RESULT

///

NO_QUCIK_RD_FOUND:

mov [REG1-02], FE, 01

mov [REG2-02], FE, 01

log "HWID EASY BYPASS was patched!"

/

Continuare_VALLOC:

bphws VirtualAlloc

//bp VirtualAlloc

cmp disablehighvmalloc, 0

ifeq

jmp continuarefaradezactivaremv

endif

alloc 01000000

mov zonaalocata, $RESULT

bpgoto VirtualAlloc, Verificare

Urmatorul:

inc counter

cmp counter, 500

ifeq

jmp continuarefaradezactivaremv

endif

RUN:

erun

pause

Verificare:

findmem #5356575583C4F4890C248BF885FF0F95C085D20F95C132C1740A#, bazacod

mov integritate, $RESULT

cmp integritate, 0

ifa

log "Integrity check patched"

log integritate, ""

asm integritate, "xor eax,eax"

asm integritate+2, "ret"

endif

findmem #68584D56#, bazacod

var vm_gasit

cmp $RESULT, 0

ifa

mov vm_gasit, $RESULT

log "VMWare run restriction patched"

log $RESULT, ""

//fill vm_gasit, 4, 90

repl vm_gasit, #68584D56#, #5F564947#, 4

endif

findmem #68584D56#, vm_gasit+5

cmp $RESULT, 0

ifa

mov vm_gasit, $RESULT

log $RESULT, ""

//fill vm_gasit, 4, 90

repl vm_gasit, #68584D56#, #5F564947#, 4

endif

cmp primacautarevariabile, 0

ifeq

inc primacautarevariabile

findmem #8B08C601FF#, IMAGEBASE

mov oep_in_ecx, $RESULT

cmp oep_in_ecx, 0

ifeq

log "Search pattern for MOV ECX,DWORD PTR DS:[EAX] not found"

pause

ret

endif

bphws oep_in_ecx, "x"

bpgoto oep_in_ecx, procesare_OEP //18.02.2016

log "OEP JUMP:"

log oep_in_ecx,""

findmem #3D00F000007E13B800000100#, IMAGEBASE

cmp $RESULT, 0

ifeq

log "Search pattern for CMP EAX,F000 not found"

pause

ret

endif

mov iatscrambling, $RESULT-15

log ""

log "IAT SCRAMBLING:"

log iatscrambling, ""

//bphws oep_in_ecx, "x"

//bpgoto oep_in_ecx, procesare_OEP

bphws iatscrambling, "x"

bpgoto iatscrambling, IAT_REDIRECTION

endif

mov bpesp, [esp]

cmp [esp+4], 0

jne RUN

cmp [esp+8], SIZE1

je A1

cmp [esp+C], TYPE

jne RUN

mov [esp+C], 1000 // MEM_COMMIT

mov SIZE2, [esp+08]

///

A1:

bphwc eip

rtr

esti

//bphws eip

cmp [eip], #5D# ,01

ifeq

bp eip

endif

mov eax, MYSEC

mov eax, MYSEC

log ""

log "Allocated memory zone:"

log eax, ""

cmp SIZE2, 0

je A2

add MYSEC, SIZE2

mov SIZE2, 0

bphwc bpesp-6

erun

pause

///

A2:

add MYSEC, SIZE1

//bphwc eip

bc eip

bphws bpesp-6, "x"

erun

jmp VASTOP

//HWID 15.01.2016

rularehwid:

gstr eax

cmp $RESULT, 0

ifeq

esto

endif

cmp $RESULT, old

ifeq

log $RESULT, ""

mov [eax], new

log "HWID found and patched"

endif

jmp RUN1

///14.01.2016

RUN1:

ERUN

///

VASTOP:

cmp [esp], 0

jne RUN1

cmp [esp+4], SIZE1

je A11

cmp [esp+08], TYPE

jne RUN1

mov [esp+08], 1000 // MEM_COMMIT

mov SIZE2, [esp+04]

mov patchedvm, 1

///

bphws iatscrambling, "x"

bpgoto iatscrambling, IAT_REDIRECTION

///

A11:

bphwc eip

//bphws eip+06

bp eip+06

erun

log eax,""

cmp patchedvm, 1

ifeq

cmp schimbarehwid, 1

ifeq

inc patchedvm

mov primulbytemv, MYSEC

bphws primulbytemv, "x"

bpgoto primulbytemv, rularehwid

endif

endif

//bphwc eip

bc eip

//bphws bpesp-6, "x"

bp bpesp-6

mov eax, MYSEC

cmp SIZE2, 0

je A22

add MYSEC, SIZE2

mov SIZE2, 0

//bphws bpesp-6, "x"

bp bpesp-6

erun

///

A22:

add MYSEC, SIZE1

erun

jmp VASTOP

///

continuarefaradezactivaremv:

cmp disablehighvmalloc, 0

ifeq

erun

rtr

esti

endif

bc

bphwc

ASK_DIALOG0:

MSGYN "Cancel CRC check (first time press NO)?=YES / NO = Go to HWID dialog"

cmp $RESULT, 0

je ASK_DIALOG2

CRC:

mov marker, IMAGEBASE

//CRC fix

CRC_FIX:

findmem #83??FF8B????85??7C??4?#, IMAGEBASE

cmp $RESULT, 0

ifeq

je ASK_DIALOG1

endif

mov CRC_PLACE, $RESULT

find CRC_PLACE, #7C#

mov CRC_JUMP, $RESULT

mov patchpoint1va, CRC_JUMP

GCI patchpoint1va, COMMAND

mov opcode1, $RESULT

repl CRC_JUMP, #7C#, #EB#, 1

log "CRC PLACE PATCHED:"

log CRC_JUMP, ""

mov marker, CRC_PLACE

GCI CRC_JUMP, DESTINATION

find $RESULT, #C3#

mov bp_ret_crc, $RESULT

bphws bp_ret_crc

run

bphwc bp_ret_crc

//eval "{opcode1}"

//asm CRC_JUMP, $RESULT

fill patchpoint1va, 1, 7C

inc marker

//jmp CRC_FIX

ASK_DIALOG1:

MSGYN "Cancel API redirection?=YES / NO = Go to OEP"

cmp $RESULT, 0

je oep

OEP_FIND:

findmem #8B08C601FF#, IMAGEBASE

cmp $RESULT, 0

ifeq

log "Search pattern for MOV ECX,DWORD PTR DS:[EAX] not found"

pause

ret

endif

mov oep_marker, $RESULT

log ""

log "OEP marker in ECX"

log ""

log oep_marker,""

bphws oep_marker

bpgoto oep_marker, procesare_OEP

ASK_DIALOG2:

MSGYN "Is HWID used?=YES / NO = Go to IAT redirection"

cmp $RESULT, 0

je IAT_REDIRECTION

jne HWID_PATCH

HWID_PATCH:

mov imagebase_HWID, IMAGEBASE

mov hwid_count, 1

//mov marker, imagebase_HWID

mov marker, IMAGEBASE

HWID_FIX:

findmem #85C00F95C08B??????????8B??8?#, marker

cmp $RESULT, 0

ifeq

je IAT_REDIRECTION

endif

mov HWID_PLACE, $RESULT

bphws HWID_PLACE

bpgoto HWID_PLACE, HWID_FIX_EXEC

eval "The HWID {hwid_count} is at: {HWID_PLACE}"

log $RESULT, ""

mov marker, HWID_PLACE+1

inc hwid_count

cmp hwid_count, 2

ja IAT_REDIRECTION

jmp HWID_FIX

IAT_REDIRECTION:

bphwc bpesp-6

bphwc VirtualAlloc

bc

bphwc iatscrambling

mov patchpoint1va, iatscrambling

GCI patchpoint1va, COMMAND

mov opcode1, $RESULT

//bphws iatscrambling

//run

IAT_REDIRECTION_SPLIT:

bphwc iatscrambling

asm eip, "inc al"

esti

GCI eip, DESTINATION

find $RESULT, #C3#

mov bp_ret_iat, $RESULT

bphws bp_ret_iat, "x"

erun

bphwc bp_ret_iat

eval "{opcode1}"

asm patchpoint1va, $RESULT

bphwc

cmp changeid, 0

ifeq

jmp C_01

endif

bphws primulbytemv, "x"

bpgoto primulbytemv, rularehwid

C_01:

bphws oep_in_ecx, "x"

bpgoto oep_in_ecx, procesare_OEP

jmp oep

oep:

//findmem #8B08C601FF#, IMAGEBASE

//cmp $RESULT, 0

//ifeq

//log "Search pattern for MOV ECX,DWORD PTR DS:[EAX] not found"

//pause

//ret

//endif

//bphwc VirtualAlloc

//mov primulbp, $RESULT

bphws oep_in_ecx, "x"

run

bphwc oep_in_ecx

jmp procesare_OEP

procesare_OEP:

bphwc oep_in_ecx //18.02.2016

//bc

//bphwc

//dbh

esti

mov saltoep, ecx

bphws saltoep, "x"

erun

bphwc saltoep

esti

jmp sfarsit

sfarsit:

bphwc

bc

bpmc

cmp disablehighvmalloc, 1

ifeq

//dm VM_address, vm_size, fisier

mov eax, MYSEC2

mov edi, eax

sub edi, IMAGEBASE

MOV SPLICESRVA, edi

mov ecx, MYSEC

sub ecx, eax

eval "{eax} VA - {edi} RVA.mem"

mov filelc, $RESULT

mov fisier, filelc

dm eax,ecx, filelc

//msg "Now dump file / Add section use right RVA / Validate file & Fix file with Lord-PE! \r\n\r\nSmall part from one script of LCF-AT"

endif

cmt eip, "

//lc

log "****************************************************************************************"

log "Made in 2016"

log "giv@reversing.ro"

log ""

log "Current directory:"

log dir_curent, ""

log ""

log "Imagebase of the module:"

log ""

log IMAGEBASE, ""

log ""

log "This is the OEP VA:"

log ""

log eip, ""

log ""

log "This is the OEP RVA:"

mov OEP, eip

sub OEP, IMAGEBASE

log ""

log OEP, ""

log ""

eval "The VM have been dumped in file: {filelc}"

mov mesaj, $RESULT

log mesaj, ""

cmp [eip], #83EC04#, 03

log ""

ifeq

msgyn "The file semms to be multiple packed. The second layer seems to be Themida. Dump the file?"

cmp $RESULT, 1

ifeq

dpe "c:\unpacked.exe", eip

msg "The dumped file is c:\unpacked.exe"

endif

endif

//MSGYN "Search and fix VM API's?=YES/NO=End script"

log "This part was done by by PC-RET"

//cmp $RESULT, 1

//je VM_API_FIX

jmp VM_API_FIX

finalizare:

// LCF-AT

ASK_FOR_IAT_DATAS:

ask "Enter the IAT Start VA address!"

cmp $RESULT, -1

je ASK_FOR_IAT_DATAS

cmp $RESULT, 00

je ASK_FOR_IAT_DATAS

mov IATSTART, $RESULT

mov IATRVA, $RESULT

eval "IATSTART VA: {IATRVA}"

log $RESULT, ""

gmi IATRVA, MODULEBASE

sub IATRVA, $RESULT

eval "IATSTART RVA: {IATRVA}"

log $RESULT, ""

ASK_FOR_IAT_LENGHT:

ask "Enter the IAT size from start till end!"

cmp $RESULT, -1

je ASK_FOR_IAT_LENGHT

cmp $RESULT, 00

je ASK_FOR_IAT_LENGHT

mov IATSIZE, $RESULT

eval "IATSIZE : {IATSIZE}"

log $RESULT, ""

mov IATEND, IATSTART

add IATEND, IATSIZE

call DUMPER

call FIXER

cmp disablehighvmalloc, 01

jne NO_SECTION_ADDING

call ADDER

NO_SECTION_ADDING:

jmp Recuperare_cod

ret

HWID_FIX_EXEC:

bc

exec

mov al,1

ende

bphwc iatscrambling

call IAT_REDIRECTION

ret

VM_API_FIX:

///Enigma Protector 4.xx VM API Fixer///

//by PC-RET/

v0.5.1 public///

log ""

log "Enigma Protector 4.xx VM API Fixer - Public Version"

log "------------------------------------------------------------"

bc

bphwc

bpmc

mov notfixed, 0

mov fixed, 0

pusha

gmi eip, MODULEBASE

mov MODULEBASE, $RESULT

mov eax, $RESULT

mov edi, eax

add eax, 3C

mov eax, edi+[eax]

mov SECTIONS, [eax+06], 02

mov esi, eax+0F8

mov edi, 28

mov ebp, SECTIONS

mov ecx, edi

mul edi, SECTIONS

add edi, esi

sub edi, 28

mov LASTSECTION, [edi+0C]

add LASTSECTION, MODULEBASE

sub edi, 28

mov ENIGMASECTION, [edi+0C]

add ENIGMASECTION, MODULEBASE

cmp [ENIGMASECTION], #4D5A# ,02

je ENIGMASECTION_FOUND

cmp [LASTSECTION], #4D5A# ,02

je ENIGMASECTION_FOUND_LAST

ENIGMAENTER:

ask "Please enter ENIGMA section address:"

cmp $RESULT, 0

je canceled

mov ENIGMASECTION, $RESULT

cmp [ENIGMASECTION], #4D5A# ,02

jne ENIGMASUSPICIOUS

jmp start

ENIGMASUSPICIOUS:

eval "The entered VA doesn't seems like ENIGMA section address.\r\n\r\nTry again?"

msgyn $RESULT

cmp $RESULT, 01

je ENIGMAENTER

ENIGMASECTION_FOUND_LAST:

mov ENIGMASECTION, LASTSECTION

ENIGMASECTION_FOUND:

popa

start:

eval "Do you want the script to automatically search for VM'ed imports and fix them?"

msgyn $RESULT

cmp $RESULT, 01

je auto

manual:

ask "Please enter IAT start:"

cmp $RESULT, 0

je canceled

mov IATStart, $RESULT

ask "Please enter IAT end:"

cmp $RESULT, 0

je canceled

mov IATEnd, $RESULT

mov IATSize,IATEnd

sub IATSize,IATStart

log "------------------IAT data------------------"

log "IAT start address:"

log IATStart,""

log "IAT end address:"

log IATEnd,""

log "IAT size:"

log IATSize,""

log " "

log "--------------------------------------------"

gmemi ENIGMASECTION, MEMORYSIZE

mov ENIGMASIZE, $RESULT

gpi MAINBASE

mov filebase, $RESULT

gmi filebase, CODEBASE

mov CODESECTION, $RESULT

gmi filebase, CODESIZE

mov CODESIZE, $RESULT

alloc 2000

mov VMAPILOGGER, $RESULT

alloc 1000

mov vmapialloc, $RESULT

mov [vmapialloc], #60BBAAAAAAAABEBBBBBBBBBFCCCCCCCC03F33BDE0F8711000000833B000F850E00000083C304E9E7FFFFFFE91D000000908B1381FA0070530072E881FA00907C0077E0891F89570483C708EBD66190#

mov [vmapialloc+2], IATStart

mov [vmapialloc+7], IATSize

mov [vmapialloc+C], VMAPILOGGER

mov [vmapialloc+35], ENIGMASECTION

mov [vmapialloc+3D], ENIGMASECTION

add [vmapialloc+3D], ENIGMASIZE

mov OEP, eip

mov eip, vmapialloc

bp vmapialloc+4E

run

jmp vmpapialloc_set

auto:

gmemi ENIGMASECTION, MEMORYSIZE

mov ENIGMASIZE, $RESULT

gpi MAINBASE

mov filebase, $RESULT

gmi filebase, CODEBASE

mov CODESECTION, $RESULT

gmi filebase, CODESIZE

mov CODESIZE, $RESULT

alloc 2000

mov VMAPILOGGER, $RESULT

alloc 1000

mov vmapialloc, $RESULT

mov [vmapialloc], #60BB00104000BE00400E00BF0000320503F383EE013BDE0F841100000066813BFF250F840C00000043E9E7FFFFFFE930000000908B5302FF7302E820BD4F7783F80174E48B1281FA0070E70372DA81FA0050420477D28B4B02890F89570483C708EBC5BB00104000BE00400E0003F383EE013BDE0F841100000066813BFF150F840C00000043E9E7FFFFFFE930000000908B5302FF7302E8C3BC4F7783F80174E48B1281FA0070E70372DA81FA0050420477D28B4B02890F89570483C708EBC56190#

mov [vmapialloc+2], CODESECTION

mov [vmapialloc+7], CODESIZE

mov [vmapialloc+C], VMAPILOGGER

mov [vmapialloc+64], CODESECTION

mov [vmapialloc+69], CODESIZE

mov [vmapialloc+48], ENIGMASECTION

mov [vmapialloc+50], ENIGMASECTION

add [vmapialloc+50], ENIGMASIZE

mov [vmapialloc+A5], ENIGMASECTION

mov [vmapialloc+AD], ENIGMASECTION

add [vmapialloc+AD], ENIGMASIZE

GPA "IsBadCodePtr", "kernel32.dll"

mov IsBadCodePtr, $RESULT

eval "call {IsBadCodePtr}"

asm vmapialloc+3A, $RESULT

eval "call {IsBadCodePtr}"

asm vmapialloc+97, $RESULT

mov OEP, eip

mov eip, vmapialloc

bp vmapialloc+C1

run

vmpapialloc_set:

mov eip, OEP

mov esp_addr, esp

pusha

alloc 1000

mov searchalloc, $RESULT

mov [searchalloc], #60B800000000B900000000BE0000000003C883E9013BC10F840F0000008038E90F840800000040E9E9FFFFFF90908B500103D083C20581FA0000000072E83BD177E49090803A6875DD39720175D86190#

mov [searchalloc+2], ENIGMASECTION

mov [searchalloc+38], ENIGMASECTION

mov [searchalloc+7], ENIGMASIZE

looplogger:

mov origapiaddr, [VMAPILOGGER]

mov vmedlocation, [VMAPILOGGER+4]

cmp origapiaddr, 0

je end

gmemi [origapiaddr], MEMORYBASE

cmp $RESULT, ENIGMASECTION

jne next4bytes

mov eip, vmedlocation

loopsti:

find eip, #68????????#

cmp $RESULT, 0

jne foundpointer_push

findmovpointer:

find eip, #C70424#

cmp $RESULT, 0

jne foundpointer_mov

do_sti:

sti

jmp loopsti

foundpointer_push:

cmp $RESULT, eip

jne findmovpointer

jmp endsearch

foundpointer_mov:

cmp $RESULT, eip

jne do_sti

jmp endsearch

endsearch:

cmp [eip], #68#, 1

je push_type

cmp [eip], #C70424#, 3

je mov_type

push_type:

mov searchpointer, [eip+1], 4

jmp startsearch

mov_type:

mov searchpointer, [eip+3], 4

startsearch:

mov [searchalloc+C], searchpointer

mov bakeip, eip

mov eip, searchalloc

bp searchalloc+2C

bp searchalloc+4E

run

bc

cmp eip,searchalloc+2C

je next4bytes1

cmp eip,searchalloc+4E

je foundpointer

jmp end

foundpointer:

mov addr_result, eax

and addr_result, f0

cmp addr_result, 0

jne normal

mov addr_result, eax

alloc 100

mov alloc1, $RESULT

mov [alloc1], addr_result

rev [alloc1]

mov addr_result, $RESULT

eval #0{addr_result}#

mov addr_result, $RESULT

mov addr_result_bak, $RESULT

free alloc1

jmp after_notnormal

normal:

mov addr_result, eax

mov addr_result_bak, eax

after_notnormal:

sti

mov searchaddr_start, ENIGMASECTION

searchres:

find searchaddr_start, addr_result

cmp $RESULT, 0

je next4bytes1

mov addr_result, $RESULT

gmi [addr_result-4], MODULEBASE

mov mdbase, $RESULT

cmp mdbase, 0

je cont_s

cmp mdbase, [addr_result-8]

jne cont_s

jmp stop_search

cont_s:

mov searchaddr_start, addr_result

add searchaddr_start, 4

mov addr_result, addr_result_bak

jmp searchres

stop_search:

mov [origapiaddr], [addr_result-4]

gn [addr_result-4]

mov apiname, $RESULT_2

add fixed, 1

eval "[INFO]: Fixed at {origapiaddr} - {apiname}"

log $RESULT, ""

mov eip, bakeip

jmp next4bytes

next4bytes:

mov searchpointer, 0

mov addr_result, 0

add VMAPILOGGER, 8

jmp looplogger

next4bytes1:

mov eip, bakeip

add notfixed, 1

eval "[ERROR]: NOT fixed at {origapiaddr}"

log $RESULT, ""

add VMAPILOGGER, 8

mov searchpointer, 0

mov addr_result, 0

jmp looplogger

end:

mov eip, bakeip

free searchalloc

free VMAPILOGGER

free vmapialloc

mov esp, esp_addr

popa

mov eip, OEP

cmp fixed, 0

je nofixed

log " "

log "------------------UIF data------------------"

GPI PROCESSID

MOV PID, $RESULT

log "Process ID:"

log PID,""

log "Code section address:"

log CODESECTION,""

mov codesecend, CODESECTION

add codesecend, CODESIZE

log "Code section end:"

log codesecend,""

log " "

log PID,""

log CODESECTION,""

log codesecend,""

log " "

log "--------------------------------------------"

eval "Job completed.\r\n--------------------------\r\nFixed: {fixed}\r\nNOT fixed: {notfixed}\r\n--------------------------\r\nCheck log for more details."

jmp DONE1

nofixed:

eval "Job completed.\r\nNothing has been fixed."

DONE1:

msg $RESULT

Recuperare_cod:

cmp rulat_r, 0

ja Sfarsit

MSGYN "Do you want to recover virtualized OEP?"

cmp $RESULT, 0

ifeq

mov rulat_r, 1

jmp finalizare

//jmp Sfarsit

endif

GMI eip, CODEBASE

mov bazacod, $RESULT

GMI eip, CODESIZE

mov marimecod, $RESULT

VAR INTRARE

//ask "Enter the EIP of the stolen OEP"

mov INTRARE, eip

//mov INTRARE, 0041F372

BPHWS INTRARE

erun

bphwc INTRARE

ask "Enter compiler type: 1 for Delphi 2 for Visual Basic 3 for C++"

var sFile

mov tipcompilator, $RESULT

cmp $RESULT,1

ifeq

jmp Delphi

endif

cmp $RESULT,2

ifeq

jmp vb6

endif

cmp $RESULT,3

ifeq

jmp C_plus

endif

//Target compiler select

mov delphi, 1

mov vb6, 0

mov cpp, 0

/

cmp delphi, 1

ifeq

jmp Delphi

endif

cmp vb6, 1

ifeq

jmp vb6

endif

cmp cpp, 1

ifeq

jmp C_plus

endif

Delphi:

eval "Recovered_OEP_Delphi.txt"

mov sFile, $RESULT

wrt sFile, " "

wrta sFile, "PUSH EBP"

wrta sFile, "MOV EBP, ESP"

wrta sFile, "ADD ESP, -10"

log "PUSH EBP"

log "MOV EBP, ESP"

log "ADD ESP, -10"

BREAK:

bc

bphwc

bpmc

BPRM bazacod, marimecod

erun

cmp eip, INTRARE

ifeq

jmp BREAK

endif

cmp eip, bazacod+marimecod

ifa

jmp BREAK

endif

cmp eax, 01000000

ifa

jmp DWORD

endif

cmp [eip], #FF25#, 2

ifeq

jmp BREAK

endif

mov valoareeax, eax

eval "MOV EAX, 00{valoareeax}"

LOG $RESULT, ""

wrta sFile, $RESULT

eval "MOV ECX, 00{ecx}"

log $RESULT, ""

wrta sFile, $RESULT

eval "MOV EDX, 00{edx}"

log $RESULT, ""

wrta sFile, $RESULT

mov pozitie, eip

eval "CALL 0{pozitie}"

log $RESULT, ""

wrta sFile, $RESULT

GASIRE_RET:

bpmc

cmp [eip], #FF25#, 2

ifeq

jmp BREAK

endif

find eip, #C3#, 5

mov adresagasitaret, $RESULT

cmp adresagasitaret, 0

ifa

bp adresagasitaret

erun

bc adresagasitaret

esti

gci eip, COMMAND

mov stringoep, $RESULT

scmpi stringoep, "PUSH 0x0", 4

cmp $RESULT, 0

ifa

jmp Comanda_gci

endif

esti

jmp Comanda_gci

endif

find eip, #5?C?#, 1500

mov adresagasitaret, $RESULT

cmp adresagasitaret, 0

ifa

mov diferenta, adresagasitaret-eip

cmp diferenta, 35

ifb

cmp [adresagasitaret], #5BC3#, 2

ifeq

bpmc

bp adresagasitaret

erun

esti

esti

jmp Comanda_gci

endif

cmp [adresagasitaret], #5DC2#, 2

ifeq

bpmc

bp adresagasitaret

erun

esti

esti

jmp Comanda_gci

endif

msg "Diferenta prea mica"

endif

mov adresacomparare, adresagasitaret

add adresacomparare, 1

cmp [adresacomparare], #C3#,1

ifneq

mov start, eip

add start, 35

find start,#E8????????C3#

bp $RESULT

erun

bc

find eip, #5?C?#

bp $RESULT

erun

bc

esti

esti

jmp Comanda_gci

//msg "Pauza C3"

endif

bp adresagasitaret

erun

bc adresagasitaret

esti

esti

jmp Comanda_gci

endif

find eip, #5?5?5?5?C3#,500

bpmc

mov adresagasitaret, $RESULT

cmp adresagasitaret, 0

ifa

bp adresagasitaret

erun

bc adresagasitaret

esti

esti

jmp Comanda_gci

endif

cmp adresagasitaret, 0

Continuare_ret:

bpmc

ifa

bp adresagasitaret

bpmc

erun

endif

bc adresagasitaret

esti

esti

Comanda_gci:

GCI eip, COMMAND

mov comanda, $RESULT

scmpi comanda, "PUSH 0x0", 4

ifneq

jmp GASIRE_RET

endif

jmp BREAK

DWORD:

/

bc

bphwc

/

mov gasire, eax

rev gasire

mov gasire, $RESULT

///

eval "{gasire}"

mov gasire, $RESULT

//

len gasire

cmp $RESULT, 7

ifeq

eval "0{gasire}"

mov gasire, $RESULT

jmp ansamblare_gasire

endif

len gasire

cmp $RESULT, 6

ifeq

eval "00{gasire}"

mov gasire, $RESULT

endif

//log gasire, ""

ansamblare_gasire:

eval "#{gasire}#"

mov gasire, $RESULT

findmem gasire, bazacod

mov adresa_p, $RESULT

cmp adresa_p, 0

ifeq

GCI eip, COMMAND

mov comanda, $RESULT

scmpi comanda, "MOV EDX", 7

ifeq

find eip, #58C3#

bp $RESULT+1

bpmc

bphwc

erun

bc

esti

esti

jmp Comanda_gci

endif

msg "Pointer negasit"

pause

endif

ifa

eval "MOV EAX, DWORD PTR[{adresa_p}]"

log $RESULT, ""

wrta sFile, $RESULT

cmp ecx, 401000

ifa

eval "MOV ECX, 00{ecx}"

log $RESULT, ""

wrta sFile, $RESULT

endif

cmp edx, 401000

ifa

eval "MOV EDX, 00{edx}"

log $RESULT, ""

wrta sFile, $RESULT

endif

mov pozitie, eip

eval "CALL 0{pozitie}"

log $RESULT, ""

wrta sFile, $RESULT

jmp GASIRE_RET

vb6:

eval "Recovered_OEP_VB6.txt"

mov sFile, $RESULT

wrt sFile, " "

findmem #5642??21#, bazacod

mov variabilapush, $RESULT

cmp variabilapush,0

ifeq

msg "Pattern not found for push value - VB6"

jmp Sfarsit

endif

eval "PUSH 00{variabilapush}"

LOG $RESULT, ""

wrta sFile, $RESULT

asm eip, $RESULT

mov variabilacall, eip-6

eval "CALL 00{variabilacall}"

LOG $RESULT, ""

wrta sFile, $RESULT

asm eip+5, $RESULT

jmp Sfarsit

C_plus:

bc

bphwc

bpmc

BPRM bazacod, marimecod

erun

MOV intrarecallc, eip

eval "Recovered_OEP_CPP.txt"

mov sFile, $RESULT

wrt sFile, " "

EVAL "CALL {intrarecallc}"

log $RESULT, ""

wrta sFile, $RESULT

ASM INTRARE, $RESULT

bc

bphwc

bpmc

rtr

esti

BPRM bazacod, marimecod

erun

MOV jmpc, eip

EVAL "JMP {jmpc}"

log $RESULT, ""

wrta sFile, $RESULT

ASM INTRARE+5, $RESULT

jmp Sfarsit

Sfarsit:

msg "Script is finished"

//endif

pause

pause

ret

canceled:

msg "Canceled by user"

pause

pause

ret

VARS:

var EXEFILENAME

var CURRENTDIR

var EXEFILENAME_LEN

var CURRENTDIR_LEN

var LoadLibraryA

var VirtualAlloc

var GetModuleHandleA

var GetModuleFileNameA

var GetCurrentProcessId

var OpenProcess

var malloc

var free

var ReadProcessMemory

var CloseHandle

var VirtualFree

var CreateFileA

var WriteFile

var GetFileSize

var ReadFile

var SetFilePointer

var GetCommandLineA

var CreateFileMappingA

var MapViewOfFile

var lstrcpynA

var VirtualLock

var SetEndOfFile

var VirtualUnlock

var UnmapViewOfFile

var lstrlenA

var ldiv

var PATCH_CODESEC

var BAK_EIP

var ARIMPREC_PATH

var TRY_NAMES

var SearchAndRebuildImports

var PID

var IATRVA

var IATSIZE

var REBUILD_PATCH

var MessageBoxA

var GetProcAddress

var DOT_END

var DeleteFileA

var MoveFileA

var SECHANDLE

var EXEFILENAME_SHORT // xy.exe oder xy.dll

var OEP_RVA // new rva ohne IB

var NEW_SEC_RVA // rva of new section

var NEW_SECTION_NAME // name of dumped section to add

var NEW_SECTION_PATH // section full path

gpa "MessageBoxA", "user32.dll"

mov MessageBoxA, $RESULT

gpa "MoveFileA", "kernel32.dll"

mov MoveFileA, $RESULT

gpa "DeleteFileA", "kernel32.dll"

mov DeleteFileA, $RESULT

gpa "GetProcAddress", "kernel32.dll"

mov GetProcAddress, $RESULT

gpa "LoadLibraryA", "kernel32.dll"

mov LoadLibraryA, $RESULT

gpa "VirtualAlloc", "kernel32.dll"

mov VirtualAlloc, $RESULT

gpa "GetModuleHandleA", "kernel32.dll"

mov GetModuleHandleA, $RESULT

gpa "GetModuleFileNameA", "kernel32.dll"

mov GetModuleFileNameA, $RESULT

gpa "GetCurrentProcessId", "kernel32.dll"

mov GetCurrentProcessId, $RESULT

gpa "OpenProcess", "kernel32.dll"

mov OpenProcess, $RESULT

gpa "ReadProcessMemory", "kernel32.dll"

mov ReadProcessMemory, $RESULT

gpa "CloseHandle", "kernel32.dll"

mov CloseHandle, $RESULT

gpa "VirtualFree", "kernel32.dll"

mov VirtualFree, $RESULT

gpa "CreateFileA", "kernel32.dll"

mov CreateFileA, $RESULT

gpa "WriteFile", "kernel32.dll"

mov WriteFile, $RESULT

gpa "GetFileSize", "kernel32.dll"

mov GetFileSize, $RESULT

gpa "ReadFile", "kernel32.dll"

mov ReadFile, $RESULT

gpa "SetFilePointer", "kernel32.dll"

mov SetFilePointer, $RESULT

gpa "GetCommandLineA", "kernel32.dll"

mov GetCommandLineA, $RESULT

gpa "CreateFileMappingA", "kernel32.dll"

mov CreateFileMappingA, $RESULT

gpa "MapViewOfFile", "kernel32.dll"

mov MapViewOfFile, $RESULT

gpa "lstrcpynA", "kernel32.dll"

mov lstrcpynA, $RESULT

gpa "VirtualLock", "kernel32.dll"

mov VirtualLock, $RESULT

gpa "SetEndOfFile", "kernel32.dll"

mov SetEndOfFile, $RESULT

gpa "VirtualUnlock", "kernel32.dll"

mov VirtualUnlock, $RESULT

gpa "UnmapViewOfFile", "kernel32.dll"

mov UnmapViewOfFile, $RESULT

gpa "lstrlenA", "kernel32.dll"

mov lstrlenA, $RESULT

ret

DUMPER:

gpi EXEFILENAME

mov EXEFILENAME, $RESULT

len EXEFILENAME

mov EXEFILENAME_LEN, $RESULT

gpi CURRENTDIR

mov CURRENTDIR, $RESULT

len CURRENTDIR

mov CURRENTDIR_LEN, $RESULT

pusha

alloc 1000

mov eax, $RESULT

mov esi, eax

mov [eax], EXEFILENAME

add eax, CURRENTDIR_LEN

mov ecx, EXEFILENAME_LEN

sub ecx, CURRENTDIR_LEN

readstr [eax], ecx

mov EXEFILENAME_SHORT, $RESULT

str EXEFILENAME_SHORT

add eax, 10

add eax, ecx

mov [eax], "msvcrt.dll"

mov edi, LoadLibraryA

exec

push eax

call edi

ende

cmp eax, 00

jne MSVCRT_LOADED

msg "Can't load msvcrt.dll!"

pause

pause

cret

ret

MSVCRT_LOADED:

free esi

popa

gpa "malloc", "msvcrt.dll"

mov malloc, $RESULT

gpa "free", "msvcrt.dll"

mov free, $RESULT

gpa "ldiv", "msvcrt.dll"

mov ldiv, $RESULT

ASK_OEP_RVA:

// ask "Enter new OEP RVA"

// cmp $RESULT, 00

// je ASK_OEP_RVA

// cmp $RESULT, -1

// je ASK_OEP_RVA

mov OEP_RVA, eip

gmi OEP_RVA, MODULEBASE

sub OEP_RVA, $RESULT

START_OF_PATCH:

mov BAK_EIP, eip

alloc 2000

mov PATCH_CODESEC, $RESULT

mov eip, PATCH_CODESEC+09F

alloc 1000

//new

mov NAME_FILE, $RESULT

mov [NAME_FILE], EXEFILENAME_SHORT

mov [PATCH_CODESEC], OEP_RVA

// mov [PATCH_CODESEC+04], EXEFILENAME_SHORT

mov [PATCH_CODESEC+86], "msvcrt.dll"

mov [PATCH_CODESEC+09F], #C705AAAAAAAA000000008925AAAAAAAAA3AAAAAAAA890DAAAAAAAA8915AAAAAAAA891DAAAAAAAA892DAAAAAAAA8935AAAAAAAA893DAAAAAAAA#

mov [PATCH_CODESEC+0D8], #68AAAAAAAAE8D9BA21BB83F8000F84920400006A40680010000068004000006A00E8BDBA21BB83F8000F8476040000A3AAAAAAAA05002000008BE08BE881ED000200006A40680010000068001000006A00E88DBA21BB#

mov [PATCH_CODESEC+12E], #83F8000F8446040000A3AAAAAAAA6A40680010000068001000006A00E86CBA21BB83F8000F8425040000A3AAAAAAAA68AAAAAAAAE854BA21BB83F8000F840D0400006800100000FF35AAAAAAAA50E83ABA21BB83F8000F84F303000068AAAAAAAAE827BA21BB#

mov [PATCH_CODESEC+194], #83F8000F84E0030000A3AAAAAAAA8B483C03C88B51508915AAAAAAAA6800100000FF35AAAAAAAAFF35AAAAAAAAE8F5B921BB83F8000F84AE030000A3AAAAAAAA0305AAAAAAAA#

mov [PATCH_CODESEC+1DA], #83E8046681382E64741A6681382E4474136681382E65741B6681382E457414E97F030000C7005F44502EC74004646C6C00EB0FC7005F44502EC7400465786500EB00E89AB921BBA3AAAAAAAAFF35AAAAAAAA6A006A10E886B921BB#

mov [PATCH_CODESEC+235], #83F8000F843F030000A3AAAAAAAA33C0FF35AAAAAAAAE86BB921BB83F8000F8424030000A3AAAAAAAA8D55D852FF35AAAAAAAAFF35AAAAAAAAA1AAAAAAAA50FF35AAAAAAAAE83CB921BB83F8000F84F5020000FF35AAAAAAAAE828B921BB#

mov [PATCH_CODESEC+293], #83F8000F84E10200006A40680010000068002000006A00E80CB921BB83F8000F84C5020000A3AAAAAAAAA1AAAAAAAA8B0DAAAAAAAA518B35AAAAAAAA568BD052E883010000A1AAAAAAAA03403C8BF08B1DAAAAAAAA#

mov [PATCH_CODESEC+2E8], #895E28E805010000A1AAAAAAAA03403C8B40508B15AAAAAAAA8B35AAAAAAAA894424108954246C525056E87A0000008B25AAAAAAAA68008000006A00FF35AAAAAAAA#

mov [PATCH_CODESEC+32A], #E88CB821BB68008000006A00FF35AAAAAAAAE87AB821BB68008000006A00FF35AAAAAAAAE868B821BB68008000006A00FF35AAAAAAAAE856B821BBA1AAAAAAAA8B0DAAAAAAAA8B15AAAAAAAA8B1DAAAAAAAA8B2DAAAAAAAA8B35AAAAAAAA8B3DAAAAAAAA#

mov [PATCH_CODESEC+38E], #9090908974240CA1AAAAAAAA566A0068800000006A026A006A0368000000C050E808B821BB8BF083FEFF0F84BF0100008B54240CA1AAAAAAAA8D4C24106A0051525056E8E5B721BB83F8000F849E01000056E8D6B721BB#

mov [PATCH_CODESEC+3E5], #83F8000F848F010000B8010000005EC333D23BC20F847E01000033C9668B48148D4C08188955FC8955E433F6668B70063BD6731C8B710C8971148B710889711083C128894DE042EBDEC745FCFFFFFFFFB90010000089483C894854C3#

mov [PATCH_CODESEC+441], #9090B8010000008B4DF064890D000000005F5E5B8BE55DC3909081EC3C01000053555633ED575568800000006A03556A01680000008050E83EB721BB8BF083FEFF7512E9F40000005F5E5D33C05B81C43C010000C3#

mov [PATCH_CODESEC+496], #6A0056E81DB721BB83F8FF0F84D6000000BFBBBBBBBB8D4C24106A00518D54241C6A405256FFD785C00F84B800000066817C24144D5A7412E9AA0000005F5E5D33C05B81C43C010000C38B442450BBBBBBBBBB#

mov [PATCH_CODESEC+4E9], #6A006A005056FFD38D4C24106A00518D54245C68F80000005256FFD785C00F8470000000817C2454504500000F85620000008B8424A80000008B8C24580100003BC10F874C0000006A006A006A0056FFD38B9424A80000008B8424540100008D4C24106A0051525056FFD7#

mov [PATCH_CODESEC+554], #85C00F8421000000BD0100000056E854B621BB83F8000F840D0000005F8BC55E5D5B81C43C010000C39090#

pusha

mov eax, PATCH_CODESEC

add eax, 09F

mov ecx, PATCH_CODESEC

mov [eax+002], ecx

mov [eax+006], OEP_RVA

mov [eax+00C], ecx+04E

mov [eax+011], ecx+05A

mov [eax+017], ecx+05E

mov [eax+01D], ecx+062

mov [eax+023], ecx+066

mov [eax+029], ecx+06A

mov [eax+02F], ecx+06E

mov [eax+035], ecx+072

mov [eax+03A], ecx+086

eval "call {LoadLibraryA}"

asm eax+03E, $RESULT

eval "call {VirtualAlloc}"

asm eax+05A, $RESULT

mov [eax+069], ecx+052

eval "call {VirtualAlloc}"

asm eax+08A, $RESULT

mov [eax+099], ecx+076

eval "call {VirtualAlloc}"

asm eax+0AB, $RESULT

mov [eax+0BA], ecx+07A

// mov [eax+0BF], ecx+004

mov [eax+0BF], NAME_FILE

eval "call {GetModuleHandleA}"

asm eax+0C3, $RESULT

mov [eax+0D8], ecx+07A

eval "call {GetModuleFileNameA}"

asm eax+0DD, $RESULT

// mov [eax+0EC], ecx+004

mov [eax+0EC], NAME_FILE

eval "call {GetModuleHandleA}"

asm eax+0F0, $RESULT

mov [eax+0FF], ecx+032

mov [eax+10D], ecx+036

mov [eax+118], ecx+076

mov [eax+11E], ecx+032

eval "call {GetModuleFileNameA}"

asm eax+122, $RESULT

mov [eax+131], ecx+056

mov [eax+137], ecx+076

eval "call {GetCurrentProcessId}"

asm eax+17D, $RESULT

mov [eax+183], ecx+03A

mov [eax+189], ecx+03A

eval "call {OpenProcess}"

asm eax+191, $RESULT

mov [eax+1A0], ecx+03E

mov [eax+1A8], ecx+036

eval "call {malloc}"

asm eax+1AC, $RESULT

mov [eax+1BB], ecx+046

mov [eax+1C5], ecx+036

mov [eax+1CB], ecx+046

mov [eax+1D0], ecx+032

mov [eax+1D7], ecx+03E

eval "call {ReadProcessMemory}"

asm eax+1DB, $RESULT

mov [eax+1EB], ecx+03E

eval "call {CloseHandle}"

asm eax+1EF, $RESULT

eval "call {VirtualAlloc}"

asm eax+20B, $RESULT

mov [eax+21A], ecx+02E

mov [eax+21F], ecx+07A

mov [eax+225], ecx+036

mov [eax+22C], ecx+02E

mov [eax+23A], ecx+046

mov [eax+245], ecx

mov [eax+252], ecx+046

mov [eax+25E], ecx+046

mov [eax+264], ecx+076

mov [eax+27A], ecx+04E

mov [eax+287], ecx+052

eval "call {VirtualFree}"

asm eax+28B, $RESULT

mov [eax+299], ecx+076

eval "call {VirtualFree}"

asm eax+29D, $RESULT

mov [eax+2AB], ecx+07A

eval "call {VirtualFree}"

asm eax+2AF, $RESULT

mov [eax+2BD], ecx+02E

eval "call {VirtualFree}"

asm eax+2C1, $RESULT

mov [eax+2C7], ecx+05A

mov [eax+2CD], ecx+05E

mov [eax+2D3], ecx+062

mov [eax+2D9], ecx+066

mov [eax+2DF], ecx+06A

mov [eax+2E5], ecx+06E

mov [eax+2EB], ecx+072

mov [eax+2F7], ecx+076

eval "call {CreateFileA}"

asm eax+30F, $RESULT

mov [eax+324], ecx+046

eval "call {WriteFile}"

asm eax+332, $RESULT

eval "call {CloseHandle}"

asm eax+341, $RESULT

eval "call {CreateFileA}"

asm eax+3D9, $RESULT

eval "call {GetFileSize}"

asm eax+3FA, $RESULT

mov [eax+409], ReadFile

mov [eax+446], SetFilePointer

eval "call {CloseHandle}"

asm eax+4C3, $RESULT

popa

bp PATCH_CODESEC+38F // success dumping

bp PATCH_CODESEC+57D // PROBLEM

esto

bc

cmp eip, PATCH_CODESEC+38F

je DUMPING_SUCCESSFULLY

msg "Dumping failed by the script! \r\n\r\nDump the file manually! \r\n\r\nLCF-AT"

pause

pause

cret

ret

DUMPING_SUCCESSFULLY:

msg "Dumping was successfully by the script! \r\n\r\nLCF-AT"

mov eip, BAK_EIP

free PATCH_CODESEC

ret

ADDER:

alloc 2000

mov PATCH_CODESEC, $RESULT

ASK_SECTION_NAME:

// ask "Enter section name of dumped section with quotes"

// cmp $RESULT, 00

// je ASK_SECTION_NAME

// cmp $RESULT, -1

// je ASK_SECTION_NAME

mov $RESULT, filelc

mov NEW_SECTION_NAME, $RESULT

log NEW_SECTION_NAME, ""

ASK_NEW_SEC_RVA:

// ask "Enter new section RVA or nothing"

// cmp $RESULT, -1

// je ASK_NEW_SEC_RVA

mov $RESULT, SPLICESRVA

mov NEW_SEC_RVA, $RESULT

eval "{CURRENTDIR}{NEW_SECTION_NAME}"

mov NEW_SECTION_PATH, $RESULT

log NEW_SECTION_PATH, ""

mov [PATCH_CODESEC], NEW_SEC_RVA

mov [PATCH_CODESEC+08], NEW_SECTION_NAME

mov [PATCH_CODESEC+37], EXEFILENAME_SHORT

mov [PATCH_CODESEC+59], NEW_SECTION_PATH

mov [PATCH_CODESEC+216], #2E4E657753656300#

pusha

mov eax, PATCH_CODESEC

mov ecx, PATCH_CODESEC

add eax, 222

mov eip, eax

mov [eax], #60B8AAAAAAAAA3AAAAAAAAB8AAAAAA0AA3AAAAAAAA618925AAAAAAAAA3AAAAAAAA890DAAAAAAAA8915AAAAAAAA891DAAAAAAAA892DAAAAAAAA8935AAAAAAAA893DAAAAAAAA8925AAAAAAAA6A40680010000068004000006A00E83BB921BB83F8000F84FD060000A3AAAAAAAA05002000008BE08BE881ED000200006A40680010000068001000006A00E80BB921BB83F800#

mov [eax+091], #0F84CD060000A3AAAAAAAA8BF868AAAAAAAAE8F1B821BB83F8000F84B30600006800100000FF35AAAAAAAA50E8D7B821BB83F8000F84990600000305AAAAAAAA83E8046681382E64741A6681382E4474136681382E65741B6681382E457414E96F060000C7005F44502EC74004646C6C00EB0FC7005F44502EC7400465786500EB00A1AAAAAAAA8BF8EB37E878B821BB#

mov [eax+121], #4033C980382274044140EBF72BC1890DAAAAAAAA96F3A4A1AAAAAAAA8BD8031DAAAAAAAA83EB048B3BC7035F44502E897B03FF35AAAAAAAAE80700000090E806010000905355568B742410576A0068800000006A036A006A0368000000C056E814B821BB#

mov [eax+185], #8BF8A3AAAAAAAA83FFFF7505E9CE0500006A0057E8FBB721BB83F8FF0F84BD0500006A006A006A006A046A0057A3AAAAAAAA898608010000E8D7B721BB83F8008BE885ED7505E9940500006A006A006A006A0655E8BBB721BB83F8000F847D05000055BDBBBBBBBB#

mov [eax+1ED], #8BD8FFD583F8000F846A050000891DAAAAAAAA8BC38B403C03C3A3AAAAAAAAC780D000000000000000C780D4000000000000008BC885C08D511889861001000089961C010000740583C270EB0383C26033C0899620010000668B4114C78628010000000000005F8D4C081833C0898E24010000890DAAAAAAAA83C40CC36A0068800000006A036A006A01B9AAAAAAAA#

mov [eax+27C], #680000008051E812B721BB8BD883FBFF7505E9D1040000BDBBBBBBBB6A0053FFD583F8FF0F84BE0400008BF056E8EBB621BBA3AAAAAAAA8BF88D5424146A0052565753E8D5B621BB83F8000F8497040000E8550400008B48148B501003CA8B15AAAAAAAA518B423C50E8560400008B0DAAAAAAAA#

mov [eax+2F0], #6A006A005051E89EB621BBA1AAAAAAAA8D5424146A0052565750BDBBBBBBBB83F8000F844C04000057E8FD030000E82B030000E8FF0300008BF8566800100000897710E8080400008B0DAAAAAAAA89470851E8E302000083C4108D5424186A095052E842B621BB#

mov [eax+357], #83F8000F84040400008B4424186A0089078B4C2420894F048B15AAAAAAAA52FFD568AAAAAAAAA3AAAAAAAAE8630200008B1DAAAAAAAA6A0068800000006A036A006A0368000000C053E8F4B521BB83F8FF894424147505E9B10300008B5424146A0052E8DAB521BB83F8FF0F849C0300008BD8895C241C895C24186A046800100000536A00E8B8B521BB#

mov [eax+3E1], #85C0894424107505E9760300008B4424105350E8A0B521BB8B5424108B4424148D4C24246A0051535250E889B521BB83F8000F844B0300008B4C24108B413C03C1A3AAAAAAAA8BD08B4C24188B5424105152A1AAAAAAAA6033D2668B500633C9668B48148D4C0818BF2800000003CF4A83FA0075F883E928833DAAAAAAAA00#

mov [eax+460], #74098B35AAAAAAAA89710C61E8940000008BD88B4C24105183C40C8B542414BBBBBBBBBB6A006A006A0052FFD38B4C24188B5424108D4424246A00508B44241C515250E8F1B421BB83F8000F84B30200008B4C24188B5424146A006A005152FFD38B44241450E8CEB421BB#

mov [eax+4CB], #8B5C241CC7442420010000008B4C24105351E8B7B421BB8B54241068008000006A0052E8A6B421BB8B44241450E89CB421BB909090E9890000005333C9668B481433D2668B5006565783CFFF85D28D4C08187619558D59148BEA8B3385F67406#

mov [eax+52B], #3BF773028BFE83C3284D75EE5D33F64A85D2897854761A8B51348B790C2BD789510833D2668B500683C128464A3BF272E68B5424148B59148B71082BD38951108B490C85F6740E03CE5F8948505EB8010000005BC3#

mov [eax+580], #03CA5F8948505EB8010000005BC38B25AAAAAAAA68008000006A00FF35AAAAAAAAE8F3B321BB68008000006A00FF35AAAAAAAAE8E1B321BB8B25AAAAAAAAA1AAAAAAAA8B0DAAAAAAAA8B15AAAAAAAA8B1DAAAAAAAA8B2DAAAAAAAA8B35AAAAAAAA8B3DAAAAAAAA909090#

mov [eax+5EA], #568B742408A1AAAAAAAA50E89FB321BB8B0DAAAAAAAA8B15AAAAAAAA6A006A005152E888B321BBA1AAAAAAAA50E87DB321BB8B0DAAAAAAAA51E871B321BB5EC3568B74240856E864B321BB8A4C30FF8D4430FF80F9005E7409#

mov [eax+643], #8A48FF4880F90075F740C3E89A00000085C00F8505000000E9040100005657E8C00000008BF033FFC7464CE00000E0897E30A1AAAAAAAA8B08894E288B500466897E4A89562C66897E48897E448B46148B56108B0DAAAAAAAA03C28B513C5052E898000000#

mov [eax+6A8], #89463C897E40897E388B460883C4083BC774088B4E0C03C851EB098B560C8B461003D0526800100000E86A000000894634A1AAAAAAAA83C40866FF4006B8010000005F5EC3#

mov [eax+6ED], #8B0DAAAAAAAA33C033D2668B4106668B51148D04808D04C28B15AAAAAAAA8B523C8D4410408B51543BD01BC040C38B44240450E874B221BB59C38B0DAAAAAAAA33C0668B41068D1480A1AAAAAAAA8D44D0D8C3#

mov [eax+740], #568B742408578B7C24105657E848B221BB83C40885D27407405F0FAFC65EC38BC75F5EC39090#

mov [eax+02], ecx+216

mov [eax+07], ecx+20E

mov [eax+0C], ecx+008

mov [eax+11], ecx+1E6

mov [eax+18], ecx+1DE

mov [eax+1D], ecx+1BE

mov [eax+23], ecx+1C2

mov [eax+29], ecx+1C6

mov [eax+2F], ecx+1CA

mov [eax+35], ecx+1CE

mov [eax+3B], ecx+1D2

mov [eax+41], ecx+1D6

mov [eax+47], ecx+1DE

eval "call {VirtualAlloc}"

asm eax+59, $RESULT

mov [eax+68], ecx+1DA

eval "call {VirtualAlloc}"

asm eax+89, $RESULT

mov [eax+98], ecx+20A

// mov [eax+9F], ecx+037

mov [eax+9F], NAME_FILE

eval "call {GetModuleHandleA}"

asm eax+0A3, $RESULT

mov [eax+0B8], ecx+20A

eval "call {GetModuleFileNameA}"

asm eax+0BD, $RESULT

mov [eax+0CD], ecx+20A

mov [eax+114], ecx+20A

eval "call {GetCommandLineA}"

asm eax+11C, $RESULT

mov [eax+131], ecx+21E

mov [eax+139], ecx+20A

mov [eax+141], ecx+21E

mov [eax+155], ecx+20A

eval "call {CreateFileA}"

asm eax+180, $RESULT

mov [eax+188], ecx+206

eval "call {GetFileSize}"

asm eax+199, $RESULT

mov [eax+1B3], ecx+1F2

eval "call {CreateFileMappingA}"

asm eax+1BD, $RESULT

eval "call {MapViewOfFile}"

asm eax+1D9, $RESULT

mov [eax+1E9], CloseHandle

mov [eax+1FC], ecx+1FA

mov [eax+208], ecx+1FE

mov [eax+262], ecx+202

mov [eax+278], ecx+059

eval "call {CreateFileA}"

asm eax+282, $RESULT

mov [eax+294], GetFileSize

eval "call {malloc}"

asm eax+2A9, $RESULT

mov [eax+2AF], ecx+1EA

eval "call {ReadFile}"

asm eax+2BF, $RESULT

mov [eax+2DC], ecx+1FE

mov [eax+2EC], ecx+206

eval "call {SetFilePointer}"

asm eax+2F6, $RESULT

mov [eax+2FC], ecx+206

eval "call {WriteFile}"

asm eax+30A, $RESULT

mov [eax+33A], ecx+1E6

eval "call {lstrcpynA}"

asm eax+352, $RESULT

mov [eax+371], ecx+206

mov [eax+379], ecx+20A

mov [eax+37E], ecx+1F6

mov [eax+389], ecx+20A

eval "call {CreateFileA}"

asm eax+3A0, $RESULT

eval "call {GetFileSize}"

asm eax+3BA, $RESULT

eval "call {VirtualAlloc}"

asm eax+3DC, $RESULT

eval "call {VirtualLock}"

asm eax+3F4, $RESULT

eval "call {ReadFile}"

asm eax+40B, $RESULT

mov [eax+423], ecx+1FE

mov [eax+434], ecx+1FE

mov [eax+45B], ecx

mov [eax+464], ecx

mov [eax+480], SetFilePointer

eval "call {WriteFile}"

asm eax+4A3, $RESULT

eval "call {SetEndOfFile}"

asm eax+4C6, $RESULT

eval "call {VirtualUnlock}"

asm eax+4DD, $RESULT

eval "call {VirtualFree}"

asm eax+4EE, $RESULT

eval "call {CloseHandle}"

asm eax+4F8, $RESULT

mov [eax+590], ecx+1DE

mov [eax+59D], ecx+1DA

eval "call {VirtualFree}"

asm eax+5A1, $RESULT

mov [eax+5AF], ecx+20A

eval "call {VirtualFree}"

asm eax+5B3, $RESULT

mov [eax+5BA], ecx+1DE

mov [eax+5BF], ecx+1BE

mov [eax+5C5], ecx+1C2

mov [eax+5CB], ecx+1C6

mov [eax+5D1], ecx+1CA

mov [eax+5D7], ecx+1CE

mov [eax+5DD], ecx+1D2

mov [eax+5E3], ecx+1D6

mov [eax+5F0], ecx+1FA

eval "call {UnmapViewOfFile}"

asm eax+5F5, $RESULT

mov [eax+5FC], ecx+1F6

mov [eax+602], ecx+206

eval "call {SetFilePointer}"

asm eax+60C, $RESULT

mov [eax+612], ecx+206

eval "call {SetEndOfFile}"

asm eax+617, $RESULT

mov [eax+61E], ecx+206

eval "call {CloseHandle}"

asm eax+623, $RESULT

eval "call {lstrlenA}"

asm eax+630, $RESULT

mov [eax+676], ecx+20E

mov [eax+698], ecx+1FE

mov [eax+6DA], ecx+1FE

mov [eax+6EF], ecx+1FE

mov [eax+707], ecx+1FA

eval "call {free}"

asm eax+720, $RESULT

mov [eax+729], ecx+1FE

mov [eax+737], ecx+202

eval "call {ldiv}"

asm eax+74C, $RESULT

bp eax+5E7

bp eax+764

bp PATCH_CODESEC+4A9 // SecHandle

popa

esto

cmp eip, PATCH_CODESEC+4A9

jne NO_HANDLES

bc eip

mov SECHANDLE, eax

esto

NO_HANDLES:

bc

cmp eip, PATCH_CODESEC+809

je SECTION_ADDED_OK

cmp eip, PATCH_CODESEC+886

je NO_SECTION_ADDED

pause

pause

cret

ret

NO_SECTION_ADDED:

msg "Can't add the dumped section to file! \r\n\r\nDo it manually later! \r\n\r\nLCF-AT"

pause

pause

cret

ret

SECTION_ADDED_OK:

fill PATCH_CODESEC, 100, 00

mov [PATCH_CODESEC], filelc

pusha

mov edi, PATCH_CODESEC

mov esi, SECHANDLE

exec

push esi

call {CloseHandle}

push edi

call {DeleteFileA}

ende

popa

msg "Section was successfully added to dumped file! \r\n\r\nPE Rebuild was successfully! \r\n\r\nLCF-AT"

log "Section was successfully added to dumped file!"

log "PE Rebuild was successfully!"

mov eip, BAK_EIP

free PATCH_CODESEC

ret

FIXER:

call LOAD_ARI_DLL

jmp DO_REBUILD

LOAD_ARI_DLL:

pusha

alloc 1000

mov TRY_NAMES, $RESULT

mov eax, TRY_NAMES

mov [TRY_NAMES], ARIMPREC_PATH

mov ecx, LoadLibraryA

log ""

log eax

log ecx

exec

push eax

call ecx

ende

log eax

cmp eax, 00

jne DLL_LOAD_SUCCESS

log ""

log "Can't load the ARImpRec.dll!"

msg "Can't load the ARImpRec.dll!"

pause

pause

cret

ret

DLL_LOAD_SUCCESS:

refresh eax

mov [eax+1EA7D], #496174466978#

fill TRY_NAMES, 1000, 00

mov [TRY_NAMES], "SearchAndRebuildImports@28"

mov ecx, TRY_NAMES

mov edi, GetProcAddress

log ""

log ecx

log eax

log edi

exec

push ecx

push eax

call edi

ende

log eax

cmp eax, 00

jne TRY_API_SUCCESS

log ""

log "Can't get the SearchAndRebuildImports API!"

msg "Can't get the SearchAndRebuildImports API!"

pause

pause

cret

ret

TRY_API_SUCCESS:

mov SearchAndRebuildImports, eax

fill TRY_NAMES, 1000, 00

free TRY_NAMES

popa

ret

DO_REBUILD:

alloc 2000

mov PATCH_CODESEC, $RESULT

mov BAK_EIP, eip

mov [PATCH_CODESEC], PATCH_CODESEC+1800

mov [PATCH_CODESEC+04], IATSIZE

mov [PATCH_CODESEC+08], IATRVA

mov [PATCH_CODESEC+0C], PATCH_CODESEC+1500 // Dumpname

mov [PATCH_CODESEC+1500], EXEFILENAME

pusha

mov eax, PATCH_CODESEC+1500

add eax, EXEFILENAME_LEN

mov ecx, EXEFILENAME_LEN

xor ebx, ebx

DOT_LOOP:

cmp ecx, 00

jne DOT_LOOP_GO

msg "Can't find the dot in filename! \r\n\r\nLCF-AT"

log "Can't find the dot in filename!"

pause

pause

cret

ret

DOT_LOOP_GO:

cmp [eax], 2E, 01

je DOT

dec ecx

dec eax

inc ebx

jmp DOT_LOOP

DOT:

len [eax]

mov edx, $RESULT

gstr eax

mov DOT_END, $RESULT

mov [eax], "_DP"

add eax, 03

mov [eax], DOT_END

popa

pusha

exec

call {GetCurrentProcessId}

ende

mov PID, eax

popa

mov [PATCH_CODESEC+10], PID

mov [PATCH_CODESEC+14], SearchAndRebuildImports

mov [PATCH_CODESEC+100], #606800000000680000000068000000006A0068000000006800000000FF3500000000FF1500000000906190#

mov [PATCH_CODESEC+102], PATCH_CODESEC+1800 // PATCH_CODESEC

mov [PATCH_CODESEC+107], PATCH_CODESEC+04

mov [PATCH_CODESEC+10C], PATCH_CODESEC+08

mov [PATCH_CODESEC+113], BAK_EIP

mov [PATCH_CODESEC+118], [PATCH_CODESEC+0C]

mov [PATCH_CODESEC+11E], PATCH_CODESEC+10

mov [PATCH_CODESEC+124], PATCH_CODESEC+14

mov eip, PATCH_CODESEC+100

bp PATCH_CODESEC+128

bp PATCH_CODESEC+12A

esto

bc eip

cmp eax, 0

je REBUILD_GOOD

pusha

alloc 1000

mov edi, $RESULT

mov [edi], "Warning!"

mov esi, PATCH_CODESEC+1800

exec

push 30

push edi

push esi

push 0

call {MessageBoxA}

ende

free edi

popa

pause

pause

cret

ret

REBUILD_GOOD:

run

bc eip

mov eip, BAK_EIP

pusha

mov edi, PATCH_CODESEC+1500

exec

push edi

call {DeleteFileA}

ende

cmp eax, 01

jne DELETE_FAILED

len [edi]

mov esi, $RESULT

add esi, edi

inc esi

mov [esi], EXEFILENAME

mov eax, esi

len [eax]

add eax, $RESULT

DOT_LOOP_GO_2:

cmp [eax], 2E, 01

je DOT_2

dec eax

jmp DOT_LOOP_GO_2

DOT_2:

mov [eax], "_DP_"

add eax, 04

mov [eax], DOT_END

exec

push edi

push esi

call {MoveFileA}

ende

DELETE_FAILED:

popa

free PATCH_CODESEC

msg "IAT was rebuild into dumped file! \r\n\r\nLCF-AT"

log "IAT was rebuild into dumped file!"

ret

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503450.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hive 神盾特工局_《神盾局特工》第三季剧终惊人:两位超高人气的角色离开

原标题:《神盾局特工》第三季剧终惊人:两位超高人气的角色离开当“神盾局特工”几周前宣布一位主要角色将在本季最后一集中死亡时,粉丝开始猜测这个角色将会是谁。当一切真相揭开时,此剧对于“升天”这个词的承诺竟然有双重意义,第…

计算机软件著作权特征,计算机软件著作权的法律特征是什么

计算机软件著作权的法律特征是什么一、权利内容的法定性法定性有狭义、广义之分。作为一个法律概念的“权利”,都是由国家的法律所规定的,不存在任何法律规定之外的权利,譬如没有所谓“天赋”的权利。从这个意义上讲,凡法律上的权…

html img和背景图处理图片不拉伸_css 背景图不拉伸自适应屏幕大小

效果图全屏:背景图尺寸大于屏幕尺寸,背景图只显示跟屏幕一样大小内容小屏时:如效果图所示,图片并没有发生压缩、或者缩小比例,它只是显示跟屏幕尺寸大小的内容,至于如何控制缩小浏览器时图片的变化&#xf…

2017计算机基本配置检测表,2017整理如何查看电脑的硬件配置信息?查看电脑硬件配.ppt...

2017整理如何查看电脑的硬件配置信息?查看电脑硬件配如何查看电脑的硬件配置信息?查看电脑硬件配 如何查看电脑的硬件配置信息?查看电脑硬件配置信息的方法 电脑培训 n9byl电脑的配置如何看呢?很多没有什么电脑基础的人是一个大的问题,有不少…

棒棒糖球球机器人_球球大作战刷棒棒糖_球球大作战刷龙蛋攻略

玩过球球大作战的玩家们都知道我们要获得棒棒糖和龙蛋是很不容易的,那么游戏中我们要怎么免费获得龙蛋和棒棒糖呢,而通过怎么才能快速获得龙蛋和棒棒糖,同时通过刷的方式要怎么操作呢,接下来就由小编一起来详细给大家介绍吧。游戏…

计算机二级web考点,2018年计算机二级考试WEB考点:web应用程序状态管理方式

2017年计算机等级考试已经结束,出国留学网为考生们整理了2018年计算机二级考试WEB考点,希望能帮到大家,想了解更多资讯,请关注我们,小编会及时更新哦。2018年计算机二级考试WEB考点:web应用程序状态管理方式…

mac笔记本怎么外接显示屏_win to go的安装与Macbook pro外接eGPU开启

更新:wintogo中eGPU的驱动(针对15.6 MacBook pro,且只针对于mantiz这款显卡坞) 在不插入显卡的情况下,安装 win to go将 Windows 10升级 ⾄预览版 ,并完成所有Windows 10 更新,之后禁用windows更…

中职计算机教学工作随笔,教学随笔(精选15篇)

教学随笔(精选15篇)教学是教师的教和学生的学所组成的一种人类特有的人才培养活动。下面和小编一起来看教育教学随笔(精选15篇),希望有所帮助!教学随笔 篇1今天是我的早读,到学校了,小朋友还没有静下来读书。我挥手让小朋友们静下…

array 前端面试题_web前端开发面试题汇总

前端面试题汇总第一部分HTML&CSS1. 浏览器分类浏览器:IE,Chrome,FireFox,Safari,Opera。内核:Trident,Gecko,Presto,Webkit。2.行内元素和块级元素行内元素&#xff…

一个男的和计算机对话,父与子的对话:计算机算法

上一封信我提到了电脑必须有三样要素:输入、输出和算法。算法是最核心的部分。没有算法,电脑不会知道你的输入究竟该返回什么样的输出。你 最近数学期中考考得相当不错,你应该注意到,“应用题”这种题目,本质上考的就是…

python3编程入门先学什么_自学编程入门,先学什么语言好?

先说结论吧: 其实任何一个你能持之以恒学习的编程语言都行,但我会建议从 HTML,CSS 和 Python 开始入门。原因如下:学习编程就像学骑自行车,对新手来说最重要的是持之以恒的练习。那如何持之以恒呢?我建议从三方面考虑这个问题:选择…

计算机公式大小写,excel大写金额公式

excel大写金额公式是【IF(MOD(A2,1)0,TEXT(INT(A2),"[DBNUM2]")&"元"&"整",TEXT(INT(A2),"[DBNUM2]")&"元"&TEXT(MID(A2,LEN(INT(A2))2,1),"[DBNUM2]D角")&TEXT(MID(A2,LEN(INT(A2))3,1),&qu…

python装饰器的通俗理解_python装饰器的通俗理解

在学习Python的过程中,我相信有很多人和我一样,对Python的装饰器一直觉得很困惑,我也是困惑了好久,并通过思考和查阅才能略有领悟,我希望以下的内容会对你有帮助,我也努力通过通俗的方式使得对Python装饰器…

centos8安装文件服务器,centos8 服务器环境部署

1、jdk1.8 检查 yum 中有没有 java1.8 包yum list java-1.8*开始安装yum install java-1.8.0-openjdk* -yyum install redisyum install epel-releasesystemctl start redissystemctl status redis自启动systemctl enable redis安装数据库1、安装RPMyum install https://downlo…

vrchat模型保存_轻松简单自己上传VRChat的Avatar

有Unity就够了,不用BlenderPosted by SunnyRx on December 28, 2019

hdfs文件如何导出到服务器,[Hadoop] 如何将 HDFS 文件导出到 Windows文件系统

介绍如何在 Windows 环境中, 将保存在 HDFS 上的文件导出到本机上数据导入到 HDFS 后当然也要有方法将数据从 HDFS 导出到本机系统上在 HADOOP JAVA API 所提供的 FileSystem 类就提供 copyToLocalFile 函数将文件复制回本机文件系统理论上这是可以轻易的做到这件事情但实际使…

用纸筒做机器人_365天,每天都可以玩出新花样,卷纸筒就是这么牛的神器!

一旦有了娃,家里就会出现一大堆的玩具!随着孩子的长大,玩具也会越积越多,尤其是一些塑料玩具,恐龙,小动物,洋娃娃......你可以在房间的任一个角落,发现它们的踪影。而且,…

labelme 语义分割数据集_RangeNet++: 快速精确的雷达数据语义分割(IROS 2019)

本文主要介绍一篇关于雷达数据语义分割的文章。这篇文章将点云通spherical projection投到2D平面后,先通过高效的CNN网络得出segmentation结果,然后还原出点云的segmentation结果,最后用一个精巧的knn-search算法,对结果进行优化。…

安卓易剪多轨版_易剪多轨版安卓

易剪多轨版介绍易剪(多轨版) 是一款iOS平台的多轨音频编辑器,是国内*延续了PC平台的DAW精髓的移动平台的音频编辑器。如果您用过PC平台的Auditon,Cool Edit等类似软件,您轻松上手。易剪多轨版本延续了单轨编辑产品的高精度剪辑的特性&#xf…

dell主板40针开机针脚_技术活!戴尔主板的前置面板接口针脚的问题。

联想的老电脑主板烧了,朋友帮我找了块二手主板,是从DELL品牌机上拆下来的,其电源开关、Reset和前置USB前置音频的插座集成在一起,是DELL特有的34针插座。我找到了这个34针插座的针...联想的老电脑主板烧了,朋友帮我找了…