【脱文标题】 爱的中体验之Armadillo3.X加壳的双进程基本壳 【脱文作者】 weiyi75[Dfcg]
【作者邮箱】 weiyi75@sohu.com
【作者主页】 Dfcg官方大本营 --- http://www.chinadfcg.com/
【使用工具】 Ollydbg,Loadpe,Imprec1.6F
【脱壳平台】 Win2K
【软件名称】 NOTEPAD
【软件简介】 Armadillo3.X版双进程标准加壳的Win98的记事本
【软件大小】 212KB
【本地下载】本地下载 【加壳方式】 Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks
【保护方式】 双进程标准方式加壳
【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:
--------------------------------------------------------------------------------
【脱壳内容】
运行程序,发现进程里有两个Notepad.exe,昏。看了mysqladm的文章《试玩armadillo3.50a一点心得 》暂时无法吸收,看了Jwh51的文章,照猫画虎搞定,还是自己来一遍加深印像。
首先不要让父进程生成子进程,原理太复杂,没有深入的编程知识无法理解,急,日夜脱壳还是不够,还有N个壳等着要脱。先打好基础吧,慢慢来。
OD载入程序,插件自动隐藏OD,忽略所有异常。
00432999 >/$Content$nbsp; 55 PUSH EBP //外壳入口 0043299A |. 8BEC MOV EBP,ESP 0043299C |. 6A FF PUSH -1 0043299E |. 68 502C4500 PUSH NOTEPAD.00452C50 004329A3 |. 68 80234300 PUSH NOTEPAD.00432380 ; SE handler installation 004329A8 |. 64:A1 0000000>MOV EAX,DWORD PTR FS:[0] 004329AE |. 50 PUSH EAX 004329AF |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP 004329B6 |. 83EC 58 SUB ESP,58 004329B9 |. 53 PUSH EBX 004329BA |. 56 PUSH ESI 004329BB |. 57 PUSH EDI 004329BC |. 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP 004329BF |. FF15 4CD14400 CALL DWORD PTR DS:[<&KERNEL32.GetVersion>; KERNEL32.GetVersion .....................................................................
命令行下断点 BP OpenMutexA,F9运行。
中断
77E6D78C > 55 PUSH EBP 77E6D78D 8BEC MOV EBP,ESP 77E6D78F 51 PUSH ECX 77E6D790 51 PUSH ECX 77E6D791 837D 10 00 CMP DWORD PTR SS:[EBP+10],0 77E6D795 56 PUSH ESI 77E6D796 0F84 F0B30200 JE KERNEL32.77E98B8C .....................................................................
堆栈内容
0012F59C 004145F1 /CALL 到 OpenMutexA 来自 NOTEPAD.004145EB 0012F5A0 001F0001 |Access = 1F0001 0012F5A4 00000000 |Inheritable = FALSE 0012F5A8 0012FBDC \MutexName = "614: A2AA26D13" //注意MutexName 这个地址 每个机器不同,以看到的为主。
找一块程序领空空地址,写入一些欺骗Arm的代码。
Ctrl+G 401000
00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。 00401002 0000 ADD BYTE PTR DS:[EAX],AL 00401004 0000 ADD BYTE PTR DS:[EAX],AL 00401006 0000 ADD BYTE PTR DS:[EAX],AL 00401008 0000 ADD BYTE PTR DS:[EAX],AL 0040100A 0000 ADD BYTE PTR DS:[EAX],AL 0040100C 0000 ADD BYTE PTR DS:[EAX],AL 0040100E 0000 ADD BYTE PTR DS:[EAX],AL 00401010 0000 ADD BYTE PTR DS:[EAX],AL 00401012 0000 ADD BYTE PTR DS:[EAX],AL
OD直接双击修改,填入以下代码。
00401000 60 PUSHAD 00401001 9C PUSHFD 00401002 68 DCFB1200 PUSH 12FBDC //以上面堆栈中地址为准。 00401007 33C0 XOR EAX,EAX 00401009 50 PUSH EAX 0040100A 50 PUSH EAX 0040100B E8 687BA677 CALL KERNEL32.CreateMutexA 00401010 9D POPFD 00401011 61 POPAD 00401012 - E9 75C7A677 JMP KERNEL32.OpenMutexA ............................................................
将当前的 Eip 77E6D78C 切换到 401000 来。
点右键 选在此处新建 Eip ,看到Eip 变为 401000
F9运行。
中断
77E6D78C > 55 PUSH EBP //双击它或F2清除断点。 77E6D78D 8BEC MOV EBP,ESP 77E6D78F 51 PUSH ECX 77E6D790 51 PUSH ECX 77E6D791 837D 10 00 CMP DWORD PTR SS:[EBP+10],0 77E6D795 56 PUSH ESI 77E6D796 0F84 F0B30200 JE KERNEL32.77E98B8C 77E6D79C 64:A1 18000000 MOV EAX,DWORD PTR FS:[18] 77E6D7A2 FF75 10 PUSH DWORD PTR SS:[EBP+10] 77E6D7A5 8DB0 F80B0000 LEA ESI,DWORD PTR DS:[EAX+BF8] 77E6D7AB 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8] 77E6D7AE 50 PUSH EAX 77E6D7AF FF15 8010E677 CALL DWORD PTR DS:[<&NTDLL.RtlInitAnsiSt>; ntdll.RtlInitAnsiString ............................................................
Ctrl+G 401000
00401000 60 PUSHAD 00401001 9C PUSHFD 00401002 68 DCFB1200 PUSH 12FBDC ; ASCII "614: A2AA26D13" 00401007 33C0 XOR EAX,EAX 00401009 50 PUSH EAX 0040100A 50 PUSH EAX 0040100B E8 687BA677 CALL KERNEL32.CreateMutexA 00401010 9D POPFD 00401011 61 POPAD 00401012 - E9 75C7A677 JMP KERNEL32.OpenMutexA
选定上面的红色代码,右键撤销选择,看到全部还原为
00401000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。 00401002 0000 ADD BYTE PTR DS:[EAX],AL 00401004 0000 ADD BYTE PTR DS:[EAX],AL 00401006 0000 ADD BYTE PTR DS:[EAX],AL 00401008 0000 ADD BYTE PTR DS:[EAX],AL 0040100A 0000 ADD BYTE PTR DS:[EAX],AL 0040100C 0000 ADD BYTE PTR DS:[EAX],AL 0040100E 0000 ADD BYTE PTR DS:[EAX],AL 00401010 0000 ADD BYTE PTR DS:[EAX],AL 00401012 0000 ADD BYTE PTR DS:[EAX],AL .....................................................................
1 2 下一页 |