首页
社区
课程
招聘
Armadillo V4.X CopyMem-II脱壳――魔法转换(Magic Converter) V4.0正式版
发表于: 2005-4-28 11:41 41095

Armadillo V4.X CopyMem-II脱壳――魔法转换(Magic Converter) V4.0正式版

fly 活跃值
85
2005-4-28 11:41
41095
Armadillo V4.X CopyMem-II脱壳――魔法转换(Magic Converter) V4.0正式版
            
           
            
下载页面:  http://www.skycn.com/soft/3265.html
软件大小:  2388 KB
软件语言:  英文
软件类别:  国产软件 / 共享版 / 图像转换
应用平台:  Win9x/NT/2000/XP
加入时间:  2005-04-25 11:48:30
下载次数:  209670
推荐等级:  ****
开 发 商:  http://www.keksoft.com/
软件介绍:  魔法转换 是一个功能强大的图像批量处理转换软件。它包括图像浏览、批量转换(可自定义脚本)、字符画转换、图像优化、捕捉图像和创建EXE可执行文件六大部分。使用它可以让你制定转换脚本,然后根据脚本对图像进行批量处理转换。它还支持WINDOWS右键菜单进行转换操作,你还可以自定义WINDOWS右键菜单。同时它还能将图像打包生成.EXE可执行文件,然后可以脱离图像浏览器进行自动播放。魔法转换能支持目前所有流行的图像格式,它的输出格式为:bmp、jpg、gif、png、tif、pcx、wmf、emf、tga、ico、wbmp,还包括txt、rtf、htm等字符画格式。
            
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
            
【调试环境】:WinXP、flyODBG、PEiD、LordPE、ImportREC
            
―――――――――――――――――――――――――――――――――
【脱壳过程】:
         
     
这里使用修改版OllyDbg,如果使用原版,需要处理OutputDebugStringA问题
设置OllyDbg忽略所有其它异常选项。用IsDebug插件去掉OllyDbg的调试器标志。
―――――――――――――――――――――――――――――――――
一、寻找OEP+解码Dump
   
            
0061F743    55              push ebp
//进入OllyDbg后暂停在这
0061F744    8BEC            mov ebp,esp
0061F746    6A FF           push -1
0061F748    68 209B6400     push 00649B20
0061F74D    68 80F46100     push 0061F480
0061F752    64:A1 00000000  mov eax,dword ptr fs:[0]
0061F758    50              push eax
0061F759    64:8925 0000000>mov dword ptr fs:[0],esp
0061F760    83EC 58         sub esp,58
0061F763    53              push ebx
0061F764    56              push esi
0061F765    57              push edi
0061F766    8965 E8         mov dword ptr ss:[ebp-18],esp
0061F769    FF15 88416400   call dword ptr ds:[<&KERNEL32.GetVersion>]

BP WaitForDebugEvent
中断后取消断点,看堆栈:
0012BCB8   0060F8BF  /CALL 到 WaitForDebugEvent 来自 MAGCT.0060F8B9
0012BCBC   0012CD90  |pDebugEvent = 0012CD90
0012BCC0   000003E8  \Timeout = 1000. ms
在数据窗口定位到0012CD90处,准备看OEP值
接着下断:BP WriteProcessMemory

现在去代码窗口Ctrl+G:0060F8BF
Ctrl+F在当前位置下搜索命令:or eax,0FFFFFFF8
找到第一处在0060FE8F处,在其上cmp dword ptr ss:[ebp-A34],0处设置断点。

