首页
社区
课程
招聘
Armadillo 3.78 标准壳,写的详细,适合新手练习之用
发表于: 2005-11-21 11:42 6473

Armadillo 3.78 标准壳,写的详细,适合新手练习之用

2005-11-21 11:42
6473
原创:Armadillo 3.78 -> Silicon Realms Toolworks

软件名称:暂隐去,原因大家明白。
下载地址:
加壳方式:Armadillo 3.78 -> Silicon Realms Toolworks
破解工具:OllyDbg v1.10原版,ImportREC 1.6 Final,LordPE
脱壳作者:computer

老规矩忽略所有异常,在添加以下几个:这个在OD调试设置-异常  里面设置。
C0000005(ACCESS VIOLATION)
C000001D(ILLEGAL INSTRUCTION)
C000001E(INVALID LOCK SEQUENCE)
C0000096(PRIVILEGED INSTRUCTION)
用OD载入,先下BP OpenMutexA断点shift+F9运行

7C80EC1B > 8BFF             MOV EDI,EDI               断在这里。
7C80EC1D   55               PUSH EBP
7C80EC1E   8BEC             MOV EBP,ESP
7C80EC20   51               PUSH ECX
7C80EC21   51               PUSH ECX
7C80EC22   837D 10 00       CMP DWORD PTR SS:[EBP+10],0
7C80EC26   56               PUSH ESI
7C80EC27   0F84 7A500300    JE kernel32.7C843CA7
7C80EC2D   64:A1 18000000   MOV EAX,DWORD PTR FS:[18]
7C80EC33   FF75 10          PUSH DWORD PTR SS:[EBP+10]
7C80EC36   8DB0 F80B0000    LEA ESI,DWORD PTR DS:[EAX+BF8]
7C80EC3C   8D45 F8          LEA EAX,DWORD PTR SS:[EBP-8]
7C80EC3F   50               PUSH EAX
7C80EC40   FF15 8C10807C    CALL DWORD PTR DS:[<&ntdll.RtlInitAnsiSt>; ntdll.RtlInitAnsiString

看到堆栈
0012D778   0046ABBD  /CALL 到 OpenMutexA
0012D77C   001F0001  |Access = 1F0001
0012D780   00000000  |Inheritable = FALSE
0012D784   0012DDB8  \MutexName = "A84::DAB632EF5A"
0012D788   0012FF04
0012D78C   00000000
0012D790   0047ED5D  ykyManua.0047ED5D

Ctrl+G 401000 键入以下代码
00401000     60                  pushad  
00401001     9C                  pushfd  
00401002     68 B4FB1200         push 0012DDB8      ★   这里一定要注意,是写堆栈里看到的值
00401007     33C0                xor eax,eax  
00401009     50                  push eax  
0040100A     50                  push eax  
0040100B     E8 B4B2A577         call kernel32.CreateMutexA
00401010     9D                  popfd  
00401011     61                  popad  
00401012     E9 33F7A577         jmp kernel32.OpenMutexA

在401000处新建起源,右键-》此处新建EIP
F9运行,再次中断在OpenMutexA处,取消断点。

再次Ctrl+G 401000
撤消刚才做的选择,右键-》撤消选择  或者改成和ADD BYTE PTR DS:[EAX],AL就可以了。

2、下GetModuleHandleA断点F9运行
7C80B529 k>  8BFF                mov edi,edi                      断在这里,取消断点,断点重新设在下面
7C80B52B     55                  push ebp
7C80B52C     8BEC                mov ebp,esp
7C80B52E     837D 08 00          cmp dword ptr ss:[ebp+8],0
7C80B532     74 18               je short kernel32.7C80B54C        在这里下断后再按F9运行堆栈里内容为下面★2

     按F9,注意堆栈里内容
     0012CE48   5D175394  /CALL 到 GetModuleHandleA 来自 5D17538E
     0012CE4C   5D1753E0  \pModule = "kernel32.dll"
     0012CE50   5D1E2B38
     0012CE54   00000000
     0012CE58   5D170000
     0012CE5C   7C812972  返回到 kernel32.7C812972 来自 ntdll.RtlCreateHeap

★2

0012CE44  /0012CE7C
0012CE48  |5D175394  返回到 5D175394 来自 kernel32.GetModuleHandleA
0012CE4C  |5D1753E0  ASCII "kernel32.dll"
0012CE50  |5D1E2B38
0012CE54  |00000000
0012CE58  |5D170000
0012CE5C  |7C812972  返回到 kernel32.7C812972 来自 ntdll.RtlCreateHeap

F9运行堆栈里内容为下面
0012CF04  /0012CF20
0012CF08  |77F45BD8  返回到 SHLWAPI.77F45BD8 来自 kernel32.GetModuleHandleA
0012CF0C  |77F4501C  ASCII "KERNEL32.DLL"
0012CF10  |00000001
0012CF14  |77F40000  SHLWAPI.77F40000
0012CF18  |00000000
0012CF1C  |0000B6D2
0012CF20  ]0012CF34

