Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks [Overlay]

单进程 

ArmadilloFindProtected

<Protection Options>

Standard protection or Minimum protection
Enable Import Table Elimination
Enable Strategic Code Splicing

 

OD载入:

004E71DC we>  55              push ebp          ; 入口点

004E71DD      8BEC            mov ebp,esp

004E71DF      6A FF           push -1

 

bp GetModuleHandleA+7

00128D08  /0012CF70

00128D0C  |00B805CD    返回到 00B805CD 来自 KERNEL32.GetModuleHandleA

00128D10  |00B92D60    ASCII "kernel32.dll"

00128D14  |00B93F60    ASCII "VirtualAlloc"

00128D18  |00000001

 

00128D08  /0012CF70

00128D0C  |00B805EA    返回到 00B805EA 来自 KERNEL32.GetModuleHandleA

00128D10  |00B92D60    ASCII "kernel32.dll"

00128D14  |00B93F54    ASCII "VirtualFree"

00128D18  |00000001

 

001080F4  /00108130

001080F8  |00B89A41    返回到 00B89A41 来自 KERNEL32.GetModuleHandleA

001080FC  |00000000

 

...中间省略一些,因为我们要见的是kernel32.dll

 

00128A80  /00128D0C

00128A84  |00B69900    返回到 00B69900 来自 KERNEL32.GetModuleHandleA

00128A88  |00128BC0    ASCII "kernel32.dll"

 

可以返回:

00B69900      8B0D 3881B900   mov ecx,dword ptr ds:[B98138]

00B69906      89040E          mov dword ptr ds:[esi+ecx],eax

00B69909      A1 3881B900     mov eax,dword ptr ds:[B98138]

00B6990E      393C06          cmp dword ptr ds:[esi+eax],edi

00B69911      75 16           jnz short 00B69929

00B69913      8D85 B4FEFFFF   lea eax,dword ptr ss:[ebp-14C]

00B69919      50              push eax

00B6991A      FF15 D4D0B800   call dword ptr ds:[B8D0D4]         ; KERNEL32.LoadLibraryA

00B69920      8B0D 3881B900   mov ecx,dword ptr ds:[B98138]

00B69926      89040E          mov dword ptr ds:[esi+ecx],eax

00B69929      A1 3881B900     mov eax,dword ptr ds:[B98138]

00B6992E      393C06          cmp dword ptr ds:[esi+eax],edi

00B69931     /0F84 AD000000   je 00B699E4                        ; magic jump

 

00B699E4      83C3 0C         add ebx,0C

00B699E7      83C6 04         add esi,4

00B699EA      397B FC         cmp dword ptr ds:[ebx-4],edi

00B699ED    ^ 0F85 CCFEFFFF   jnz 00B698BF

00B699F3     /EB 03           jmp short 00B699F8                 ; 断下后取消修改

00B699F5      D6              salc

有些不用撤销修改,有些需要,要不就无法调试。

 

bp GetCurrentThreadId

0012D798   00B88A24    /CALL 到 GetCurrentThreadId 来自 00B88A1E

0012D79C   0012FF2C

 

返回后F8步进到:

00B88AB7      FFD7            call edi                           ; webpro5.004AE268

 

004AE268      55              push ebp                           ; OEP

004AE269      8BEC            mov ebp,esp

004AE26B      83C4 F0         add esp,-10

004AE26E      53              push ebx

 

RVA定位:

跟随call,找jmp:

00406224    - FF25 8CC0BB00   jmp dword ptr ds:[BBC08C]          ; KERNEL32.GetModuleHandleA

0040622A      8BC0            mov eax,eax

0040622C    - FF25 94C3BB00   jmp dword ptr ds:[BBC394]          ; KERNEL32.LocalAlloc

00406232      8BC0            mov eax,eax

00406234    - FF25 D4C5BB00   jmp dword ptr ds:[BBC5D4]          ; KERNEL32.TlsGetValue

 

dd BBC08C:

00BBBFE0  00000000

00BBBFE4  00000000

00BBBFE8  000B0133

00BBBFEC  00180700

00BBBFF0  77E06D86  USER32.CreatePopupMenu

00BBBFF4  77E6BF41  KERNEL32.ResetEvent

00BBBFF8  77E0757C  USER32.CreateMenu

00BBBFFC  77E6AB06  KERNEL32.GetModuleHandleA

00BBC000  779B92D0  OLEAUT32.SysReAllocStringLen

00BBC004  77E1D86D  USER32.CreateIcon

00BBC008  77E7F362  KERNEL32.GetExitCodeThread

...

00BBC0A0  77F46046  GDI32.SetMapMode

00BBC0A4  77DF80D8  USER32.ShowCursor

00BBC0A8  00B6A8F3

00BBC0AC  77E0A1DD  USER32.SetClipboardData

00BBC0B0  77E7AC6E  KERNEL32.Sleep

00BBC0B4  77F6E259  GDI32.GetEnhMetaFileDescriptionA

...

00BBC94C  77DF383C  USER32.PtInRect

00BBC950  77E7EB3A  KERNEL32.GetVersion

00BBC954  00B6A962

00BBC958  796D1E76  ADVAPI32.RegCloseKey

00BBC95C  00B6A957

00BBC960  00B6A927

00BBC964  77DF63BD  USER32.SetForegroundWindow

00BBC968  BAADF00D

00BBC96C  BAADF00D

00BBC970  ABABABAB

00BBC974  ABABABAB

00BBC978  00000000

00BBC97C  00000000

 

RVA=00BBBFE4  SIZE=994

 

code splicing定位:

从OEP处往下搜索:E9

004013A8    - E9 53EC3703     jmp 03780000        // 这个就是code splicing的地址

 

ArmInline:

上ArmInline修复code splicing:

OD附加可以看到id:

Alt+M查看code splicing数据:

 

修复后就可以dump了。

 

接下来修复IAT乱序:

在idata找空间:

搜索kernel32.dll:

放在004B3D88处。

上ImportREC:OEP=000AE268,自动搜索,没有无效函数,修复。

 

运行ok,Borland Delphi 6.0 - 7.0。

脱壳后不再提示注册,应该没有功能限制。