问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Armadillo 3.78 - 4.xx -> Silicon Realms Toolworks [Overlay]

发布网友 发布时间:2022-05-03 06:14

我来回答

1个回答

热心网友 时间:2023-10-12 11:29

Armadillo 3.78 - 4.xx 是一种 加密方式

也就是 壳程序

下面来源于网上
-------------------------------------
v【加密保护】:Armadillo V4.2 -> Silicon Realms Toolworks

【调试环境】:WinXP、PEiD、ODbyDYK v1.10、LordPE、等

脱壳过程:OD载入程序,老规矩插件隐藏OD,忽略所有异常,再添加以下几个异常C0000005(ACCESS VIOLATION)、C000
001D(ILLEGAL INSTRUCTION)、C000001E(INVALID LOCK SEQUENCE)、C0000096(PRIVILEGED INSTRUCTION)

入口代码:

0105A000 N> 60 pushad
0105A001 E8 00000000 call NOTEPAD.0105A006
0105A006 5D pop ebp
0105A007 50 push eax
0105A008 51 push ecx
0105A009 0FCA bswap edx
0105A00B F7D2 not edx
0105A00D 9C pushfd

下bp OpenMutexA断点shift+F9运行,

77E62391 k> 55 push ebp---------中断在这里
77E62392 8BEC mov ebp,esp
77E62394 51 push ecx
77E62395 51 push ecx
77E62396 837D 10 00 cmp dword ptr ss:[ebp+10],0
77E6239A 56 push esi
77E6239B 0F84 C2E30100 je kernel32.77E80763
77E623A1 64:A1 18000000 mov eax,dword ptr fs:[18]

看堆栈

0006F710 0103229B /CALL 到 OpenMutexA 来自 NOTEPAD.01032295
0006F714 001F0001 |Access = 1F0001
0006F718 00000000 |Inheritable = FALSE
0006F71C 0006FDA0 \MutexName = "52C:A9EEE0AC4"------注意0006fda0,等下会用到
0006F720 00000004
0006F724 00000000
0006F728 010476B3 NOTEPAD.010476B3

Ctrl+G 01001000 键入以下代码:

为什么是Ctrl+G 01001000呢?很多教程里都是Ctrl+G 401000,在本例Ctrl+G 401000是无法写入调式
程序中的,而且401000处有代码(大家可以试一试),那么如何知道是用Ctrl+G 01001000的呢?个人认
为是根据载入口的代码来确定的,形式是入口代码地址的前3位+01000,如本例中的入口代码是:
0105A000 N> 60 pushad,取其地址中的前3位010,再加上01000,合起来就是01001000。这样一来
许多教程中的Ctrl+G 401000是入口代码地址为004xxxxx的形式,401000属于取其地址中的前3位010,再
加上01000中入口代码前3位为004的一个特例。

01001000 60 pushad
01001001 9C pushfd
01001002 68 A0FD0600 push 6FDA0 堆栈里看到的值
01001007 33C0 xor eax,eax
01001009 50 push eax
0100100A 50 push eax
0100100B E8 B5A6E576 call kernel32.CreateMutexA
01001010 9D popfd
01001011 61 popad
01001012 - E9 7A13E676 jmp kernel32.OpenMutexA
01001017 90 nop

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

再次Ctrl+G 01001000
撤消刚才做的选择,右键-》撤消选择

接着下 bp GetMoleHandleA断点F9运行

77E5AD86 k> 837C24 04 00 cmp dword ptr ss:[esp+4],0----断在这里,取消断点
77E5AD8B 0F84 37010000 je kernel32.77E5AEC8----------在这里重新下断点
77E5AD91 FF7424 04 push dword ptr ss:[esp+4]
77E5AD95 E8 F8050000 call kernel32.77E5B392
77E5AD9A 85C0 test eax,eax
77E5AD9C 74 08 je short kernel32.77E5ADA6
77E5AD9E FF70 04 push dword ptr ds:[eax+4]