F9运行堆栈里内容为下面
0012D718   0012D780
0012D71C   00469D13  ykyManua.00469D13
0012D720   00000000
0012D724   0000FFFF
0012D728   00B26C62
0012D72C   004D6BCC  ykyManua.004D6BCC
0012D730   00000000
0012D734   004B5000  ASCII "PDATA000"
0012D738   00495500  ASCII "rdinal %d"

F9运行堆栈里内容为下面
00128CE0  /0012CF48
00128CE4  |00B404D2  返回到 00B404D2 来自 kernel32.GetModuleHandleA
00128CE8  |00B52D40  ASCII "kernel32.dll"
00128CEC  |00B53F30  ASCII "VirtualAlloc"
00128CF0  |00000001
00128CF4  |00374B10
00128CF8  |00000000

F9运行堆栈里内容为下面
00128CE0  /0012CF48
00128CE4  |00B404EF  返回到 00B404EF 来自 kernel32.GetModuleHandleA
00128CE8  |00B52D40  ASCII "kernel32.dll"
00128CEC  |00B53F24  ASCII "VirtualFree"
00128CF0  |00000001
00128CF4  |00374B10
00128CF8  |00000000

F9运行堆栈里内容为下面
00128A58  /00128CE4
00128A5C  |00B29900  返回到 00B29900 来自 kernel32.GetModuleHandleA             看到这里就是返回时机了,记住00B29900
00128A60  |00128B98  ASCII "kernel32.dll"                                 
00128A64  |00000000
00128A68  |CF480000
00128A6C  |2B050012
00128A70  |80000000

此时,取消断点,ALT+F9执行到用户代码
00B29900   8B0D 0881B500    MOV ECX,DWORD PTR DS:[B58108]
00B29906   89040E           MOV DWORD PTR DS:[ESI+ECX],EAX
00B29909   A1 0881B500      MOV EAX,DWORD PTR DS:[B58108]
00B2990E   393C06           CMP DWORD PTR DS:[ESI+EAX],EDI
00B29911   75 16            JNZ SHORT 00B29929
00B29913   8D85 B4FEFFFF    LEA EAX,DWORD PTR SS:[EBP-14C]
00B29919   50               PUSH EAX
00B2991A   FF15 D4D0B400    CALL DWORD PTR DS:[B4D0D4]               ; kernel32.LoadLibraryA
00B29920   8B0D 0881B500    MOV ECX,DWORD PTR DS:[B58108]
00B29926   89040E           MOV DWORD PTR DS:[ESI+ECX],EAX
00B29929   A1 0881B500      MOV EAX,DWORD PTR DS:[B58108]
00B2992E   393C06           CMP DWORD PTR DS:[ESI+EAX],EDI
00B29931   0F84 AD000000    JE 00B299E4                                 改此处为JMP
00B29937   33C9             XOR ECX,ECX
00B29939   8B03             MOV EAX,DWORD PTR DS:[EBX]
00B2993B   3938             CMP DWORD PTR DS:[EAX],EDI
00B2993D   74 06            JE SHORT 00B29945
00B2993F   41               INC ECX
00B29940   83C0 0C          ADD EAX,0C
00B29943  ^EB F6            JMP SHORT 00B2993B

