《Armadillo1.xx-2.xx-SiliconRealmsToolworks脱壳分析》.doc_第1页
《Armadillo1.xx-2.xx-SiliconRealmsToolworks脱壳分析》.doc_第2页
《Armadillo1.xx-2.xx-SiliconRealmsToolworks脱壳分析》.doc_第3页
《Armadillo1.xx-2.xx-SiliconRealmsToolworks脱壳分析》.doc_第4页
《Armadillo1.xx-2.xx-SiliconRealmsToolworks脱壳分析》.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

脱壳过程:OD载入程序,老规矩插件隐藏OD,忽略所有异常,再添加以下几个异常C0000005(ACCESS VIOLATION)、C000001D(ILLEGAL INSTRUCTION)、C000001E(INVALID LOCK SEQUENCE)、C0000096(PRIVILEGED INSTRUCTION)入口代码:0105A000 N60 pushad0105A001 E8 00000000 call NOTEPAD.0105A0060105A006 5D pop ebp0105A007 50 push eax0105A008 51 push ecx0105A009 0FCA bswap edx0105A00B F7D2 not edx0105A00D 9C pushfd下bp OpenMutexA断点shift+F9运行,77E62391 k55 push ebp-中断在这里77E62392 8BEC mov ebp,esp77E62394 51 push ecx77E62395 51 push ecx77E62396 837D 10 00 cmp dword ptr ss:ebp+10,077E6239A 56 push esi77E6239B 0F84 C2E30100 je kernel32.77E8076377E623A1 64:A1 18000000 mov eax,dword ptr fs:18看堆栈0006F710 0103229B/CALL 到 OpenMutexA 来自 NOTEPAD.010322950006F714 001F0001|Access = 1F00010006F718 00000000|Inheritable = FALSE0006F71C 0006FDA0MutexName = 52C:A9EEE0AC4-注意0006fda0,等下会用到0006F720 000000040006F724 000000000006F728 010476B3NOTEPAD.010476B3Ctrl+G 01001000 键入以下代码:为什么是Ctrl+G 01001000呢?很多教程里都是Ctrl+G 401000,在本例Ctrl+G 401000是无法写入调式程序中的,而且401000处有代码(大家可以试一试),那么如何知道是用Ctrl+G 01001000的呢?个人认为是根据载入口的代码来确定的,形式是入口代码地址的前3位+01000,如本例中的入口代码是:0105A000 N60 pushad,取其地址中的前3位010,再加上01000,合起来就是01001000。这样一来许多教程中的Ctrl+G 401000是入口代码地址为004xxxxx的形式,401000属于取其地址中的前3位010,再加上01000中入口代码前3位为004的一个特例。01001000 60 pushad01001001 9C pushfd01001002 68 A0FD0600 push 6FDA0堆栈里看到的值01001007 33C0 xor eax,eax01001009 50 push eax0100100A 50 push eax0100100B E8 B5A6E576 call kernel32.CreateMutexA01001010 9D popfd01001011 61 popad01001012 - E9 7A13E676 jmp kernel32.OpenMutexA01001017 90 nop在01001000处新建起源,右键此处新建EIPF9运行,再次中断在OpenMutexA处,取消断点。再次Ctrl+G 01001000撤消刚才做的选择,右键-撤消选择接着下 bp GetModuleHandleA断点F9运行77E5AD86 k837C24 04 00 cmp dword ptr ss:esp+4,0-断在这里,取消断点77E5AD8B 0F84 37010000 je kernel32.77E5AEC8-在这里重新下断点77E5AD91 FF7424 04 push dword ptr ss:esp+477E5AD95 E8 F8050000 call kernel32.77E5B39277E5AD9A 85C0 test eax,eax77E5AD9C 74 08 je short kernel32.77E5ADA677E5AD9E FF70 04 push dword ptr ds:eax+4按F9运行,注意堆栈许多高手都点明了返回的时机0006900C 00A05A99返回到 00A05A99 来自 kernel32.GetModuleHandleA00069010 0006915CASCII kernel32.dll00069014 0006EA58看到以上代码时就是返回的时机了,取消断点CTRL+F9返回壳代码00A05A99 8B0D 6C50A300 mov ecx,dword ptr ds:A3506C-回到这里00A05A9F 89040E mov dword ptr ds:esi+ecx,eax00A05AA2 A1 6C50A300 mov eax,dword ptr ds:A3506C00A05AA7 391C06 cmp dword ptr ds:esi+eax,ebx00A05AAA 75 16 jnz short 00A05AC200A05AAC 8D85 B4FEFFFF lea eax,dword ptr ss:ebp-14C00A05AB2 50 push eax00A05AB3 FF15 B862A200 call dword ptr ds:A262B8 00A05AB9 8B0D 6C50A300 mov ecx,dword ptr ds:A3506C00A05ABF 89040E mov dword ptr ds:esi+ecx,eax00A05AC2 A1 6C50A300 mov eax,dword ptr ds:A3506C00A05AC7 391C06 cmp dword ptr ds:esi+eax,ebx00A05ACA 0F84 2F010000 je 00A05BFF -magic jump/修改为:JMP 00A05BFF00A05AD0 33C9 xor ecx,ecx00A05AD2 8B07 mov eax,dword ptr ds:edi00A05AD4 3918 cmp dword ptr ds:eax,ebx00A05AD6 74 06 je short 00A05ADE00A05AD8 41 inc ecx00A05AD9 83C0 0C add eax,0C00A05ADC EB F6 jmp short 00A05AD4将magic jump由 je 00A05BFF修改为JMP 00A05BFF后,按ALT+M,不能马上在内存映像:01001000 00007000NOTEPAD.text Imag 01001002RRWE 上下内存断点否则将会出现以下情况:77F60B6F 56 push esi77F60B70 FF75 0C push dword ptr ss:ebp+C77F60B73 8B75 08 mov esi,dword ptr ss:ebp+877F60B76 56 push esi77F60B77 E8 AA000000 call ntdll.77F60C2677F60B7C 84C0 test al,al77F60B7E 0F85 EB6F0200 jnz ntdll.77F87B6F77F60B84 53 push ebx77F60B85 57 push edi被调式程序无法处理异常。看了KuNgBiMDFCG大大的“新手学脱壳 之 Armadillo 3.00a - 3.61 标准壳”后知道,在将magic jump由 je 00A05BFF修改为JMP 00A05BFF后,Ctrl+F 在当前位置查找命令:salc 在00A05C16处,当看到jmp、salc、salc代码连在一起时,呵呵,恭喜,找到地方了,在salc上面的jmp处下断!- KuNgBiMDFCG大大的原话00A05C14 /EB 03 jmp short 00A05C19-在此下断00A05C16 |D6 salc-找到这里00A05C17 |D6 salcF9运行,断在00A05C14处,现在返回Magic Jump 处,改回原先修改的代码,在 00A05ACA 处点右键“撤销选择”即可。撤消00A05C14处的断点,现在ALT+M在去01001000 00007000NOTEPAD.text Imag 01001002RRWE 下内存断点 按F9两次运行后,直接中断在OEP处(一遍红色的海洋)01006AE0 6A 70 push 7001006AE2 68 88180001 push NOTEPAD.0100188801006AE7 E8 BC010000 call NOTEPAD.01006CA801006AEC 33DB xor ebx,ebx01006AEE 53 push ebx01006AEF 8B3D 4C110001 mov edi,dword ptr ds:100114C01006AF5 FFD7 call edi01006AF7 66:8138 4D5A cmp word ptr ds:eax,5A4D01006AFC 75 1F jnz short NOTEPAD.01006B1D01006AFE 8B48 3C mov ecx,dword ptr ds:eax+3C01006B01 03C8 add ecx,eax01006B03 8139 50450000 cmp dword ptr ds:ecx,455001006B09 75 12 jnz short NOTEPAD.01006B1D01006B0B 0FB741 18 movzx eax,word ptr ds:ecx+1801006B0F 3D 0B010000 cmp eax,10B01006B14 74 1F je short NOTEPAD.01006B35用LORD PE将其dump出

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论