按F9运行,注意堆栈
许多高手都点明了返回的时机

0006900C 00A05A99 返回到 00A05A99 来自 kernel32.GetMoleHandleA
00069010 0006915C ASCII "kernel32.dll"
00069014 0006EA58

看到以上代码时就是返回的时机了,取消断点
CTRL+F9返回壳代码

00A05A99 8B0D 6C50A300 mov ecx,dword ptr ds:[A3506C]--------回到这里
00A05A9F 89040E mov dword ptr ds:[esi+ecx],eax
00A05AA2 A1 6C50A300 mov eax,dword ptr ds:[A3506C]
00A05AA7 391C06 cmp dword ptr ds:[esi+eax],ebx
00A05AAA 75 16 jnz short 00A05AC2
00A05AAC 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]
00A05AB2 50 push eax
00A05AB3 FF15 B862A200 call dword ptr ds:[A262B8]
00A05AB9 8B0D 6C50A300 mov ecx,dword ptr ds:[A3506C]
00A05ABF 89040E mov dword ptr ds:[esi+ecx],eax
00A05AC2 A1 6C50A300 mov eax,dword ptr ds:[A3506C]
00A05AC7 391C06 cmp dword ptr ds:[esi+eax],ebx
00A05ACA <> 0F84 2F010000 je 00A05BFF ------magic jump//修改为:JMP 00A05BFF
00A05AD0 33C9 xor ecx,ecx
00A05AD2 8B07 mov eax,dword ptr ds:[edi]
00A05AD4 3918 cmp dword ptr ds:[eax],ebx
00A05AD6 74 06 je short 00A05ADE
00A05AD8 41 inc ecx
00A05AD9 83C0 0C add eax,0C
00A05ADC ^ EB F6 jmp short 00A05AD4

将magic jump由 je 00A05BFF修改为JMP 00A05BFF后,
按ALT+M,不能马上在内存映像:

01001000 00007000 NOTEPAD .text Imag 01001002 R RWE 上下内存断点

否则将会出现以下情况:

77F60B6F 56 push esi
77F60B70 FF75 0C push dword ptr ss:[ebp+C]
77F60B73 8B75 08 mov esi,dword ptr ss:[ebp+8]
77F60B76 56 push esi
77F60B77 E8 AA000000 call ntdll.77F60C26
77F60B7C 84C0 test al,al
77F60B7E 0F85 EB6F0200 jnz ntdll.77F87B6F
77F60B84 53 push ebx
77F60B85 57 push edi

被调式程序无法处理异常。

看了KuNgBiM[DFCG]大大的“新手学脱壳 之 Armadillo 3.00a - 3.61 标准壳”后知道,
在将magic jump由 je 00A05BFF修改为JMP 00A05BFF后,Ctrl+F 在当前位置查找命令:
salc 在00A05C16处,当看到jmp、salc、salc代码连在一起时,呵呵,恭喜,
找到地方了,在salc上面的jmp处下断!--------- KuNgBiM[DFCG]大大的原话

00A05C14 /EB 03 jmp short 00A05C19-----在此下断
00A05C16 |D6 salc-------------------找到这里
00A05C17 |D6 salc

F9运行,断在00A05C14处,现在返回Magic Jump 处,改回原先修改的代码,在 00A05ACA 处
点右键->“撤销选择”即可。

撤消00A05C14处的断点,现在ALT+M在去

01001000 00007000 NOTEPAD .text Imag 01001002 R RWE 下内存断点

按F9两次运行后,直接中断在OEP处(一遍红色的海洋)