第三、下BP GetCurrentThreadId断点 按F9运行
注意看堆栈

0012831C   73391E36  /CALL 到 GetCurrentThreadId 来自 73391E30
00128320   00000001
00128324   73391C1A  返回到 73391C1A 来自 73391DE2
00128328   73391B60  返回到 73391B60 来自 73391B8C
0012832C   73390000
00128330   00000001

F9运行堆栈里内容为下面
001282FC   7339353F  /CALL 到 GetCurrentThreadId 来自 73393539
00128300   00000000
00128304   734A0470
00128308   734A04D8
0012830C  /00128324
00128310  |73393519  返回到 73393519 来自 73393525
00128314  |734A0470
00128318  |73393188  返回到 73393188 来自 73393511

F9运行堆栈里内容为下面
00128558   73DC9AD7  /CALL 到 GetCurrentThreadId 来自 73DC9AD1
0012855C   00000000
00128560   73E08100
00128564   73D30000
00128568   73E106B0
0012856C   001286D0  指针到下一个 SEH 记录
00128570   73DD05B4  SE 句柄
00128574   00000000

F9运行堆栈里内容为下面
00126EE8   77DAE5D5  /CALL 到 GetCurrentThreadId 来自 ADVAPI32.77DAE5CF
00126EEC  /00126F08
00126EF0  |77DAE5AB  返回到 ADVAPI32.77DAE5AB 来自 ADVAPI32.77DAE5CA
00126EF4  |77E16100  ADVAPI32.77E16100
00126EF8  |00000142
00126EFC  |00126F40
00126F00  |001270E4
00126F04  |77E16100  ADVAPI32.77E16100

F9运行堆栈里内容为下面
00126D18   77DAE900  /CALL 到 GetCurrentThreadId 来自 ADVAPI32.77DAE8FA
00126D1C   00126F34
00126D20   00126F40
00126D24   77E16104  ADVAPI32.77E16104
00126D28   0014EAA0
00126D2C   00000000
00126D30   00000000

F9运行堆栈里内容为下面
00126CD8   77DAEAB0  /CALL 到 GetCurrentThreadId 来自 ADVAPI32.77DAEAAA
00126CDC   00000000
00126CE0   0014EEC0
00126CE4   77E16100  ADVAPI32.77E16100
00126CE8   0014EEE8
00126CEC   0014F018

F9运行堆栈里内容为下面
00126EE8   77DAE5D5  /CALL 到 GetCurrentThreadId 来自 ADVAPI32.77DAE5CF
00126EEC  /00126F08
00126EF0  |77DAE5AB  返回到 ADVAPI32.77DAE5AB 来自 ADVAPI32.77DAE5CA
00126EF4  |77E16100  ADVAPI32.77E16100
00126EF8  |00000142
00126EFC  |00126F40
00126F00  |001270E4

F9运行堆栈里内容为下面
00126F08   77DAE80D  /CALL 到 GetCurrentThreadId 来自 ADVAPI32.77DAE807
00126F0C   8000001A
00126F10   77E16100  ADVAPI32.77E16100
00126F14  /00126F38
00126F18  |77DAE82F  返回到 ADVAPI32.77DAE82F 来自 ADVAPI32.77DAD288
00126F1C  |77E16100  ADVAPI32.77E16100
00126F20  |00000142

出现错误提示,按确定,再SHIFT+F9
00128398   73DC9AD7  /CALL 到 GetCurrentThreadId 来自 MFC42.73DC9AD1
0012839C   014B2650  ykyCompu.014B2650
001283A0   01447F58  ykyCompu.01447F58
001283A4   013E0000  ykyCompu.013E0000
001283A8   01447F58  ykyCompu.01447F58
001283AC   00128588  指针到下一个 SEH 记录
001283B0   73DD05B4  SE 句柄

