欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]Armadillo 1.xx - 2.xx 单进程手脱

[原创]Armadillo 1.xx - 2.xx 单进程手脱

一。找oep
Armadillo 1.xx - 2.xx 单进程壳相对简单,高手略过。
先忽略所有异常,直接运行,发现异常非常多。最后一次异常不太可能。
改用rsrc断点的方法。
alt+m 打开内存镜像,在.rsrc段下断。shift+f9,
然后再次alt+m打开内存镜像,在00401000段下断。shift+f9到oep.

004D12D4     55               push ebp

004D12D5     8BEC             mov ebp,esp

004D12D7     83C4 F0          add esp,-10

004D12DA     B8 0C0E4D00      mov eax,XDeskWea.004D0E0C

004D12DF     E8 004EF3FF      call XDeskWea.004060E4

loadpe,修正镜像大小,完全脱壳。
二。修复iat
importrec显示无效,修复级别1,2,3都试过,还是不行,看来需要手动修复。
iat起始地址为4db168,下硬件写入断点,重新加载,运行。
第一次断在
00C2DF43     F3:A5            rep movs dword ptr es:[edi],dword ptr ds:[esi]
数据窗口:
004DB168  000DB93A
还没到iat写入点。再f9.发现iat已经写入。
00C2A6FD     6A 01            push 1

00C2A6FF     58               pop eax

00C2A700     85C0             test eax,eax

00C2A702     0F84 7B020000    je 00C2A983

00C2A708     83A5 94E7FFFF 00 and dword ptr ss:[ebp-186C],0                    ; 将上一次存放的iat清空

00C2A70F     8B85 94ECFFFF    mov eax,dword ptr ss:[ebp-136C]                  ; 取得iat函数名

00C2A715     0FBE00           movsx eax,byte ptr ds:[eax]

00C2A718     85C0             test eax,eax

00C2A71A     0F85 0C010000    jnz 00C2A82C                                     ; 判断函数名首字母是否为0

00C2A720     C785 44E7FFFF B2>mov dword ptr ss:[ebp-18BC],0C162B2

00C2A72A     C785 48E7FFFF 77>mov dword ptr ss:[ebp-18B8],0C16377

00C2A734     C785 4CE7FFFF 9A>mov dword ptr ss:[ebp-18B4],0C1639A

00C2A73E     C785 50E7FFFF D8>mov dword ptr ss:[ebp-18B0],0C162D8

00C2A748     C785 54E7FFFF 15>mov dword ptr ss:[ebp-18AC],0C16315

00C2A752     C785 58E7FFFF 1A>mov dword ptr ss:[ebp-18A8],0C1631A

00C2A75C     C785 5CE7FFFF 1F>mov dword ptr ss:[ebp-18A4],0C1631F

00C2A766     C785 60E7FFFF 24>mov dword ptr ss:[ebp-18A0],0C16324

00C2A770     C785 64E7FFFF 4A>mov dword ptr ss:[ebp-189C],0C1634A

00C2A77A     C785 68E7FFFF 70>mov dword ptr ss:[ebp-1898],0C16370

00C2A784     C785 6CE7FFFF B2>mov dword ptr ss:[ebp-1894],0C162B2

00C2A78E     C785 70E7FFFF 77>mov dword ptr ss:[ebp-1890],0C16377

00C2A798     C785 74E7FFFF 9A>mov dword ptr ss:[ebp-188C],0C1639A

00C2A7A2     C785 78E7FFFF D8>mov dword ptr ss:[ebp-1888],0C162D8

00C2A7AC     C785 7CE7FFFF AD>mov dword ptr ss:[ebp-1884],0C163AD

00C2A7B6     C785 80E7FFFF B2>mov dword ptr ss:[ebp-1880],0C163B2

00C2A7C0     C785 84E7FFFF B7>mov dword ptr ss:[ebp-187C],0C163B7

00C2A7CA     C785 88E7FFFF 24>mov dword ptr ss:[ebp-1878],0C16324

00C2A7D4     C785 8CE7FFFF 4A>mov dword ptr ss:[ebp-1874],0C1634A

00C2A7DE     C785 90E7FFFF BC>mov dword ptr ss:[ebp-1870],0C163BC

00C2A7E8     8D8D 68ECFFFF    lea ecx,dword ptr ss:[ebp-1398]

00C2A7EE     E8 4D68FEFF      call 00C11040

00C2A7F3     0FB6C0           movzx eax,al

00C2A7F6     99               cdq

00C2A7F7     6A 14            push 14

00C2A7F9     59               pop ecx

00C2A7FA     F7F9             idiv ecx

00C2A7FC     8B85 A8E9FFFF    mov eax,dword ptr ss:[ebp-1658]

00C2A802     8B8C95 44E7FFFF  mov ecx,dword ptr ss:[ebp+edx*4-18BC]