01006AE0 6A 70 push 70
01006AE2 68 88180001 push NOTEPAD.01001888
01006AE7 E8 BC010000 call NOTEPAD.01006CA8
01006AEC 33DB xor ebx,ebx
01006AEE 53 push ebx
01006AEF 8B3D 4C110001 mov edi,dword ptr ds:[100114C]
01006AF5 FFD7 call edi
01006AF7 66:8138 4D5A cmp word ptr ds:[eax],5A4D
01006AFC 75 1F jnz short NOTEPAD.01006B1D
01006AFE 8B48 3C mov ecx,dword ptr ds:[eax+3C]
01006B01 03C8 add ecx,eax
01006B03 8139 50450000 cmp dword ptr ds:[ecx],4550
01006B09 75 12 jnz short NOTEPAD.01006B1D
01006B0B 0FB741 18 movzx eax,word ptr ds:[ecx+18]
01006B0F 3D 0B010000 cmp eax,10B
01006B14 74 1F je short NOTEPAD.01006B35

用LORD PE将其mp出来,不关OD,用ImportREC 1.6,选择这个程序的进程,把OEP改为6ae0,
点IT AutoSearch,CUT掉无效函数。FixDump,正常运行!正常的NOTEPAD大小为65K,加壳后
为592K,而脱壳修复后则达到784K,所以有必要对修复后的程序进行减肥,可以参考飘云的
《Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks 脱壳分析 》,减肥后的NOTEPAD
大小为65.3K,与正常的大小差不多

热心网友 时间:2023-10-12 11:29

Armadillo 3.78 - 4.xx 是一种 加密方式

也就是 壳程序

下面来源于网上
-------------------------------------
v【加密保护】:Armadillo V4.2 -> Silicon Realms Toolworks

【调试环境】:WinXP、PEiD、ODbyDYK v1.10、LordPE、等

脱壳过程:OD载入程序,老规矩插件隐藏OD,忽略所有异常,再添加以下几个异常C0000005(ACCESS VIOLATION)、C000
001D(ILLEGAL INSTRUCTION)、C000001E(INVALID LOCK SEQUENCE)、C0000096(PRIVILEGED INSTRUCTION)

入口代码:

0105A000 N> 60 pushad
0105A001 E8 00000000 call NOTEPAD.0105A006
0105A006 5D pop ebp
0105A007 50 push eax
0105A008 51 push ecx
0105A009 0FCA bswap edx
0105A00B F7D2 not edx
0105A00D 9C pushfd

下bp OpenMutexA断点shift+F9运行,

77E62391 k> 55 push ebp---------中断在这里
77E62392 8BEC mov ebp,esp
77E62394 51 push ecx
77E62395 51 push ecx
77E62396 837D 10 00 cmp dword ptr ss:[ebp+10],0
77E6239A 56 push esi
77E6239B 0F84 C2E30100 je kernel32.77E80763
77E623A1 64:A1 18000000 mov eax,dword ptr fs:[18]

看堆栈

0006F710 0103229B /CALL 到 OpenMutexA 来自 NOTEPAD.01032295
0006F714 001F0001 |Access = 1F0001
0006F718 00000000 |Inheritable = FALSE
0006F71C 0006FDA0 \MutexName = "52C:A9EEE0AC4"------注意0006fda0,等下会用到
0006F720 00000004
0006F724 00000000
0006F728 010476B3 NOTEPAD.010476B3

Ctrl+G 01001000 键入以下代码:

为什么是Ctrl+G 01001000呢?很多教程里都是Ctrl+G 401000,在本例Ctrl+G 401000是无法写入调式
程序中的,而且401000处有代码(大家可以试一试),那么如何知道是用Ctrl+G 01001000的呢?个人认
为是根据载入口的代码来确定的,形式是入口代码地址的前3位+01000,如本例中的入口代码是:
0105A000 N> 60 pushad,取其地址中的前3位010,再加上01000,合起来就是01001000。这样一来
许多教程中的Ctrl+G 401000是入口代码地址为004xxxxx的形式,401000属于取其地址中的前3位010,再
加上01000中入口代码前3位为004的一个特例。

01001000 60 pushad
01001001 9C pushfd
01001002 68 A0FD0600 push 6FDA0 堆栈里看到的值
01001007 33C0 xor eax,eax
01001009 50 push eax
0100100A 50 push eax
0100100B E8 B5A6E576 call kernel32.CreateMutexA
01001010 9D popfd
01001011 61 popad
01001012 - E9 7A13E676 jmp kernel32.OpenMutexA
01001017 90 nop

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