F9运行堆栈里内容为下面
00126EE8   77DAE5D5  /CALL 到 GetCurrentThreadId 来自 ADVAPI32.77DAE5CF
00126EEC  /00126F08
00126EF0  |77DAE5AB  返回到 ADVAPI32.77DAE5AB 来自 ADVAPI32.77DAE5CA
00126EF4  |77E16100  ADVAPI32.77E16100
00126EF8  |00000156
00126EFC  |00126F40

F9运行堆栈里内容为下面

00126D18   77DAE900  /CALL 到 GetCurrentThreadId 来自 ADVAPI32.77DAE8FA
00126D1C   00126F34
00126D20   00126F40
00126D24   77E16104  ADVAPI32.77E16104
00126D28   00150FE0
00126D2C   00000000

F9运行堆栈里内容为下面
00126CD8   77DAEAB0  /CALL 到 GetCurrentThreadId 来自 ADVAPI32.77DAEAAA
00126CDC   00000000
00126CE0   00151400
00126CE4   77E16100  ADVAPI32.77E16100
00126CE8   00151428

F9运行堆栈里内容为下面

00126EE8   77DAE5D5  /CALL 到 GetCurrentThreadId 来自 ADVAPI32.77DAE5CF
00126EEC  /00126F08
00126EF0  |77DAE5AB  返回到 ADVAPI32.77DAE5AB 来自 ADVAPI32.77DAE5CA
00126EF4  |77E16100  ADVAPI32.77E16100
00126EF8  |00000156
00126EFC  |00126F40

F9运行堆栈里内容为下面

00126F08   77DAE80D  /CALL 到 GetCurrentThreadId 来自 ADVAPI32.77DAE807
00126F0C   8000001A
00126F10   77E16100  ADVAPI32.77E16100
00126F14  /00126F38
00126F18  |77DAE82F  返回到 ADVAPI32.77DAE82F 来自 ADVAPI32.77DAD288
00126F1C  |77E16100  ADVAPI32.77E16100

出现错误提示,按确定,再SHIFT+F9
00128398   73DC9AD7  /CALL 到 GetCurrentThreadId 来自 MFC42.73DC9AD1
0012839C   01632650  SpringDl.01632650
001283A0   015DCF18  SpringDl.015DCF18
001283A4   015C0000  SpringDl.015C0000
001283A8   015DCF18  SpringDl.015DCF18
001283AC   00128588  指针到下一个 SEH 记录
001283B0   73DD05B4  SE 句柄

F9运行堆栈里内容为下面
00126EE8   77DAE5D5  /CALL 到 GetCurrentThreadId 来自 ADVAPI32.77DAE5CF
00126EEC  /00126F08
00126EF0  |77DAE5AB  返回到 ADVAPI32.77DAE5AB 来自 ADVAPI32.77DAE5CA
00126EF4  |77E16100  ADVAPI32.77E16100
00126EF8  |0000016A

F9运行堆栈里内容为下面
00126D18   77DAE900  /CALL 到 GetCurrentThreadId 来自 ADVAPI32.77DAE8FA
00126D1C   00126F34
00126D20   00126F40
00126D24   77E16104  ADVAPI32.77E16104
00126D28   00153530

F9运行堆栈里内容为下面
00126CD8   77DAEAB0  /CALL 到 GetCurrentThreadId 来自 ADVAPI32.77DAEAAA
00126CDC   00000000
00126CE0   00153950
00126CE4   77E16100  ADVAPI32.77E16100
00126CE8   00153978
00126CEC   00153AA8

F9运行堆栈里内容为下面
00126EE8   77DAE5D5  /CALL 到 GetCurrentThreadId 来自 ADVAPI32.77DAE5CF
00126EEC  /00126F08
00126EF0  |77DAE5AB  返回到 ADVAPI32.77DAE5AB 来自 ADVAPI32.77DAE5CA
00126EF4  |77E16100  ADVAPI32.77E16100
00126EF8  |0000016A

