Jump to content
Tuts 4 You

Armadillo 7.40 (Inline Patching CRC)


Teddy Rogers

About This File

Video tutorial walking through the process of unpacking and then inline patching (by API hooking) Armadillo 7.40 with Debug-Blocker enabled.

Protected By Armadillo
<-Find Protect
	Protection system (Professional)

<Protection Options>
	Debug-Blocker

<Backup Key Options>
	Variable Backup Keys

<Compression Options>
	Best/Slowest Compression

<-Find Version
	Version 7.40 27-07-2010


	Unregistered Copy
-------------------------------------
Unpacking 
OpenMutexA(For Inline Patching)
00E5AE86   JNZ wmtplus6.00E5B094


OEP == (RVA) 9B30E0 == (VA) 0DB30E0 
IAT      == 09D22A4
Size     == C98
-------------------------------------
Cracking Bytes:
00C0B3DC    B0 01        MOV AL,1
00C0B3DE    90           NOP
*************************************
*************************************

Inline Patching
1- Add Free Space == 00EEA00B

2- Find Real CRC32

CRC1 = D2B572BF --> [EBP-10]
CRC2 = FDF61F49 --> [EBP-18]
CRC3 = 97EF85E3 --> [EBP-1C]
CRC4 = BB989269 --> [EBP-20]
CRC5 = 4E45D7E8 --> [EBP-24]

Armadillo EntryPoint = 00EA841F

2- Patch Debug-Blocker == 00E5AE86
    
3 - ADD Free Space = 00EEA00B


4 - Write Inline Patching Codes

