对照前辈的脱壳文章:
标 题: 手脱Armadillo 3.00a - 3.61单进程壳
作 者: wer412
时 间: 2005-06-15,15:06
链 接: http://bbs.pediy.com/showthread.php?t=14498
进行学习能找到OEP并且脱壳但是脱壳后的文件提示错误无法运行请各位老师指点
下面是我的脱壳记录:
设置Ollydbg,忽略所有异常
OD载入
0045C000 > 60 PUSHAD
0045C001 E8 00000000 CALL msniffer.0045C006
0045C006 5D POP EBP
0045C007 50 PUSH EAX
0045C008 51 PUSH ECX
0045C009 EB 0F JMP SHORT msniffer.0045C01A
0045C00B B9 EB0FB8EB MOV ECX,EBB80FEB
0045C010 07 POP ES ; 段寄存器修饰
0045C011 B9 EB0F90EB MOV ECX,EB900FEB
0045C016 08FD OR CH,BH
0045C018 EB 0B JMP SHORT msniffer.0045C025
0045C01A F2: PREFIX REPNE: ; 多余前缀
下HE GetModuleHandleA 断点SHIFT+F9运行6次
7C80B6A1 > 8BFF MOV EDI,EDI
7C80B6A3 55 PUSH EBP
7C80B6A4 8BEC MOV EBP,ESP
7C80B6A6 837D 08 00 CMP DWORD PTR SS:[EBP+8],0
7C80B6AA 74 18 JE SHORT kernel32.7C80B6C4
7C80B6AC FF75 08 PUSH DWORD PTR SS:[EBP+8]
7C80B6AF E8 C0290000 CALL kernel32.7C80E074
7C80B6B4 85C0 TEST EAX,EAX
7C80B6B6 74 08 JE SHORT kernel32.7C80B6C0
堆栈显示:
0012D754 00AF4E83 /CALL 到 GetModuleHandleA 来自 00AF4E7D
0012D758 0012D890 \pModule = "kernel32.dll"
1
0012D754 00AF4E83 /CALL 到 GetModuleHandleA 来自 00AF4E7D
0012D758 0012D890 \pModule = "user32.dll"
2
0012D754 00AF4E83 /CALL 到 GetModuleHandleA 来自 00AF4E7D
0012D758 0012D890 \pModule = "MSVBVM60.DLL"
3
0012D018 66001BC5 /CALL 到 GetModuleHandleA 来自 66001BBF
0012D01C 6600F4D0 \pModule = "kernel32.dll"
4
0012D00C 6600281E /CALL 到 GetModuleHandleA 来自 66002818
0012D010 6600F4FC \pModule = "KERNEL32"
0012D014 660027CE 返回到 660027CE 来自 66002813
0012D018 6600279F 返回到 6600279F
0012D01C 66001C6A 返回到 66001C6A 来自 66002794
0012D020 66001B64 返回到 66001B64 来自 66001B90
5
0012D004 660031CE /CALL 到 GetModuleHandleA 来自 660031C8
0012D008 00000000 \pModule = NULL
0012D00C 66003138 返回到 66003138 来自 660031BD
6
0012D754 00AF4E83 /CALL 到 GetModuleHandleA 来自 00AF4E7D
0012D758 0012D890 \pModule = "advapi32.dll"
alt+f9返回
00AF4E83 8B0D 00B8B100 MOV ECX,DWORD PTR DS:[B1B800]
00AF4E89 89040E MOV DWORD PTR DS:[ESI+ECX],EAX
00AF4E8C A1 00B8B100 MOV EAX,DWORD PTR DS:[B1B800]
00AF4E91 393C06 CMP DWORD PTR DS:[ESI+EAX],EDI
00AF4E94 75 16 JNZ SHORT 00AF4EAC
00AF4E96 8D85 B4FEFFFF LEA EAX,DWORD PTR SS:[EBP-14C]
00AF4E9C 50 PUSH EAX
00AF4E9D FF15 C030B100 CALL DWORD PTR DS:[B130C0] ; kernel32.LoadLibraryA
00AF4EA3 8B0D 00B8B100 MOV ECX,DWORD PTR DS:[B1B800]
00AF4EA9 89040E MOV DWORD PTR DS:[ESI+ECX],EAX
00AF4EAC A1 00B8B100 MOV EAX,DWORD PTR DS:[B1B800]
00AF4EB1 393C06 CMP DWORD PTR DS:[ESI+EAX],EDI
00AF4EB4 0F84 AD000000 JE 00AF4F67 mJ跳--改为JMP
00AF4EBA 33C9 XOR ECX,ECX
00AF4EBC 8B03 MOV EAX,DWORD PTR DS:[EBX]
00AF4EBE 3938 CMP DWORD PTR DS:[EAX],EDI
00AF4EC0 74 06 JE SHORT 00AF4EC8
00AF4EC2 41 INC ECX
00AF4EC3 83C0 0C ADD EAX,0C
00AF4EC6 ^ EB F6 JMP SHORT 00AF4EBE
取消断点ALT+M打开内存镜像
Memory map, 项目 23
地址=00401000
大小=00027000 (159744.)
属主=msniffer 00400000
区段=.text
类型=映像 01001002
访问=R
初始访问=RWE
F2下断点
SHIFT+F9运行
来到OEP
00423D7E 55 PUSH EBP
00423D7F 8BEC MOV EBP,ESP
00423D81 6A FF PUSH -1
00423D83 68 48C14200 PUSH msniffer.0042C148
00423D88 68 E83E4200 PUSH msniffer.00423EE8 ; JMP 到 msvcrt._except_handler3
00423D8D 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
00423D93 50 PUSH EAX
00423D94 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
00423D9B 83EC 68 SUB ESP,68
00423D9E 53 PUSH EBX
00423D9F 56 PUSH ESI
00423DA0 57 PUSH EDI
00423DA1 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
00423DA4 33DB XOR EBX,EBX
00423DA6 895D FC MOV DWORD PTR SS:[EBP-4],EBX
00423DA9 6A 02 PUSH 2
00423DAB FF15 18884200 CALL DWORD PTR DS:[428818] ; msvcrt.__set_app_type
00423DB1 59 POP ECX
00423DB2 830D 98BE4300 F>OR DWORD PTR DS:[43BE98],FFFFFFFF
00423DB9 830D 9CBE4300 F>OR DWORD PTR DS:[43BE9C],FFFFFFFF
00423DC0 FF15 1C884200 CALL DWORD PTR DS:[42881C] ; msvcrt.__p__fmode
使用LOADPE抓取。运行ImportREC,选择程序进程,填入OEP=23D7E,点击右键选择“Advanced Commands”-->“Get Api Calls ”-->选择“Get' Call[X]' ... ”-->“Show Invalid”剪掉两个无效函数,修复即可。
软件的下载地址:http://down3.zol.com.cn/28b9fcae6ce64e91e0b0f452cf0accd6/485d0832/bofang/msniffer_setup.exe
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课