F9运行堆栈里内容为下面
00126F08   77DAE80D  /CALL 到 GetCurrentThreadId 来自 ADVAPI32.77DAE807
00126F0C   8000001A
00126F10   77E16100  ADVAPI32.77E16100
00126F14  /00126F38
00126F18  |77DAE82F  返回到 ADVAPI32.77DAE82F 来自 ADVAPI32.77DAD288
00126F1C  |77E16100  ADVAPI32.77E16100
00126F20  |0000016A
00126F24  |00000001

出现错误提示,按确定,再SHIFT+F9
00128398   73DC9AD7  /CALL 到 GetCurrentThreadId 来自 MFC42.73DC9AD1
0012839C   017D9650  QueryCal.017D9650
001283A0   017777B0  QueryCal.017777B0
001283A4   01720000  QueryCal.01720000
001283A8   017777B0  QueryCal.017777B0
001283AC   00128588  指针到下一个 SEH 记录
001283B0   73DD05B4  SE 句柄

F9运行堆栈里内容为下面
0012D770   00B4893A  /CALL 到 GetCurrentThreadId 来自 00B48934
0012D774   0012FF04
0012D778   00000000
0012D77C   0047ED5D  ykyManua.0047ED5D
0012D780   0046B256  ykyManua.0046B256
0012D784   0049B2C0  ykyManua.0049B2C0
0012D788   0012FF04
0012D78C   00000000
0012D790   0047ED5D  ykyManua.0047ED5D

F9运行堆栈里内容为下面
0012D760   00B29C29  /CALL 到 GetCurrentThreadId 来自 00B29C23                看到了吧,和上面记的那个地址相近了,就到这里吧
0012D764   00000000
0012D768   0000016C
0012D76C   0012DEE0
0012D770   00B48944  返回到 00B48944 来自 00B29BF0
0012D774   0012FF04
0012D778   00000000
0012D77C   0047ED5D  ykyManua.0047ED5D

取消断点ALT+F9返回这里:  已经没有技巧了,慢慢跟吧。直到00B489CD
00B29C29   50               PUSH EAX
00B29C2A   FF75 FC          PUSH DWORD PTR SS:[EBP-4]
00B29C2D   E8 05000000      CALL 00B29C37
00B29C32   83C4 0C          ADD ESP,0C
00B29C35   C9               LEAVE
00B29C36   C3               RETN
00B29C37   6A 14            PUSH 14
00B29C39   E8 AC240200      CALL 00B4C0EA                            ; JMP to msvcrt.??2@YAPAXI@Z
00B29C3E   85C0             TEST EAX,EAX
00B29C40   59               POP ECX
00B29C41   74 13            JE SHORT 00B29C56
00B29C43   FF7424 0C        PUSH DWORD PTR SS:[ESP+C]
00B29C47   8BC8             MOV ECX,EAX
00B29C49   FF7424 0C        PUSH DWORD PTR SS:[ESP+C]
00B29C4D   FF7424 0C        PUSH DWORD PTR SS:[ESP+C]
00B29C51   E8 CDFEFFFF      CALL 00B29B23

00B489AF   FF76 04          PUSH DWORD PTR DS:[ESI+4]
00B489B2   FF76 08          PUSH DWORD PTR DS:[ESI+8]
00B489B5   6A 00            PUSH 0
00B489B7   E8 85FAFEFF      CALL 00B38441
00B489BC   50               PUSH EAX
00B489BD   A1 78C5B500      MOV EAX,DWORD PTR DS:[B5C578]
00B489C2   8B48 44          MOV ECX,DWORD PTR DS:[EAX+44]
00B489C5   3348 40          XOR ECX,DWORD PTR DS:[EAX+40]
00B489C8   3348 34          XOR ECX,DWORD PTR DS:[EAX+34]
00B489CB   2BF9             SUB EDI,ECX
00B489CD   FFD7             CALL EDI                                      这里,直接F7跟进吧。
00B489CF   8BD8             MOV EBX,EAX
00B489D1   5F               POP EDI
00B489D2   8BC3             MOV EAX,EBX
00B489D4   5E               POP ESI
00B489D5   5B               POP EBX
00B489D6   C3               RETN
00B489D7   837C24 08 01     CMP DWORD PTR SS:[ESP+8],1
00B489DC   75 14            JNZ SHORT 00B489F2
00B489DE   68 A8C1B500      PUSH 0B5C1A8
00B489E3   FF15 9CD2B400    CALL DWORD PTR DS:[B4D29C]               ; kernel32.InitializeCriticalSection
00B489E9   8B4424 04        MOV EAX,DWORD PTR SS:[ESP+4]
00B489ED   A3 70C5B500      MOV DWORD PTR DS:[B5C570],EAX
00B489F2   6A 01            PUSH 1