00EEA00B  PUSHAD                                         ;  ;SAVE All Register
00EEA00C  PUSH wmtplus6.00EEA13D                         ; /pModule = "kernel32.dll"
00EEA011  CALL DWORD PTR DS:[<&KERNEL32.GetModuleHandleA>; \GetModuleHandleA
00EEA017  PUSH EAX                                       ;  ;SAVE "kernel32.dll" -> GetModuleHandleA
00EEA018  PUSH EAX                                       ;  ;SAVE "kernel32.dll" -> OutputDebugStringA
00EEA019  NOP
00EEA01A  PUSH wmtplus6.00EEA14D                         ; /ProcNameOrOrdinal = "VirtualProtect"
00EEA01F  PUSH EAX                                       ; |hModule = NULL
00EEA020  CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>] ; \GetProcAddress
00EEA026  MOV DWORD PTR DS:[EEA18D],EAX                  ;  ;SAVE "VirtualProtect" Address
00EEA02B  NOP
00EEA02C  POP EAX                                        ;  ;Load kernel32
00EEA02D  PUSH wmtplus6.00EEA15D                         ; /ProcNameOrOrdinal = "GetModuleHandleA"
00EEA032  PUSH EAX                                       ; |hModule = NULL
00EEA033  CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>] ; \GetProcAddress
00EEA039  MOV DWORD PTR DS:[EEA191],EAX                  ;  ;SAVE "GetModuleHandleA" Address
00EEA03E  NOP
00EEA03F  POP EAX                                        ;  ;Load kernel32
00EEA040  PUSH wmtplus6.00EEA16E                         ; /ProcNameOrOrdinal = "OutputDebugStringA"
00EEA045  PUSH EAX                                       ; |hModule = NULL
00EEA046  CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>] ; \GetProcAddress
00EEA04C  MOV DWORD PTR DS:[EEA195],EAX                  ;  ;SAVE "OutputDebugStringA" Address
00EEA051  NOP
00EEA052  PUSH wmtplus6.00EEA1AE                         ; /pOldProtect = wmtplus6.00EEA1AE
00EEA057  PUSH 40                                        ; |NewProtect = PAGE_EXECUTE_READWRITE
00EEA059  PUSH 5                                         ; |Size = 5
00EEA05B  PUSH DWORD PTR DS:[EEA191]                     ; |Address = kernel32.GetModuleHandleA
00EEA061  CALL DWORD PTR DS:[EEA18D]                     ; \VirtualProtect
00EEA067  NOP
00EEA068  MOV ESI,DWORD PTR DS:[EEA191]                  ;  ;ESI = GetModuleHandleA Address
00EEA06E  MOV EDI,wmtplus6.00EEA0D5                      ;  ;EDI = First Paching Codes
00EEA073  MOV ECX,5                                      ;  ;ECX = 5 Byte
00EEA078  REP MOVS BYTE PTR ES:[EDI],BYTE PTR ES:[ESI]   ;  ;First Paching Codes = 5 Bytes GetModuleHandleA
00EEA07B  MOV ESI,wmtplus6.00EEA1A0                      ;  ;ESI = Jmap to First Paching Codes
00EEA080  MOV EDI,DWORD PTR DS:[EEA191]                  ;  ;EDI = "GetModuleHandleA" Address
00EEA086  MOV ECX,5                                      ;  ;ECX = 5 Byte
00EEA08B  REP MOVS BYTE PTR ES:[EDI],BYTE PTR ES:[ESI]   ;  ;GetModuleHandleA = Jmap to First Paching Codes
00EEA08E  NOP
00EEA08F  PUSH wmtplus6.00EEA1BE                         ; /pOldProtect = wmtplus6.00EEA1BE
00EEA094  PUSH 40                                        ; |NewProtect = PAGE_EXECUTE_READWRITE
00EEA096  PUSH 5                                         ; |Size = 5
00EEA098  PUSH DWORD PTR DS:[EEA195]                     ; |Address = kernel32.OutputDebugStringA
00EEA09E  CALL DWORD PTR DS:[EEA18D]                     ; \VirtualProtect
00EEA0A4  NOP
00EEA0A5  MOV ESI,DWORD PTR DS:[EEA195]                  ;  ;ESI = "OutputDebugStringA" Address
00EEA0AB  MOV EDI,wmtplus6.00EEA105                      ;  ;EDI = First CRC32 Patching Codes
00EEA0B0  MOV ECX,5                                      ;  ;ECX = 5 Byte
00EEA0B5  REP MOVS BYTE PTR ES:[EDI],BYTE PTR ES:[ESI]   ;  ;First CRC32 Paching Codes = 5 Bytes "OutputDebugStringA"
00EEA0B8  MOV ESI,wmtplus6.00EEA1A6                      ;  ;ESI = Jmap to First CRC32 Paching Codes
00EEA0BD  MOV EDI,DWORD PTR DS:[EEA195]                  ;  ;EDI = "OutputDebugStringA" Address
00EEA0C3  MOV ECX,5                                      ;  ;ECX = 5 Byte
00EEA0C8  REP MOVS BYTE PTR ES:[EDI],BYTE PTR ES:[ESI]   ;  ;"OutputDebugStringA" = Jmap to First CRC32 Paching Codes
00EEA0CB  NOP
00EEA0CC  POPAD
00EEA0CD  JMP wmtplus6.00EA841F                          ;  Jamp To Armadillo EntryPoint
00EEA0D2  NOP
00EEA0D3  NOP
00EEA0D4  NOP                                            ;  ; First Patching Codes             ---|
00EEA0D5  NOP                                            ;  ; Jamp Here By GetModuleHandleA    <--|
00EEA0D6  NOP
00EEA0D7  NOP
00EEA0D8  NOP
00EEA0D9  NOP
00EEA0DA  PUSHFD
00EEA0DB  CMP DWORD PTR SS:[EBP+8],0
00EEA0DF  JNZ SHORT wmtplus6.00EEA0F2
00EEA0E1  DEC BYTE PTR DS:[EEA199]
00EEA0E7  JNZ SHORT wmtplus6.00EEA0F2
00EEA0E9  NOP
00EEA0EA  NOP
00EEA0EB  JMP wmtplus6.00EEA1CA
00EEA0F0  NOP
00EEA0F1  NOP
00EEA0F2  POPFD
00EEA0F3  JMP kernel32.7C80B736
00EEA0F8  NOP                                            ;  ; First Patching Codes
00EEA0F9  NOP
00EEA0FA  NOP
00EEA0FB  NOP
00EEA0FC  NOP
00EEA0FD  NOP
00EEA0FE  NOP
00EEA0FF  NOP
00EEA100  NOP
00EEA101  NOP
00EEA102  NOP
00EEA103  NOP
00EEA104  NOP
00EEA105  NOP                                            ;  ; First CRC32 Patching Codes           ---|
00EEA106  NOP                                            ;  ; Jamp Here By "OutputDebugStringA"    <--|
00EEA107  NOP
00EEA108  NOP
00EEA109  NOP
00EEA10A  PUSHFD
00EEA10B  DEC BYTE PTR DS:[EEA19A]
00EEA111  JNZ SHORT wmtplus6.00EEA136
00EEA113  MOV DWORD PTR SS:[EBP-10],D2B572BF
00EEA11A  MOV DWORD PTR SS:[EBP-18],FDF61F49
00EEA121  MOV DWORD PTR SS:[EBP-1C],97EF85E3
00EEA128  MOV DWORD PTR SS:[EBP-20],BB989269
00EEA12F  MOV DWORD PTR SS:[EBP-24],4E45D7E8
00EEA136  POPFD
00EEA137  JMP kernel32.7C85AC81                          ;  ; End CRC32 Patching Codes
00EEA13C  NOP
00EEA13D  ASCII "kernel32.dll",0
00EEA14A  DB 00
00EEA14B  DB 00
00EEA14C  DB 00
00EEA14D  ASCII "VirtualProtect",0
00EEA15C  DB 00
00EEA15D  ASCII "GetModuleHandleA"
00EEA16D  ASCII 0
00EEA16E  ASCII "OutputDebugStrin"
00EEA17E  ASCII "gA",0
00EEA181  NOP
00EEA182  NOP
00EEA183  NOP
00EEA184  NOP
00EEA185  NOP
00EEA186  NOP
00EEA187  NOP
00EEA188  NOP
00EEA189  NOP
00EEA18A  NOP
00EEA18B  NOP
00EEA18C  NOP
00EEA18D  DD kernel32.VirtualProtect
00EEA191  DD kernel32.GetModuleHandleA
00EEA195  DD kernel32.OutputDebugStringA
00EEA199  DB 39                                          ;  CHAR '9'
00EEA19A  DB 02
00EEA19B  NOP
00EEA19C  NOP
00EEA19D  NOP
00EEA19E  NOP
00EEA19F  NOP
00EEA1A0  DB E9
00EEA1A1  DB 9F
00EEA1A2  DB E9
00EEA1A3  DB 6D                                          ;  CHAR 'm'
00EEA1A4  DB 84
00EEA1A5  NOP
00EEA1A6  DB E9
00EEA1A7  TEST AH,DH
00EEA1A9  PUSH 90909084
00EEA1AE  NOP
00EEA1AF  NOP
00EEA1B0  NOP
00EEA1B1  NOP
00EEA1B2  NOP
00EEA1B3  NOP
00EEA1B4  NOP
00EEA1B5  NOP
00EEA1B6  NOP
00EEA1B7  NOP
00EEA1B8  NOP
00EEA1B9  NOP
00EEA1BA  NOP
00EEA1BB  NOP
00EEA1BC  NOP
00EEA1BD  NOP
00EEA1BE  NOP
00EEA1BF  NOP
00EEA1C0  NOP
00EEA1C1  NOP
00EEA1C2  NOP
00EEA1C3  NOP
00EEA1C4  NOP
00EEA1C5  NOP
00EEA1C6  NOP
00EEA1C7  NOP
00EEA1C8  NOP
00EEA1C9  NOP
00EEA1CA  PUSH wmtplus6.00EEA200                         ; /pOldProtect = wmtplus6.00EEA200
00EEA1CF  PUSH 40                                        ; |NewProtect = PAGE_EXECUTE_READWRITE
00EEA1D1  PUSH 3                                         ; |Size = 3
00EEA1D3  PUSH wmtplus6.00C0B3DC                         ; |Address = wmtplus6.00C0B3DC
00EEA1D8  CALL DWORD PTR DS:[EEA18D]                     ; \VirtualProtect
00EEA1DE  NOP
00EEA1DF  NOP
00EEA1E0  MOV BYTE PTR DS:[C0B3DC],0B0
00EEA1E7  MOV BYTE PTR DS:[C0B3DD],1
00EEA1EE  MOV BYTE PTR DS:[C0B3DE],90
00EEA1F5  NOP
00EEA1F6  NOP
00EEA1F7  JMP wmtplus6.00EEA0F0