00C2A809     8908             mov dword ptr ds:[eax],ecx

00C2A80B     8B85 A8E9FFFF    mov eax,dword ptr ss:[ebp-1658]

00C2A811     83C0 04          add eax,4

00C2A814     8985 A8E9FFFF    mov dword ptr ss:[ebp-1658],eax

00C2A81A     8B85 94ECFFFF    mov eax,dword ptr ss:[ebp-136C]

00C2A820     40               inc eax

00C2A821     8985 94ECFFFF    mov dword ptr ss:[ebp-136C],eax

00C2A827     E9 57010000      jmp 00C2A983

00C2A82C     8B85 94ECFFFF    mov eax,dword ptr ss:[ebp-136C]

00C2A832     0FB600           movzx eax,byte ptr ds:[eax]

00C2A835     3D FF000000      cmp eax,0FF                                      ; 再一次判断iat首字母是否为0ff

00C2A83A     0F85 A7000000    jnz 00C2A8E7

00C2A840     8B85 94ECFFFF    mov eax,dword ptr ss:[ebp-136C]

00C2A846     40               inc eax

00C2A847     8985 94ECFFFF    mov dword ptr ss:[ebp-136C],eax

00C2A84D     8B85 94ECFFFF    mov eax,dword ptr ss:[ebp-136C]

00C2A853     66:8B00          mov ax,word ptr ds:[eax]

00C2A856     66:8985 40E7FFFF mov word ptr ss:[ebp-18C0],ax

00C2A85D     8B85 94ECFFFF    mov eax,dword ptr ss:[ebp-136C]

00C2A863     40               inc eax

00C2A864     40               inc eax

00C2A865     8985 94ECFFFF    mov dword ptr ss:[ebp-136C],eax

00C2A86B     0FB785 40E7FFFF  movzx eax,word ptr ss:[ebp-18C0]

00C2A872     50               push eax

00C2A873     FFB5 BCE9FFFF    push dword ptr ss:[ebp-1644]

00C2A879     E8 A0B1FEFF      call 00C15A1E

00C2A87E     8985 94E7FFFF    mov dword ptr ss:[ebp-186C],eax

00C2A884     83BD 94E7FFFF 00 cmp dword ptr ss:[ebp-186C],0

00C2A88B     75 58            jnz short 00C2A8E5

00C2A88D     FF15 C050C300    call dword ptr ds:[C350C0]                       ; ntdll.RtlGetLastWin32Error

00C2A893     83F8 32          cmp eax,32

00C2A896     75 0A            jnz short 00C2A8A2

00C2A898     C785 94E7FFFF CA>mov dword ptr ss:[ebp-186C],0C158CA

00C2A8A2     83BD 94E7FFFF 00 cmp dword ptr ss:[ebp-186C],0

00C2A8A9     75 3A            jnz short 00C2A8E5

00C2A8AB     8B45 08          mov eax,dword ptr ss:[ebp+8]

00C2A8AE     8B00             mov eax,dword ptr ds:[eax]

00C2A8B0     C700 03000000    mov dword ptr ds:[eax],3

00C2A8B6     FF15 C050C300    call dword ptr ds:[C350C0]                       ; ntdll.RtlGetLastWin32Error

00C2A8BC     50               push eax

00C2A8BD     0FB785 40E7FFFF  movzx eax,word ptr ss:[ebp-18C0]

00C2A8C4     50               push eax

00C2A8C5     FFB5 A0E8FFFF    push dword ptr ss:[ebp-1760]

00C2A8CB     68 B090C300      push 0C390B0                                     ; ASCII "File "%s", ordinal %d (error %d)"

00C2A8D0     8B45 08          mov eax,dword ptr ss:[ebp+8]

00C2A8D3     FF70 04          push dword ptr ds:[eax+4]

00C2A8D6     E8 D13F0000      call 00C2E8AC

00C2A8DB     83C4 14          add esp,14

00C2A8DE     33C0             xor eax,eax

00C2A8E0     E9 A00C0000      jmp 00C2B585

00C2A8E5     EB 7A            jmp short 00C2A961

00C2A8E7     8B85 94ECFFFF    mov eax,dword ptr ss:[ebp-136C]

00C2A8ED     8985 3CE7FFFF    mov dword ptr ss:[ebp-18C4],eax

00C2A8F3     6A 00            push 0

00C2A8F5     FFB5 94ECFFFF    push dword ptr ss:[ebp-136C]

00C2A8FB     E8 F03E0000      call 00C2E7F0                                    ; 取得下个函数名

00C2A900     59               pop ecx

00C2A901     59               pop ecx

00C2A902     40               inc eax

00C2A903     8985 94ECFFFF    mov dword ptr ss:[ebp-136C],eax                  ; 将下个函数名保存

