首页
社区
课程
招聘
这个的Armadillo壳怪怪的,是不是用了SDK
发表于: 2005-10-11 15:16 5934

这个的Armadillo壳怪怪的,是不是用了SDK

2005-10-11 15:16
5934
这个的Armadillo壳怪怪的,是不是用了SDK

软件名称:  ICC7 for AVR V7.03
软件类别:  AVR单片机C编译集成开发器
应用平台:  Win9x/NT/2000/XP
开 发 商:  df7K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3W2E0j5h3N6W2j5%4u0S2k6Y4c8Q4x3X3g2U0L8$3#2Q4x3V1j5`.
软件介绍:  AVR单片机C编译集成开发器
下载地址:  ftp://ftp.imagecraft.com/pub/pub/iccv7avr_demo.exe

【脱壳经验】:Armadillo壳只脱过《魔法转换(Magic Converter)》V4.3正式版,并成功。

【调试环境】:WinXP、flyODBG、PEiD、LordPE、ImportREC

―――――――――――――――――――――――――――――――――
【脱壳过程】:

首先用PEiD v0.93查壳得:Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks

运行软件用Windows任务管理器和LordPE并没发现双进程。

这里使用修改版OllyDbg中已更改Class为Explorer的调试器,
因为如果不这样就算用IsDebug插件去掉OllyDbg的调试器标志,已会使OD异常退出。

设置OllyDbg忽略所有其它异常选项。
―――――――――――――――――――――――――――――――――
一、寻找OEP+解码Dump