再次Ctrl+G 01001000
撤消刚才做的选择,右键-》撤消选择

接着下 bp GetMoleHandleA断点F9运行

77E5AD86 k> 837C24 04 00 cmp dword ptr ss:[esp+4],0----断在这里,取消断点
77E5AD8B 0F84 37010000 je kernel32.77E5AEC8----------在这里重新下断点
77E5AD91 FF7424 04 push dword ptr ss:[esp+4]
77E5AD95 E8 F8050000 call kernel32.77E5B392
77E5AD9A 85C0 test eax,eax
77E5AD9C 74 08 je short kernel32.77E5ADA6
77E5AD9E FF70 04 push dword ptr ds:[eax+4]

按F9运行,注意堆栈
许多高手都点明了返回的时机

0006900C 00A05A99 返回到 00A05A99 来自 kernel32.GetMoleHandleA
00069010 0006915C ASCII "kernel32.dll"
00069014 0006EA58

看到以上代码时就是返回的时机了,取消断点
CTRL+F9返回壳代码

00A05A99 8B0D 6C50A300 mov ecx,dword ptr ds:[A3506C]--------回到这里
00A05A9F 89040E mov dword ptr ds:[esi+ecx],eax
00A05AA2 A1 6C50A300 mov eax,dword ptr ds:[A3506C]
00A05AA7 391C06 cmp dword ptr ds:[esi+eax],ebx
00A05AAA 75 16 jnz short 00A05AC2
00A05AAC 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]
00A05AB2 50 push eax
00A05AB3 FF15 B862A200 call dword ptr ds:[A262B8]
00A05AB9 8B0D 6C50A300 mov ecx,dword ptr ds:[A3506C]
00A05ABF 89040E mov dword ptr ds:[esi+ecx],eax
00A05AC2 A1 6C50A300 mov eax,dword ptr ds:[A3506C]
00A05AC7 391C06 cmp dword ptr ds:[esi+eax],ebx
00A05ACA <> 0F84 2F010000 je 00A05BFF ------magic jump//修改为:JMP 00A05BFF
00A05AD0 33C9 xor ecx,ecx
00A05AD2 8B07 mov eax,dword ptr ds:[edi]
00A05AD4 3918 cmp dword ptr ds:[eax],ebx
00A05AD6 74 06 je short 00A05ADE
00A05AD8 41 inc ecx
00A05AD9 83C0 0C add eax,0C
00A05ADC ^ EB F6 jmp short 00A05AD4

将magic jump由 je 00A05BFF修改为JMP 00A05BFF后,
按ALT+M,不能马上在内存映像:

01001000 00007000 NOTEPAD .text Imag 01001002 R RWE 上下内存断点

否则将会出现以下情况:

77F60B6F 56 push esi
77F60B70 FF75 0C push dword ptr ss:[ebp+C]
77F60B73 8B75 08 mov esi,dword ptr ss:[ebp+8]
77F60B76 56 push esi
77F60B77 E8 AA000000 call ntdll.77F60C26
77F60B7C 84C0 test al,al
77F60B7E 0F85 EB6F0200 jnz ntdll.77F87B6F
77F60B84 53 push ebx
77F60B85 57 push edi

被调式程序无法处理异常。

看了KuNgBiM[DFCG]大大的“新手学脱壳 之 Armadillo 3.00a - 3.61 标准壳”后知道,
在将magic jump由 je 00A05BFF修改为JMP 00A05BFF后,Ctrl+F 在当前位置查找命令:
salc 在00A05C16处,当看到jmp、salc、salc代码连在一起时,呵呵,恭喜,
找到地方了,在salc上面的jmp处下断!--------- KuNgBiM[DFCG]大大的原话

00A05C14 /EB 03 jmp short 00A05C19-----在此下断
00A05C16 |D6 salc-------------------找到这里
00A05C17 |D6 salc