00C2A909     FFB5 3CE7FFFF    push dword ptr ss:[ebp-18C4]                     ; 可以dd eax,查看iat的函数列表

00C2A90F     FFB5 BCE9FFFF    push dword ptr ss:[ebp-1644]

00C2A915     E8 04B1FEFF      call 00C15A1E                                    ; 关键函数,取得iat地址

00C2A91A     8985 94E7FFFF    mov dword ptr ss:[ebp-186C],eax

00C2A920     83BD 94E7FFFF 00 cmp dword ptr ss:[ebp-186C],0

00C2A927     75 38            jnz short 00C2A961

00C2A929     8B45 08          mov eax,dword ptr ss:[ebp+8]

00C2A92C     8B00             mov eax,dword ptr ds:[eax]

00C2A92E     C700 03000000    mov dword ptr ds:[eax],3

00C2A934     FF15 C050C300    call dword ptr ds:[C350C0]                       ; ntdll.RtlGetLastWin32Error

00C2A93A     50               push eax

00C2A93B     FFB5 3CE7FFFF    push dword ptr ss:[ebp-18C4]

00C2A941     FFB5 A0E8FFFF    push dword ptr ss:[ebp-1760]

00C2A947     68 8C90C300      push 0C3908C                                     ; ASCII "File "%s", function "%s" (error %d)"

00C2A94C     8B45 08          mov eax,dword ptr ss:[ebp+8]

00C2A94F     FF70 04          push dword ptr ds:[eax+4]

00C2A952     E8 553F0000      call 00C2E8AC

00C2A957     83C4 14          add esp,14

00C2A95A     33C0             xor eax,eax

00C2A95C     E9 240C0000      jmp 00C2B585

00C2A961     8B85 A8E9FFFF    mov eax,dword ptr ss:[ebp-1658]

00C2A967     8B8D 94E7FFFF    mov ecx,dword ptr ss:[ebp-186C]

00C2A96D     8908             mov dword ptr ds:[eax],ecx                       ; iat写入

00C2A96F     8B85 A8E9FFFF    mov eax,dword ptr ss:[ebp-1658]                  ; ====>硬件断点

00C2A975     83C0 04          add eax,4

00C2A978     8985 A8E9FFFF    mov dword ptr ss:[ebp-1658],eax

00C2A97E   ^ E9 7AFDFFFF      jmp 00C2A6FD

需进入关键函数,继续分析
f7步入后会有比较多的je je jump, 可以直接在jump下行f4。
一直f8单步向下跟,遇到seh断续f8.跟到有好几个nop语句的地方
00C15B27     E8 35B8FFFF      call 00C11361                                    ; 解码后面的代码

00C15B2C     8B0D 5813C400    mov ecx,dword ptr ds:[C41358]

00C15B32     83C4 10          add esp,10

00C15B35     3BCF             cmp ecx,edi

00C15B37     74 13            je short 00C15B4C

00C15B39     8B01             mov eax,dword ptr ds:[ecx]

00C15B3B     3BC7             cmp eax,edi

00C15B3D     74 0D            je short 00C15B4C

00C15B3F     8B15 8C1BC400    mov edx,dword ptr ds:[C41B8C]

00C15B45     0110             add dword ptr ds:[eax],edx

00C15B47     83C1 04          add ecx,4

00C15B4A   ^ EB ED            jmp short 00C15B39

00C15B4C     90               nop

00C15B4D     90               nop

00C15B4E     90               nop

00C15B4F     90               nop

00C15B50     90               nop

00C15B51     33DB             xor ebx,ebx

00C15B53     897D FC          mov dword ptr ss:[ebp-4],edi

00C15B56     66:F745 0E FFFF  test word ptr ss:[ebp+E],0FFFF

00C15B5C     75 03            jnz short 00C15B61

00C15B5E     8B5D 0C          mov ebx,dword ptr ss:[ebp+C]

00C15B61     57               push edi

00C15B62     FF15 A4500210    call dword ptr ds:[100250A4]

00C15B68     3945 08          cmp dword ptr ss:[ebp+8],eax

00C15B6B     75 07            jnz short 00C15B74

00C15B6D     B9 E873C300      mov ecx,0C373E8

00C15B72     EB 52            jmp short 00C15BC6

00C15B74     393D E079C300    cmp dword ptr ds:[C379E0],edi

00C15B7A     B9 E079C300      mov ecx,0C379E0

00C15B7F     0F84 93000000    je 00C15C18                                      ; 关键跳,中间是把函数加密。改为jmp

00C15B85     8B35 60D8C300    mov esi,dword ptr ds:[C3D860]

00C15B8B     A1 E018C400      mov eax,dword ptr ds:[C418E0]

00C15B90     F641 08 01       test byte ptr ds:[ecx+8],1