0060FE43    83BD CCF5FFFF 0>cmp dword ptr ss:[ebp-A34],0
//下断,Shift+F9中断下来  把[ebp-A34]=[0012CD7C]=000001B7清0  ★
0060FE4A    0F8C A8020000   jl 006100F8
0060FE50    8B8D CCF5FFFF   mov ecx,dword ptr ss:[ebp-A34]
0060FE56    3B0D 48AF6400   cmp ecx,dword ptr ds:[64AF48]
//注意[64AF48]  ★
0060FE5C    0F8D 96020000   jge 006100F8
//解码结束后跳转006100F8     在006100F8处下断  ★
0060FE62    8B95 40F6FFFF   mov edx,dword ptr ss:[ebp-9C0]
0060FE68    81E2 FF000000   and edx,0FF
0060FE6E    85D2            test edx,edx
0060FE70    0F84 AD000000   je 0060FF23
0060FE76    6A 00           push 0
0060FE78    8BB5 CCF5FFFF   mov esi,dword ptr ss:[ebp-A34]
0060FE7E    C1E6 04         shl esi,4
0060FE81    8B85 CCF5FFFF   mov eax,dword ptr ss:[ebp-A34]
0060FE87    25 07000080     and eax,80000007
0060FE8C    79 05           jns short 0060FE93
0060FE8E    48              dec eax
0060FE8F    83C8 F8         or eax,FFFFFFF8
//找到这里
0060FE92    40              inc eax
0060FE93    33C9            xor ecx,ecx
0060FE95    8A88 1C896400   mov cl,byte ptr ds:[eax+64891C]
0060FE9B    8B95 CCF5FFFF   mov edx,dword ptr ss:[ebp-A34]
0060FEA1    81E2 07000080   and edx,80000007
0060FEA7    79 05           jns short 0060FEAE
0060FEA9    4A              dec edx
0060FEAA    83CA F8         or edx,FFFFFFF8
0060FEAD    42              inc edx
0060FEAE    33C0            xor eax,eax
0060FEB0    8A82 1D896400   mov al,byte ptr ds:[edx+64891D]
0060FEB6    8B3C8D 70436400 mov edi,dword ptr ds:[ecx*4+644370]
0060FEBD    333C85 70436400 xor edi,dword ptr ds:[eax*4+644370]
0060FEC4    8B8D CCF5FFFF   mov ecx,dword ptr ss:[ebp-A34]
0060FECA    81E1 07000080   and ecx,80000007
0060FED0    79 05           jns short 0060FED7
0060FED2    49              dec ecx
0060FED3    83C9 F8         or ecx,FFFFFFF8
0060FED6    41              inc ecx
0060FED7    33D2            xor edx,edx
0060FED9    8A91 1E896400   mov dl,byte ptr ds:[ecx+64891E]
0060FEDF    333C95 70436400 xor edi,dword ptr ds:[edx*4+644370]
0060FEE6    8B85 CCF5FFFF   mov eax,dword ptr ss:[ebp-A34]
0060FEEC    99              cdq
0060FEED    B9 1C000000     mov ecx,1C
0060FEF2    F7F9            idiv ecx
0060FEF4    8BCA            mov ecx,edx
0060FEF6    D3EF            shr edi,cl
0060FEF8    83E7 0F         and edi,0F
0060FEFB    03F7            add esi,edi
0060FEFD    8B15 2CAF6400   mov edx,dword ptr ds:[64AF2C]
0060FF03    8D04B2          lea eax,dword ptr ds:[edx+esi*4]
0060FF06    50              push eax
0060FF07    8B8D CCF5FFFF   mov ecx,dword ptr ss:[ebp-A34]
0060FF0D    51              push ecx
0060FF0E    E8 2F210000     call 00612042
0060FF13    83C4 0C         add esp,0C
0060FF16    25 FF000000     and eax,0FF
//这里Patch ★
0060FF1B    85C0            test eax,eax
0060FF1D    0F84 D5010000   je 006100F8

Patch代码:
0060FF16    FF85 CCF5FFFF   inc dword ptr ss:[ebp-0A34]
0060FF1C    C705 4CAF6400 0>mov dword ptr ds:[64AF48+4],1
0060FF26    E9 18FFFFFF     jmp 0060FE43