F9运行,断在00A05C14处,现在返回Magic Jump 处,改回原先修改的代码,在 00A05ACA 处
点右键->“撤销选择”即可。

撤消00A05C14处的断点,现在ALT+M在去

01001000 00007000 NOTEPAD .text Imag 01001002 R RWE 下内存断点

按F9两次运行后,直接中断在OEP处(一遍红色的海洋)

01006AE0 6A 70 push 70
01006AE2 68 88180001 push NOTEPAD.01001888
01006AE7 E8 BC010000 call NOTEPAD.01006CA8
01006AEC 33DB xor ebx,ebx
01006AEE 53 push ebx
01006AEF 8B3D 4C110001 mov edi,dword ptr ds:[100114C]
01006AF5 FFD7 call edi
01006AF7 66:8138 4D5A cmp word ptr ds:[eax],5A4D
01006AFC 75 1F jnz short NOTEPAD.01006B1D
01006AFE 8B48 3C mov ecx,dword ptr ds:[eax+3C]
01006B01 03C8 add ecx,eax
01006B03 8139 50450000 cmp dword ptr ds:[ecx],4550
01006B09 75 12 jnz short NOTEPAD.01006B1D
01006B0B 0FB741 18 movzx eax,word ptr ds:[ecx+18]
01006B0F 3D 0B010000 cmp eax,10B
01006B14 74 1F je short NOTEPAD.01006B35

用LORD PE将其mp出来,不关OD,用ImportREC 1.6,选择这个程序的进程,把OEP改为6ae0,
点IT AutoSearch,CUT掉无效函数。FixDump,正常运行!正常的NOTEPAD大小为65K,加壳后
为592K,而脱壳修复后则达到784K,所以有必要对修复后的程序进行减肥,可以参考飘云的
《Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks 脱壳分析 》,减肥后的NOTEPAD
大小为65.3K,与正常的大小差不多
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... A Whole New World歌词 用oracle怎么把一张表的字段,与另一张表的记录连在一起,组成一张表 一个,可以同时登录几台电脑吗? 一个 能同时在两台电脑登陆网页版吗 一个如何在两台电脑上同时登陆 一个,可以同时登录几台电脑吗? 一个可以同时在两台电脑上登录吗? 一个,可以同时登录几台电脑吗? 两台电脑登录同一个 怎么查主板型号啊? 做梦梦见一头牛在对我笑 是什么意思? 探究酸雨对生物的影响用什么实验方法 测定酸雨对生物的影响的实验中,模拟酸雨是由 求酸雨实验报告 酸雨对动植物的影响 探究酸雨对植物的影响,结果 做梦梦见牛对我笑我也对他笑笑 称为酸雨.酸雨真的对生物有不利影响吗 回想做“酸雨对生物的影响”探究实验,完成下列填空:(1)用______和______配置成了“模拟酸雨”,把PH 探究酸与食醋佩利模拟酸雨对种子萌发的影响 我刚上大学,晚上梦见喜鹊在我的床铺上筑巢,还是新的,请问这意味着什么... 梦见喜鹊在房梁上 梦见喜鹊在自己家树上搭窝 客家风俗的生活风俗 周公解梦下午喜鹃叫 客家人的民风民俗(100字左右) 解梦喜鹊拆窝,一个喜鹊一个窝 梦见三只喜鹊站在房顶 梦见两只喜鹊在头上筑巢 去黄山有有哪些必玩的? 喜鹊在家里楼梯间筑巢好不好? 人保车险是怎样算提成 人民财产保险 车险提成大概是多少 湿敷就是把化妆棉弄湿了敷脸上吗?要敷多久?用完城野医生后应该用爽肤水或者什么吗? 车险业务员怎么提成 建设银行二维码收款收机播报在哪里下载 用收款音响一定要下载APP吗 湿敷后还要用爽肤水吗 湿敷可以用爽肤水和百岁山混合吗? 湿敷是紧急补水的方法,你知道湿敷有哪些技巧吗?