载入程序:
00691B53 >/$  55               push ebp
00691B54  |.  8BEC             mov ebp,esp
00691B56  |.  6A FF            push -1
00691B58  |.  68 F8BE6B00      push iccavrid.006BBEF8
00691B5D  |.  68 90186900      push iccavrid.00691890                        ;  SE 句柄安装
00691B62  |.  64:A1 00000000   mov eax,dword ptr fs:[0]
00691B68  |.  50               push eax
00691B69  |.  64:8925 00000000 mov dword ptr fs:[0],esp
00691B70  |.  83EC 58          sub esp,58
00691B73  |.  53               push ebx
00691B74  |.  56               push esi
00691B75  |.  57               push edi
00691B76  |.  8965 E8          mov dword ptr ss:[ebp-18],esp
00691B79  |.  FF15 88616B00    call near dword ptr ds:[<&KERNEL32.GetVersion>;  kernel32.GetVersion

寻找OEP我采用F8老实跟踪的方法,跟到以下
00F7DE04    FF76 04            push dword ptr ds:[esi+4]
00F7DE07    8B50 74            mov edx,dword ptr ds:[eax+74]
00F7DE0A    3350 4C            xor edx,dword ptr ds:[eax+4C]
00F7DE0D    FF76 08            push dword ptr ds:[esi+8]
00F7DE10    3350 28            xor edx,dword ptr ds:[eax+28]
00F7DE13    6A 00              push 0
00F7DE15    FF76 0C            push dword ptr ds:[esi+C]
00F7DE18    2BCA               sub ecx,edx
00F7DE1A    FFD1               call near ecx                                 ; iccavrid.00401000

到00401000后,感觉好象不是OEP,但以前的教程都基本上的找到call edx这类的就到OEP了
大家帮忙判断一下。
00401000    A1 10F65600        mov eax,dword ptr ds:[56F610]
00401005    C1E0 02            shl eax,2
00401008    A3 14F65600        mov dword ptr ds:[56F614],eax
0040100D    57                 push edi
0040100E    51                 push ecx
0040100F    33C0               xor eax,eax
00401011    BF CCF55800        mov edi,iccavrid.0058F5CC
00401016    B9 E4595B00        mov ecx,iccavrid.005B59E4
0040101B    3BCF               cmp ecx,edi
0040101D    76 05              jbe short iccavrid.00401024
0040101F    2BCF               sub ecx,edi
00401021    FC                 cld
00401022    F3:AA              rep stos byte ptr es:[edi]
00401024    59                 pop ecx
00401025    5F                 pop edi
00401026    52                 push edx
00401027    6A 00              push 0
00401029    E8 E6C61600        call iccavrid.0056D714                ;//实际上是加密了的GetModuleHandleA
0040102E    8BD0               mov edx,eax
00401030    E8 C7F01500        call iccavrid.005600FC
00401035    5A                 pop edx

到这里就当00401000为OEP吧!运行LordPE,完全Dump出子进程

―――――――――――――――――――――――――――――――――
二、输入表

我说它是不是用了SDK就在这里,因为输入表放的内存区块很怪。

重载程序
按照论坛上的教程使用he GetModuleHandle断点找到输入表加密位置
00F6524C    FF15 B840F800      call near dword ptr ds:[F840B8]               ; kernel32.GetModuleHandleA
00F65252    8B0D 3C1EF900      mov ecx,dword ptr ds:[F91E3C]
00F65258    89040E             mov dword ptr ds:[esi+ecx],eax
00F6525B    A1 3C1EF900        mov eax,dword ptr ds:[F91E3C]
00F65260    391C06             cmp dword ptr ds:[esi+eax],ebx
00F65263    75 16              jnz short 00F6527B
00F65265    8D85 B4FEFFFF      lea eax,dword ptr ss:[ebp-14C]
00F6526B    50                 push eax
00F6526C    FF15 B842F800      call near dword ptr ds:[F842B8]               ; kernel32.LoadLibraryA
00F65272    8B0D 3C1EF900      mov ecx,dword ptr ds:[F91E3C]
00F65278    89040E             mov dword ptr ds:[esi+ecx],eax
00F6527B    A1 3C1EF900        mov eax,dword ptr ds:[F91E3C]
00F65280    391C06             cmp dword ptr ds:[esi+eax],ebx
00F65283    0F84 2F010000      je 00F653B8                                ;//Magic Jump! 修改为:jmp 00E6AE2A ★
00F65289    33C9               xor ecx,ecx
00F6528B    8B07               mov eax,dword ptr ds:[edi]
00F6528D    3918               cmp dword ptr ds:[eax],ebx
00F6528F    74 06              je short 00F65297
00F65291    41                 inc ecx
00F65292    83C0 0C            add eax,0C
00F65295  ^ EB F6              jmp short 00F6528D

然后下断00401000,中断后查看输入表的确没加密了。
0056D6E4  - FF25 6C7F3700      jmp near dword ptr ds:[377F6C]                ; kernel32.GetFileSize
0056D6EA  - FF25 50783700      jmp near dword ptr ds:[377850]                ; kernel32.GetFileTime
0056D6F0  - FF25 D0783700      jmp near dword ptr ds:[3778D0]                ; kernel32.GetFileType
0056D6F6  - FF25 EC723700      jmp near dword ptr ds:[3772EC]                ; kernel32.GetFullPathNameA
0056D6FC  - FF25 90803700      jmp near dword ptr ds:[378090]                ; ntdll.RtlGetLastWin32Error
0056D702  - FF25 287A3700      jmp near dword ptr ds:[377A28]                ; kernel32.GetLocalTime
0056D708  - FF25 447A3700      jmp near dword ptr ds:[377A44]                ; kernel32.GetLocaleInfoA
0056D70E  - FF25 78733700      jmp near dword ptr ds:[377378]                ; kernel32.GetModuleFileNameA
0056D714  - FF25 C07E3700      jmp near dword ptr ds:[377EC0]                ; kernel32.GetModuleHandleA
0056D71A  - FF25 3C7D3700      jmp near dword ptr ds:[377D3C]                ; kernel32.GetOEMCP
0056D720  - FF25 247D3700      jmp near dword ptr ds:[377D24]                ; kernel32.GetOverlappedResult
0056D726  - FF25 AC733700      jmp near dword ptr ds:[3773AC]                ; kernel32.GetPrivateProfileIntA
0056D72C  - FF25 04813700      jmp near dword ptr ds:[378104]                ; kernel32.GetPrivateProfileStringA
0056D732  - FF25 7C783700      jmp near dword ptr ds:[37787C]                ; kernel32.GetProcAddress
0056D738  - FF25 F8743700      jmp near dword ptr ds:[3774F8]                ; kernel32.GetProfileStringA

00377350  77F1B605  GDI32.SetWinMetaFileBits
00377354  77EF94AD  GDI32.SetWindowOrgEx
00377358  77F245B9  GDI32.StartDocA
0037735C  00F666E2
00377360  77F06AA6  GDI32.StartPage
00377364  77EFC6FC  GDI32.StretchBlt
00377368  7C80EA66  kernel32.FileTimeToLocalFileTime
0037736C  00F665A5
00377370  7C865A14  kernel32.SetCommMask
00377374  77EFC449  GDI32.TextOutA
00377378  7C80B357  kernel32.GetModuleFileNameA
0037737C  77EF89AF  GDI32.UnrealizeObject

但是你们看它地址,相对于基地址00400000是负的啊!这个在ImportREC中怎么填RVA啊!

搞了很久了,到底是不是用了SDK将软件是壳完全融合成一体了啊!
是不是真得脱不了了啊!

大虾帮兄弟一把吧!

               LuYe
               2005-10-11

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 898
活跃值: (4054)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
论坛搜索:
ArmInline――Armadillo客户版Code Splicing+Import Table Elimination的简便修复方法
2005-10-11 15:43
0
雪    币: 275
活跃值: (466)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
多看看以前的教程吧。你没有修正引入表
2005-10-11 15:44
0
雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
那篇文章的Armadillo的输入表的相对位置也是负的。
那篇有人回复说是Armadillo 1.0的版本。
为什么不用keil51?
没必要在这上面花很多时间

最初由 luye 发布
这个的Armadillo壳怪怪的,是不是用了SDK

软件名称: ICC7 for AVR V7.03
软件类别: AVR单片机C编译集成开发器
应用平台: Win9x/NT/2000/XP
........
2005-10-11 17:13
0
雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
你用的什么公司的Avr

最初由 luye 发布
这个的Armadillo壳怪怪的,是不是用了SDK

软件名称: ICC7 for AVR V7.03
软件类别: AVR单片机C编译集成开发器
应用平台: Win9x/NT/2000/XP
........
2005-10-11 17:16
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最初由 fly 发布
论坛搜索:
ArmInline――Armadillo客户版Code Splicing+Import Table Elimination的简便修复方法


以前以为是Armadillo客户版软件的使用说明,所以就忽略过去了,也就是这篇文章没有看,其它的关于Armadillo脱壳的文章都收藏并读过了。
根据这篇文章DUMP成功,但目前还有点问题,进入主界面后就自动退出了,还没找到原因,正在分析中...
2005-10-11 17:46
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
最初由 limee 发布
那篇文章的Armadillo的输入表的相对位置也是负的。
那篇有人回复说是Armadillo 1.0的版本。
为什么不用keil51?
没必要在这上面花很多时间

........


没搞错吧!KEIL51是针对51系列单片机的,怎么可以开发AVR单片机呢!而且我做脱壳和破解也只是以学习为目的的,所以是有必要在这上面花时间的。

生产AVR单片机的只有Atmel公司,有Mega和Tiny系列,如ATmega16、ATmega128等等。
2005-10-11 17:50
0
雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
也许你需要自己另外想办法,那篇文章脱法不够严谨。
我觉得你还是分析一下那段相对负位移的代码,也许会有收获

最初由 luye 发布


以前以为是Armadillo客户版软件的使用说明,所以就忽略过去了,也就是这篇文章没有看,其它的关于Armadillo脱壳的文章都收藏并读过了。
根据这篇文章DUMP成功,但目前还有点问题,进入主界面后就自动退出了,还没找到原因,正在分析中...
2005-10-11 17:53
0
雪    币: 1540
活跃值: (2807)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
玩arm的壳,不如玩arm的嵌入式系统。
我现在已经把主要精力放在硬件上了。
你做过什么具体的项目?

最初由 luye 发布


没搞错吧!KEIL51是针对51系列单片机的,怎么可以开发AVR单片机呢!

AVR是Atmel公司的单片机,有Mega和Tiny系列,如ATmega16、ATmega128等等。
2005-10-11 17:55
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最初由 limee 发布
玩arm的壳,不如玩arm的嵌入式系统。
我现在已经把主要精力放在硬件上了。
你做过什么具体的项目?



正打算玩arm的嵌入式系统,对这种Keil倒有开发系统。
做过的项目比较多了,出于商业原因不便说明。
2005-10-11 18:12
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
这个软件可能和外壳还有联系,没了壳就毫无提示的情况下退出了,运行OD调试也没撞上异常就自动退出了,最后只跟踪到一个动态链接库DAVR.DLL的库函数DD32调用就跟不下去了,这个函数反跟踪做的可真厉害啊!碰上一条INT3指令以后下面的代码就全部单步执行,而且是一边单步一边修改代码,OD没法跟下去。
看来要花大力气才行或者先好搁一下,等以后进步到这个程度再来了。
2005-10-12 09:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
最初由 luye 发布


以前以为是Armadillo客户版软件的使用说明,所以就忽略过去了,也就是这篇文章没有看,其它的关于Armadillo脱壳的文章都收藏并读过了。
根据这篇文章DUMP成功,但目前还有点问题,进入主界面后就自动退出了,还没找到原因,正在分析中...

我最近也在研究这个软件,对我这样的新手来说真是bt啊,虽然很顺利地找到了jmp点(和楼主找到的是同一地址),但之后找OEP就没辙了,bp GetCurrentThreadId,几次(好像3次)后找到一个call edi的语句下“硬件执行”断点,f9后看到程序在那个DAVR.DLL里折腾了一会就退出了,提一下那时看到的界面标题栏上是"4k evaluation"(正常运行时是"full function"即未注册且未超过30天的,超过30天就是4k了)。后来发现退出的call是来自iccavride的负地址。 看来要潜心好好学习一段时间了,决定把这个软件作为目标了。
2005-11-7 19:51
0
雪    币: 108
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
那是远程输入表

用arminline 就可以搞定了
2005-11-7 20:08
0
游客
登录 | 注册 方可回帖
返回