刚找到一个脱PE-Armor 0.46 -> Hying 壳的教程,自己尝试手动脱壳,以下是我照教程脱壳的过程
0073F000 > E8 AA000000 call 0073F0AF <-用OD载入后停留在这里
0073F005 2D F0330000 sub eax, 33F0
0073F00A 0000 add byte ptr [eax], al
0073F00C 0000 add byte ptr [eax], al
0073F00E 0000 add byte ptr [eax], al
0073F010 003D F033002D add byte ptr [2D0033F0], bh
0073F016 F0:3300 lock xor eax, dword ptr [eax] ; 不允许锁定前缀
0073F019 0000 add byte ptr [eax], al
0073F01B 0000 add byte ptr [eax], al
Alt+M 打开Memory map,如下:
地址 大小 属主 区段 包含 类型 访问 初始访问 已映射为
00010000 00001000 Priv RW RW
00020000 00001000 Priv RW RW
0012B000 00001000 Priv RW 保护 RW
0012C000 00004000 堆栈 于 主线 Priv RW 保护 RW
00130000 00003000 Map R R
00140000 00003000 Priv RW RW
00240000 00006000 Priv RW RW
00250000 00003000 Map RW RW
00260000 00016000 Map R R \Device\HarddiskVolume1\WINDOWS\System32\UNICODE.NLS
00280000 0003D000 Map R R \Device\HarddiskVolume1\WINDOWS\System32\LOCALE.NLS
002C0000 00041000 Map R R \Device\HarddiskVolume1\WINDOWS\System32\SORTKEY.NLS
00310000 00006000 Map R R \Device\HarddiskVolume1\WINDOWS\System32\SORTTBLS.NLS
00320000 00041000 Map R R
00400000 00001000 PR_St PE 文件头 Imag R RWE
00401000 0029A000 PR_St 代码 Imag R RWE <-在这里下断点
0069B000 000A4000 PR_St 数据,资源 Imag R RWE
0073F000 00006000 PR_St SFX,输入表 Imag R RWE
7C800000 00001000 kernel32 PE 文件头 Imag R RWE
7C801000 00082000 kernel32 .text 代码,输入表, Imag R RWE
7C883000 00005000 kernel32 .data 数据 Imag R RWE
7C888000 0008E000 kernel32 .rsrc 资源 Imag R RWE
7C916000 00006000 kernel32 .reloc 重定位 Imag R RWE
7C920000 00001000 ntdll PE 文件头 Imag R RWE
7C921000 0007B000 ntdll .text 代码,输出表 Imag R RWE
7C99C000 00005000 ntdll .data 数据 Imag R RWE
7C9A1000 00010000 ntdll .rsrc 资源 Imag R RWE
7C9B1000 00003000 ntdll .reloc 重定位 Imag R RWE
7F6F0000 00007000 Map R E R E
7FFA0000 00033000 Map R R
7FFD9000 00001000 Priv RW RW
7FFDF000 00001000 数据块 于 主 Priv RW RW
7FFE0000 00001000 Priv R R
按F9运行程序
0073F105 A4 movs byte ptr es:[edi], byte ptr [esi> <-停留在这里
0073F106 B3 02 mov bl, 2
0073F108 E8 6D000000 call 0073F17A
0073F10D ^ 73 F6 jnb short 0073F105
0073F10F 33C9 xor ecx, ecx
0073F111 E8 64000000 call 0073F17A
0073F116 73 1C jnb short 0073F134
0073F118 33C0 xor eax, eax
0073F11A E8 5B000000 call 0073F17A
0073F11F 73 23 jnb short 0073F144
0073F121 B3 02 mov bl, 2
0073F123 41 inc ecx
0073F124 B0 10 mov al, 10
下命令bp GetProcAddress, 再按F9运行,中断后取消断点.
Alt+F9返回在如下:(和作者的有出入不,不知道是我操作有问题还是断点下错地方了)
00373031 8907 mov dword ptr [edi], eax ; ntdll.RtlDeleteCriticalSection
00373033 5A pop edx
00373034 0FB642 FF movzx eax, byte ptr [edx-1]
00373038 03D0 add edx, eax
0037303A 42 inc edx
0037303B 83C7 04 add edi, 4
0037303E 59 pop ecx
0037303F ^ E2 CA loopd short 0037300B
00373041 ^ EB 93 jmp short 00372FD6
00373043 8B85 BC020000 mov eax, dword ptr [ebp+2BC]
00373049 83F8 01 cmp eax, 1
0037304C 75 27 jnz short 00373075
0037304E 8BBD C4020000 mov edi, dword ptr [ebp+2C4]
以下是作者按Alt+F9返回的地址,给各位对照一下:
00033031 8907 mov dword ptr ds:[edi], e>; ntdll.RtlDeleteCriticalSection
00033033 5A pop edx
00033034 0FB642 FF movzx eax, byte ptr ds:[edx>
00033038 03D0 add edx, eax
0003303A 42 inc edx
0003303B 83C7 04 add edi, 4
0003303E 59 pop ecx
0003303F ^ E2 CA loopd short 0003300B
00033041 ^ EB 93 jmp short 00032FD6
00033043 8B85 BC020000 mov eax, dword ptr ss:[eb>
00033049 83F8 01 cmp eax, 1
0003304C 75 27 jnz short 00033075
0003304E 8BBD C4020000 mov edi, dword ptr ss:[eb>
另外这个软件有自校验,发现自身被修改后会自动注销系统
以上是我的脱壳记录,请高手指点,不知道什么地方错了
还忘高手指点
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)