00C15B94     74 0E            je short 00C15BA4

00C15B96     8B50 5C          mov edx,dword ptr ds:[eax+5C]

00C15B99     3350 48          xor edx,dword ptr ds:[eax+48]

00C15B9C     3350 1C          xor edx,dword ptr ds:[eax+1C]

00C15B9F     F6C2 80          test dl,80

00C15BA2     75 13            jnz short 00C15BB7

00C15BA4     8B50 5C          mov edx,dword ptr ds:[eax+5C]

00C15BA7     3350 50          xor edx,dword ptr ds:[eax+50]

00C15BAA     3350 44          xor edx,dword ptr ds:[eax+44]

00C15BAD     3350 20          xor edx,dword ptr ds:[eax+20]

00C15BB0     3316             xor edx,dword ptr ds:[esi]

00C15BB2     3955 08          cmp dword ptr ss:[ebp+8],edx

00C15BB5     74 0C            je short 00C15BC3

00C15BB7     83C1 0C          add ecx,0C

00C15BBA     83C6 04          add esi,4

00C15BBD     3939             cmp dword ptr ds:[ecx],edi

00C15BBF   ^ 75 CF            jnz short 00C15B90

00C15BC1     EB 55            jmp short 00C15C18

00C15BC3     8B49 04          mov ecx,dword ptr ds:[ecx+4]

00C15BC6     3BCF             cmp ecx,edi

00C15BC8     74 4E            je short 00C15C18

00C15BCA     3979 08          cmp dword ptr ds:[ecx+8],edi

00C15BCD     8D71 08          lea esi,dword ptr ds:[ecx+8]

00C15BD0     74 46            je short 00C15C18

00C15BD2     66:3BDF          cmp bx,di

00C15BD5     74 06            je short 00C15BDD

00C15BD7     66:3B5E FC       cmp bx,word ptr ds:[esi-4]

00C15BDB     EB 28            jmp short 00C15C05

00C15BDD     8D85 F8FEFFFF    lea eax,dword ptr ss:[ebp-108]                   ; 加密函数名

00C15BE3     68 00010000      push 100

00C15BE8     50               push eax

00C15BE9     FF76 F8          push dword ptr ds:[esi-8]

00C15BEC     E8 4FE1FFFF      call 00C13D40                                    ; 下一个加密函数名

00C15BF1     8D85 F8FEFFFF    lea eax,dword ptr ss:[ebp-108]

00C15BF7     50               push eax

00C15BF8     FF75 0C          push dword ptr ss:[ebp+C]

00C15BFB     E8 50EE0100      call 00C34A50                                    ; 与加密函数名进行比较

00C15C00     83C4 14          add esp,14

00C15C03     85C0             test eax,eax

00C15C05     75 05            jnz short 00C15C0C

00C15C07     8B06             mov eax,dword ptr ds:[esi]

00C15C09     8945 FC          mov dword ptr ss:[ebp-4],eax

00C15C0C     83C6 0C          add esi,0C

00C15C0F     393E             cmp dword ptr ds:[esi],edi

00C15C11   ^ 75 BF            jnz short 00C15BD2

00C15C13     397D FC          cmp dword ptr ss:[ebp-4],edi

00C15C16     75 10            jnz short 00C15C28

00C15C18     FF75 0C          push dword ptr ss:[ebp+C]                        ; 这里才是真正获取iat的地方

00C15C1B     FF75 08          push dword ptr ss:[ebp+8]

00C15C1E     E8 B2FCFFFF      call 00C158D5

00C15C23     59               pop ecx

00C15C24     8945 FC          mov dword ptr ss:[ebp-4],eax

00C15C27     59               pop ecx

00C15C28     EB 03            jmp short 00C15C2D

00C15C2A     D6               salc

00C15C2B     D6               salc

00C15C2C     8A8B 0D5813C4    mov cl,byte ptr ds:[ebx+C413580D]

00C15C32     005E 3B          add byte ptr ds:[esi+3B],bl

00C15C35     CF               iretd

00C15C36     5B               pop ebx

00C15C37     74 13            je short 00C15C4C

00C15C39     8B01             mov eax,dword ptr ds:[ecx]

00C15C3B     3BC7             cmp eax,edi

00C15C3D     74 0D            je short 00C15C4C

00C15C3F     8B15 8C1BC400    mov edx,dword ptr ds:[C41B8C]

00C15C45     2910             sub dword ptr ds:[eax],edx

00C15C47     83C1 04          add ecx,4

00C15C4A   ^ EB ED            jmp short 00C15C39

改完关键跳后,直接运行。
再次使用importrec填入oep,获取输入表,剪切掉无效指针。修复。ok

上传的附件 XDeskWeather.part1.rar
XDeskWeather.part2.rar

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功