F7跟进后到这里,一片红云,OK了。还等 什么,lordPE,全部DUMP。这还没有完。看下面。

0044949E   55               PUSH EBP                              44949E-400000=4949E  这就是OPE入口了。
0044949F   8BEC             MOV EBP,ESP
004494A1   6A FF            PUSH -1
004494A3   68 D8E44400      PUSH ykyManua.0044E4D8
004494A8   68 FC954400      PUSH ykyManua.004495FC                   ; JMP to msvcrt._except_handler3
004494AD   64:A1 00000000   MOV EAX,DWORD PTR FS:[0]
004494B3   50               PUSH EAX
004494B4   64:8925 00000000 MOV DWORD PTR FS:[0],ESP
004494BB   83EC 68          SUB ESP,68

注意此时不要关OD,直接打开ImprotREC,选择我们要脱的进程。然后输入OEP,4949E。自动搜索IAT-》获取输入表,有一个假指针-》点显示无效函数-》右键-》剪切指针-》修复抓取文件。呵呵~~成功

用PEID查,还有Armadillo 1.xx - 2.xx的壳,用FI查就没有了,运行,没有问题,一切OK.

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 440
活跃值: (737)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
2
沙发
2005-11-21 12:11
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
3
2005-11-22 07:28
0
雪    币: 508
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
!!!!!!!!!!!!!!
2005-12-22 20:56
0
雪    币: 403
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最初由 computersfan 发布
原创:Armadillo 3.78 -> Silicon Realms Toolworks

注意此时不要关OD,直接打开ImprotREC,选择我们要脱的进程。然后输入OEP,4949E。自动搜索IAT-》获取输入表,有一个假指针-》点显示无效函数-》右键-》剪切指针-》修复抓取文件。呵呵~~成功


我今天也脱了一程序,同样也是一个假指针,可是点显示无效函数后那个指针就展开了,同时右键也没法用了,如果这时收拢这个指针可以使用右键,而在那个指针上剪切指针后好像没有效果,然后修复还是提示出错.请大虾指教呀.
2005-12-25 21:53
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
写得很好!谢谢
2005-12-26 11:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
学习中...
2005-12-26 17:15
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
学习脱Armadillo中..............
2006-1-1 14:18
0
雪    币: 117
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
老规矩忽略所有异常,在添加以下几个:这个在OD调试设置-异常  里面设置。
C0000005(ACCESS VIOLATION)
C000001D(ILLEGAL INSTRUCTION)
C000001E(INVALID LOCK SEQUENCE)
C0000096(PRIVILEGED INSTRUCTION)

不是很明白,为什么要添加这几个异常
2006-1-1 16:41
0
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
10
最初由 computersfan 发布
原创:Armadillo 3.78 -> Silicon Realms Toolworks
........
用PEID查,还有Armadillo 1.xx - 2.xx的壳,用FI查就没有了,运行,没有问题,一切OK.
........


引用一下fly曾给我解决的同样问题

试试PETools->PE Ediotr
修改Major Linker Version、Minor Linker Version为05、0C
2006-1-1 16:49
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zyq
11
F9运行堆栈里内容为下面
00128A58  /00128CE4
00128A5C  |00B29900  返回到 00B29900 来自 kernel32.GetModuleHandleA             看到这里就是返回时机了,记住00B29900

怎么看出这里就是返回时机呢?
2006-2-2 23:16
0
游客
登录 | 注册 方可回帖
返回
//