///////////////////////////////////////////////////////////// // Comment : Armadillo V4.42 CopyMem-II detach, fiXed Import Table Elimination // Environment : WinXP SP2,OllyDbg V1.10,OllyScript V0.92 // Author : fly , heXer // modified : vel // Date : 23-03-2006 ///////////////////////////////////////////////////////////// #log dbh var T0 var T1 var temp var bpcnt var MagicJMP var JmpAddress var fiXedOver var OpenMutexA var GetModuleHandleA var VirtualProtect var CreateThread var FindOEP var SaveIat var IatSize var IatFileBin mov IatSize,600 var strchr var fiXedOver1 var Patch01 var Patch02 MSGYN "Plz Clear All BreakPoints And Set Debugging Option Ignore All Excepions Options !" cmp $RESULT, 0 je TryAgain //OutputDebugStringA gpa "OutputDebugStringA", "KERNEL32.dll" mov [$RESULT], #C20400# //OpenMutexA gpa "GetModuleHandleA", "KERNEL32.dll" find $RESULT,#C20400# mov GetModuleHandleA,$RESULT eob GetModuleHandleA bp GetModuleHandleA gpa "OpenMutexA", "KERNEL32.dll" mov OpenMutexA,$RESULT bp OpenMutexA esto OpenMutexA: eob KillOpenMutexA exec mov eax,[ESP+0C] pushad push eax push 0 push 0 CALL CreateMutexA popad jmp OpenMutexA ende KillOpenMutexA: bc OpenMutexA sti //GetModuleHandleA eob GetModuleHandleA GoOn0: esto GetModuleHandleA: cmp eip,OpenMutexA je OpenMutexA cmp eip,GetModuleHandleA jne GoOn0 cmp bpcnt,1 je VirtualFree cmp bpcnt,2 je Third VirtualAlloc: mov temp,esp add temp,4 log temp mov T0,[temp] cmp [T0],6E72656B log [T0] jne GoOn0 add temp,4 mov T1,[temp] cmp [T1],74726956 jne GoOn0 bc OpenMutexA inc bpcnt jmp GoOn0 VirtualFree: mov temp,esp add temp,4 mov T1,[temp] cmp [T1],6E72656B jne GoOn0 add temp,4 mov T1,[temp] add T1,7 cmp [T1],65657246 log [T1] jne GoOn0 inc bpcnt jmp GoOn0 Third: mov temp,esp add temp,4 mov T1,[temp] cmp [T1],6E72656B jne GoOn0 bc GetModuleHandleA sti //MagicJMP find eip,#39????0F84# cmp $RESULT,0 je NoFind add $RESULT,3 mov MagicJMP,$RESULT log MagicJMP mov T0,$RESULT add T0,2 mov T1, [T0] add T1,4 add T1,T0 mov JmpAddress,T1 log JmpAddress eval "jmp {JmpAddress}" asm MagicJMP,$RESULT mov temp,MagicJMP sub temp,100 find temp,#39??????????0F84# cmp $RESULT,0 je NoFind add $RESULT,6 mov T0,$RESULT add T0,2 mov T1, [T0] add T1,4 add T1,T0 mov fiXedOver,T1 log fiXedOver eob fiXedOver bp fiXedOver esto GoOn1: esto fiXedOver: cmp eip,fiXedOver jne GoOn1 bc fiXedOver eval "je {JmpAddress}" asm MagicJMP,$RESULT //VirtualProtect gpa "VirtualProtect", "KERNEL32.dll" mov VirtualProtect,$RESULT eob VirtualProtect bp VirtualProtect esto GoOn2: esto VirtualProtect: cmp eip,VirtualProtect jne GoOn2 bc VirtualProtect //strchr gpa "strchr", "msvcrt.dll" mov strchr,$RESULT bp strchr eob strchr esto GoOn3: esto strchr: mov temp,[esp] //Patch find temp,#8378080074??6800010000# cmp $RESULT,0 je GoOn3 bc strchr mov Patch01,$RESULT log Patch01 mov [Patch01],#83780800EB# find temp,#6BC93281C1D00700003BC176# cmp $RESULT,0 je NoFind mov Patch02,$RESULT log Patch02 mov [Patch02],#6BC93281C1D00700003BC1EB# find temp,#33D2B910270000F7F18985????????8B85????????8B00# cmp $RESULT,0 je NoFind mov fiXedOver,$RESULT add fiXedOver,15 log fiXedOver bp fiXedOver eob fiXedOver1 esto GoOn4: esto fiXedOver1: cmp eip,fiXedOver jne GoOn4 bc fiXedOver mov [Patch01],#8378080074# mov [Patch02],#6BC93281C1D00700003BC176# mov SaveIat,eax log SaveIat eval "SaveIat{SaveIat}.bin" mov IatFileBin,$RESULT dm SaveIat,IatSize,IatFileBin //VirtualProtect gpa "VirtualProtect", "KERNEL32.dll" mov VirtualProtect,$RESULT eob VirtualProtect2 bp VirtualProtect //esto GoOn5: esto VirtualProtect2: //cmp eip,VirtualProtect //jne GoOn5 bc VirtualProtect eob Decript rtu Decript: mov Patch01, eip add Patch01, 1 mov Patch01 ,[Patch01] esti mov [Patch01] , 0 MSGYN "Fix Import Table Elimination ?" cmp $RESULT, 0 je Go pause Go: //CreateThread gpa "CreateThread", "KERNEL32.dll" find $RESULT,#5DC21800# mov CreateThread,$RESULT eob CreateThread bp CreateThread esto GoOn6: esto CreateThread: cmp eip,CreateThread jne GoOn6 bc CreateThread rtu //FindOEP mov temp,eip sub temp,400 find temp,#2BCAFFD18BD8# cmp $RESULT,0 jne BP find temp,#2BCAFFD189# cmp $RESULT,0 jne BP find temp,#2BF9FFD7# cmp $RESULT,0 je NoFind BP: add $RESULT,2 mov FindOEP,$RESULT log FindOEP eob FindOEP bp FindOEP esto FindOEP: bc FindOEP sti //Finish log eip cmt eip, "<-- This is the OEP!" MSG " OEP ! Dump and Fix IAT " ret NoFind: MSG "Error! Don't find. " ret TryAgain: MSG " Plz Try Again ! " ret