60 68 3D A1 EE 00 FF 15 48 A2 EF 00 50 50 90 68 4D A1 EE 00 50 FF 15 8C A0 EF 00 A3 8D A1 EE 00
90 58 68 5D A1 EE 00 50 FF 15 8C A0 EF 00 A3 91 A1 EE 00 90 58 68 6E A1 EE 00 50 FF 15 8C A0 EF
00 A3 95 A1 EE 00 90 68 AE A1 EE 00 6A 40 6A 05 FF 35 91 A1 EE 00 FF 15 8D A1 EE 00 90 8B 35 91
A1 EE 00 BF D5 A0 EE 00 B9 05 00 00 00 26 F3 A4 BE A0 A1 EE 00 8B 3D 91 A1 EE 00 B9 05 00 00 00
26 F3 A4 90 68 BE A1 EE 00 6A 40 6A 05 FF 35 95 A1 EE 00 FF 15 8D A1 EE 00 90 8B 35 95 A1 EE 00
BF 05 A1 EE 00 B9 05 00 00 00 26 F3 A4 BE A6 A1 EE 00 8B 3D 95 A1 EE 00 B9 05 00 00 00 26 F3 A4
90 61 E9 4D E3 FB FF 90 90 90 90 90 90 90 90 9C 83 7D 08 00 75 11 FE 0D 99 A1 EE 00 75 09 90 90
E9 DA 00 00 00 90 90 9D E9 3E 16 92 7B 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 9C
FE 0D 9A A1 EE 00 75 23 C7 45 F0 BF 72 B5 D2 C7 45 E8 49 1F F6 FD C7 45 E4 E3 85 EF 97 C7 45 E0
69 92 98 BB C7 45 DC E8 D7 45 4E 9D E9 45 0B 97 7B 90 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00
00 00 56 69 72 74 75 61 6C 50 72 6F 74 65 63 74 00 00 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C
65 41 00 4F 75 74 70 75 74 44 65 62 75 67 53 74 72 69 6E 67 41 00 90 90 90 90 90 90 90 90 90 90
90 90 D4 1A 80 7C 31 B7 80 7C 7C AC 85 7C 39 02 90 90 90 90 90 E9 9F E9 6D 84 90 E9 84 F4 68 84
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 68
00 A2 EE 00 6A 40 6A 03 68 DC B3 C0 00 FF 15 8D A1 EE 00 90 90 C6 05 DC B3 C0 00 B0 C6 05 DD B3
C0 00 01 C6 05 DE B3 C0 00 90 90 90 E9 F4 FE FF FF

 


User Feedback

Recommended Comments

There are no comments to display.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...