Shift+F9,中断在上面BP WriteProcessMemory断点处。看数据窗口:
0012CD90  01 00 00 00 A8 0B 00 00 40 0E 00 00 01 00 00 80  ...?..@....?
0012CDA0  00 00 00 00 00 00 00 00 BC 83 5B 00 02 00 00 00  ........?[....
0012CDB0  00 00 00 00 BC 83 5B 00 BC 83 5B 00 0C AD 4D B2  ....?[.?[..?
很明显可以看到OEP=005B83BC

取消WriteProcessMemory处断点,继续Shift+F9,中断在006100F8处
此时子进程代码已经解开,运行LordPE,完全Dump出子进程

―――――――――――――――――――――――――――――――――
二、搞定输入表

可以完美还原IAT,不过修改的代码麻烦,就不写了。
再次载入主程序MAGCT.EXE
下断:BP DebugActiveProcess  中断后看堆栈:
0013BCBC   0060F71A  /CALL 到 DebugActiveProcess 来自 MAGCT.0060F714
0013BCC0   00000DEC  \ProcessId = DEC

新开一个OllyDbg,附加进程ID DEC的子进程
F9,再F12,会暂停在EP处

0061F743    EB FE           jmp short 0061F743
//子进程在EP处死循环  恢复原来EP处的代码:55 8B

切换单进程。BP OpenMutexA  Shift+F9,中断后看堆栈:
0013D7AC   0060B321  /CALL 到 OpenMutexA 来自 MAGCT.0060B31B
0013D7B0   001F0001  |Access = 1F0001
0013D7B4   00000000  |Inheritable = FALSE
0013D7B8   0013DDEC  \MutexName = "DEC::DADD467F84"  ★ 注意0013DDEC

Ctrl+G:401000  键入以下分离代码
00401000    60              pushad
00401001    9C              pushfd
00401002    68 ECDD1300     push 13DDEC  ★ 堆栈里看到的值
00401007    33C0            xor eax,eax
00401009    50              push eax
0040100A    50              push eax
0040100B    E8 2FDB407C     call 7C80EB3F ; kernel32.CreateMutexA
00401010    9D              popfd
00401011    61              popad
00401012    E9 04DC407C     jmp 7C80EC1B  ; kernel32.OpenMutexA

60 9C 68 EC DD 13 00 33 C0 50 50 E8 2F DB 40 7C 9D 61 E9 04 DC 40 7C

在401000处新建EIP,F9运行,再次中断在OpenMutexA处。
返回401000处,“撤销选择”,清掉写入的代码。再取消OpenMutexA断点。

下断:HE GetModuleHandleA    Shift+F9,注意看堆栈:
00136884   00E8372E  /CALL 到 GetModuleHandleA 来自 00E83728
00136888   00E97474  \pModule = "kernel32.dll"
0013688C   00E98744  ASCII "VirtualAlloc"

00136884   00E8374B  /CALL 到 GetModuleHandleA 来自 00E83745
00136888   00E97474  \pModule = "kernel32.dll"
0013688C   00E98738  ASCII "VirtualFree"

001365F4   00E6ACC1  /CALL 到 GetModuleHandleA 来自 00E6ACBB
001365F8   00136738  \pModule = "kernel32.dll"

堆栈如上变化时,取消GetModuleHandleA处断点,Alt+F9返回

00E6ACBB    FF15 D820E900   call dword ptr ds:[E920D8] ; kernel32.GetModuleHandleA
00E6ACC1    8B0D E4C9E900   mov ecx,dword ptr ds:[E9C9E4]
//返回这里
00E6ACC7    89040E          mov dword ptr ds:[esi+ecx],eax
00E6ACCA    A1 E4C9E900     mov eax,dword ptr ds:[E9C9E4]
00E6ACCF    391C06          cmp dword ptr ds:[esi+eax],ebx
00E6ACD2    75 16           jnz short 00E6ACEA
00E6ACD4    8D85 B4FEFFFF   lea eax,dword ptr ss:[ebp-14C]
00E6ACDA    50              push eax
00E6ACDB    FF15 E020E900   call dword ptr ds:[E920E0] ; kernel32.LoadLibraryA
00E6ACE1    8B0D E4C9E900   mov ecx,dword ptr ds:[E9C9E4]
00E6ACE7    89040E          mov dword ptr ds:[esi+ecx],eax
00E6ACEA    A1 E4C9E900     mov eax,dword ptr ds:[E9C9E4]
00E6ACEF    391C06          cmp dword ptr ds:[esi+eax],ebx
00E6ACF2    0F84 32010000   je 00E6AE2A
//Magic Jump! 修改为:jmp 00E6AE2A ★

这个东东在处理输入表的时候还有时间校验,不处理的话会导致某些函数被加密
下断:BP GetTickCount   中断后取消断点返回

00E88D57    FF15 AC22E900   call dword ptr ds:[E922AC] ; kernel32.GetTickCount
00E88D5D    8985 8CC3FFFF   mov dword ptr ss:[ebp-3C74],eax
//返回这里
00E88D63    6A 01           push 1
00E88D65    58              pop eax
00E88D66    85C0            test eax,eax
00E88D68    0F84 A8030000   je 00E89116

下面还有一处GetTickCount取时间

00E89100    8908            mov dword ptr ds:[eax],ecx
//函数写入。在这里可以看见输入表函数开始地址005D7208,输入表处理结束后可以计算出大小=8B4
00E89102    8B85 FCC7FFFF   mov eax,dword ptr ss:[ebp-3804]
00E89108    83C0 04         add eax,4
00E8910B    8985 FCC7FFFF   mov dword ptr ss:[ebp-3804],eax
00E89111    E9 4DFCFFFF     jmp 00E88D63
00E89116    FF15 AC22E900   call dword ptr ds:[E922AC] ; kernel32.GetTickCount
00E8911C    2B85 8CC3FFFF   sub eax,dword ptr ss:[ebp-3C74]
00E89122    8B8D 90C3FFFF   mov ecx,dword ptr ss:[ebp-3C70]
00E89128    6BC9 32         imul ecx,ecx,32
00E8912B    81C1 D0070000   add ecx,7D0
00E89131    3BC1            cmp eax,ecx
//时间校验
00E89133    76 07           jbe short 00E8913C
//修改为:JMP 00E8913C  ★
00E89135    C685 20C8FFFF 0>mov byte ptr ss:[ebp-37E0],1
00E8913C    83BD D0C6FFFF 0>cmp dword ptr ss:[ebp-3930],0
00E89143    0F85 8A000000   jnz 00E891D3

00E891B8    83C4 0C         add esp,0C
00E891BB    8B85 58C8FFFF   mov eax,dword ptr ss:[ebp-37A8]
00E891C1    8985 A49EFFFF   mov dword ptr ss:[ebp+FFFF9EA4],eax
00E891C7    FFB5 A49EFFFF   push dword ptr ss:[ebp+FFFF9EA4]
00E891CD    E8 64820000     call 00E91436 ; jmp to msvcrt.operator delete
00E891D2    59              pop ecx
00E891D3    E9 05F7FFFF     jmp 00E888DD
00E891D8    8B85 DCC6FFFF   mov eax,dword ptr ss:[ebp-3924]
//这里下断,中断后输入表处理完毕

运行ImportREC,选择这个进程。填入RVA=001D7208、Size=000008B4,Get Import剪切掉无效函数,修改OEP RVA=001B83BC,FixDump,正常运行!
           

―――――――――――――――――――――――――――――――――                                    
         ,     _/
        /| _.-~/            \_     ,        青春都一晌
       ( /~   /              \~-._ |\
       `\\  _/                \   ~\ )          忍把浮名
   _-~~~-.)  )__/;;,.          \_  //'
  /'_,\   --~   \ ~~~-  ,;;\___(  (.-~~~-.        换了破解轻狂
`~ _( ,_..--\ (     ,;'' /    ~--   /._`\
  /~~//'   /' `~\         ) /--.._, )_  `~
  "  `~"  "      `"      /~'`\    `\\~~\   
                         "     "   "~'  ""
   
              UnPacKed By :  fly
               2005-04-27 20:00

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 7
支持
分享
最新回复 (84)
雪    币: 442
活跃值: (1216)
能力值: ( LV12,RANK:1130 )
在线值:
发帖
回帖
粉丝
2
连续搞定多个猛壳,真是我的偶像!强烈支持!!
2005-4-28 11:53
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
3
魔法转换从2.8以后的好象除了注册码注册外,还有一个暗桩,他还要检查一个KeyFile文件,没有这个KeyFile注册成功只是一个假像,过了30天后还是会提示注册的。
PS:我只跟踪过2.8版本的,并找到检测KeyFile的代码爆掉后一直使用正常,2.8以后的版本就没玩过了。但试过2.8以后的版本的软件都有这个暗桩。
2005-4-28 12:17
0
雪    币: 303
活跃值: (461)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
连续搞定多个猛壳,真是我的偶像!强烈支持!!
2005-4-28 12:17
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
5
最初由 小虾 发布
魔法转换从2.8以后的好象除了注册码注册外,还有一个暗桩,他还要检查一个KeyFile文件,没有这个KeyFile注册成功只是一个假像,过了30天后还是会提示注册的。
PS:我只跟踪过2.8版本的,并找到检测KeyFile的代码爆掉后一直使用正常,2.8以后的版本就没玩过了。但试过2.8以后的版本的软件都有这个暗桩。


刚测试了一下,上面的key应该可以过30天使用
哪位兄弟再测试一下看看是否还有这个暗桩
2005-4-28 13:46
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
6
Fly兄是怎样测试的? 我知道2.8版本的可以通过修改系统时间来测试过期,3.0的修改系统时间不能测试出来,可能这个版本以上的不是通过时间来检测过期的。我安装的3.0版本也是经过30天后过期了才知道的,也试着跟踪过,不过3.0以后的版本这个暗桩比2.8版本的藏的更深,找了一段时间没找到也就懒的再找了。
2005-4-28 14:19
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
7
可能程序检测其他文件日期判断时间期限
算了,以后碰到再找吧
2005-4-28 15:02
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
8
FLY的贴,留名~
2005-4-28 15:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
**
2005-4-28 17:30
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
**
2005-4-28 17:36
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
11
fly4099@sohu.com
即使去掉也没有啥意思,已经流传了。当然,如果你坚持的话我会修改的

建议:不如升级吧
2005-4-28 17:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
已经给你发邮件了,请立即去掉
2005-4-28 18:17
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
13
OK,去掉了key

另外:我觉得没有必要加你QQ
2005-4-28 18:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
去掉就好,其他的都不重要了
2005-4-28 18:28
0
雪    币: 312
活跃值: (755)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
FLY
2005-4-28 21:20
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
16
最初由 magicker 发布
去掉就好,其他的都不重要了


这位朋友是作者吧?说话请客气一点,谢谢~
2005-4-29 09:14
0
雪    币: 111
活跃值: (55)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
fly最近高产啊
2005-4-29 09:22
0
雪    币: 213
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
这个东东的算法基本没变,还是有陷阱码而已。建议作者光靠加壳是没用的,你的软件都是明码比较很容易解。
2005-4-29 10:14
0
雪    币: 389
活跃值: (912)
能力值: ( LV9,RANK:770 )
在线值:
发帖
回帖
粉丝
19
向FLY同志学习

2005-4-29 17:51
0
雪    币: 218
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
厉害!学习中!
2005-4-29 19:23
0
雪    币: 239
活跃值: (190)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
21
最初由 李逍遥 发布
这个东东的算法基本没变,还是有陷阱码而已。建议作者光靠加壳是没用的,你的软件都是明码比较很容易解。


fly兄完全是技术角度 还希望magicker在技术上加油
2005-4-29 20:06
0
雪    币: 513
活跃值: (2258)
能力值: ( LV9,RANK:2130 )
在线值:
发帖
回帖
粉丝
22
来晚了,没有看到KEY,看来要自己动手了
2005-4-29 20:13
0
雪    币: 109
活跃值: (438)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
23
我感觉
新软件
好悲惨
刚上市
就被 FLY
Pk To Die~
我也来揉腻下~
2005-4-29 20:14
0
雪    币: 312
活跃值: (755)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
flyArmadillo V3.8 CopyMem-IIcmp dword ptr ss:[ebp-A34],0Shift+F9OEPOD:eek: :eek:
2005-4-29 20:27
0
雪    币: 2899
活跃值: (1753)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
25
收藏,正在脱一个1.xx-2.xx,因为修改了系统时间,竟然就无从下手了。fly真神!
2005-4-30 02:27
0
游客
登录 | 注册 方可回帖
返回
//