PSAPI.DLL。该库包含基于NT技术的OS的重要的面向过程和模块的功能。正常调试几乎是不可能的。您要继续吗?
然后我无法调试程序。
我可以在主机Windows 7操作系统上运行相同的exe,而不会出现任何错误。在Windows NT上,我可以运行Ollydbg 1.10。但是,当我尝试在Ollydbg 1.10中调试文件时,出现错误“尝试更改eip或将异常传递给程序”。搜索之后,我发现我应该安装Ollydbg2。
我使用Windows NT的原因:我正在调试一种恶意软件,并且仅在Windows NT上有效。但是如上所述,它给出了错误“尝试更改eip或将异常传递给程序”。
#1 楼
我相信您可以在这里找到答案的主要部分:http://www.ollydbg.de/download.htm相关的位是:
该发行版包含PSAPI.DLL和DBGHELP.DLL文件,它们是Microsoft®可再发行文件。这些文件应仅安装在软件所在的目录中。您只能在Windows NT(R)4.0上使用提供的PSAPI.DLL。您不得与软件分开分发PSAPI.DLL或DBGHELP.DLL。
我希望它能在您当前所在的目录中正确找到PSAPI.DLL。正在执行Olly。验证文件是否存在。如果可以,但仍然无法通过,建议您将其复制到
C:\WINNT\SYSTEM
,然后再进行一次操作。听起来很老,所以不能这么秘密!它实际上可以使我们为您提供更具体的答案,甚至可以自己尝试解决。评论
我发现我的Windows NT在解压缩的Ollydbg文件夹或SYSTEM文件夹中都没有psapi.dll。因此,我尝试了将dll从主机窗口7复制到Windows NT ollydbg(尝试一下),然后将其复制到SYSTEM文件夹中,但是仍然无法使用。那么我的Windows NT OS有问题吗?顺便说一句,我正在调试多态恶意软件Bolzano。您可以从oc.gtisc.gatech.edu:8080/search.cgi?search=bolzano获取其示例
–user1744108
13年7月15日在6:51
不。您拥有的Ollydebug存档有问题。 PSAPI.dll应该在zip文件中。我建议您下载一个新副本。
– David Hoelzer
13年7月15日在8:44
Ollydbg版本1带有psapi.dll。但是,版本2没有
– PSS
13年7月15日在12:44
我相信他说他正在使用DLL附带的Olly 1.10。
– David Hoelzer
13年7月15日在12:45
我使用的存档文件中包含PSAPI.dll的Olly 1.10,但如果使用Olly 2,则不是。如Jason所建议,病毒有可能正在使用反调试技术,为什么我会“尝试更改eip或如果是Olly 1.10,则将异常传递给程序”错误。或病毒本身不能在Windows NT上运行。但是我发现了一篇关于病毒spth.virii.lu/29a4/29A-4.505.txt的文章,查看病毒的汇编代码后,我认为它正在Windows NT上运行。我的目标是在解密后获得病毒体(执行实际感染的代码)。
–user1744108
13年7月15日在14:34
#2 楼
我没有NT4 vm
您的链接也指向多个样本
提供准确的
MD5/SHA/some verifiable checksum
样本可以消除模棱两可的情况,同时回答这里是使用基本十六进制编辑器的一个小步骤一个基本的反汇编程序,说明为什么可能会生成该异常。
using winxp sp3 vm hxd hexeditor and ollydbg 1.10 in a basic dis-aaseembler mode
下载了openmalware中的第一个样本
MD5: f40547d521818f7c34754710f8603d5a
SHA1: f9e3c0e824dda984046b4eedeef06f938805983b
SHA256: a9beda469c835abbf416ea8da5462170eafdef215b96ac68523045600883855b
OCID: 245478739
Original Filename: Virus.Win32.Bolzano.5572
拖放到
vpc 2007 xp sp3 vm
/>使用感染的给定密码解压缩
拖放到
hxd hexeditor and verified checksums
中MD-5: F40547D521818F7C34754710F8603D5A
SHA-1: F9E3C0E824DDA984046B4EEDEEF06F938805983B
SHA-256: A9BEDA469C835ABBF416EA8DA5462170EAFDEF215B96AC68523045600883855B
所有三个校验和都可以确定
WORD MajorSubsystemVersion
WORD MinorSubsystemVersion
Contains the minimum subsystem version required to run the executable.
A typical value for this field is 3.10 (meaning Windows NT 3.1).
http://msdn.microsoft.com/zh-cn/library/ms809762.aspx
使用ollydbg作为反汇编程序
view -> file -> malware.exe -> right click -> speacial -> pe header
ctrl + g 100
pe标头显示
00000148 0300 DW 0003 ; MajorSubsystemVersion = 3
0000014A 0A00 DW 000A ; MinorSubsystemVersion = A (10.)
00000200 00100000 DD 00001000 ; VirtualSize = 1000 (4096.)
00000204 00100000 DD 00001000 ; VirtualAddress = 1000 <-----
00000208 00020000 DD 00000200 ; SizeOfRawData = 200 (512.)
0000020C 00060000 DD 00000600 ; PointerToRawData = 600
00000228 00200000 DD 00002000 ; VirtualSize = 2000 (8192.)
0000022C 00200000 DD 00002000 ; VirtualAddress = 2000
00000230 00200000 DD 00002000 ; SizeOfRawData = 2000 (8192.)
00000234 00080000 DD 00000800 ; PointerToRawData = 800 <------
00000128 00100000 DD 00001000 ; AddressOfEntryPoint = 1000
,所以我们可以从0x600开始拆卸
ctrl+g 600 right click -> disassemble
拆卸
1. 00000600 60 PUSHAD
2. 00000601 E9 FA0F0000 JMP 00001600
我们前面看到的部分的虚拟大小为1000
,所以跳转到下一个本节
下一节从0x800开始,如我们先前所见
ctrl+g 800 disassemble
ctrl + g 805反汇编
00000800 E8 D50E0000 CALL 000016DA (402eda) 400000 +2000 + (16da-800)
sets the base of kernel32.dll to edi
表示字节s Canning puproses 查看从10c00开始的所有100个字节是否为零
如果它们为零,则设置
kernel base to 77f00000
(win nt k32 base no aslr固定)否则为
bff70000
(win 95/98 kernel32 base no固定为aslr)将esi偏移到某个偏移量
000016DA E8 00000000 CALL 000016DF $+5 (402edf) 400000+ 2000+ (16df-800)
000016DF 5D POP EBP ebp will be 402edf
000016E0 81ED DF0E0000 SUB EBP, 0EDF ebp will be 402000
000016E6 C3 RETN will return to 805 or 402005
比较k32 dll中的
byte pattern
对于
95/98
此模式00000805 BF 000C0100 MOV EDI, 10C00
0000080A B9 00010000 MOV ECX, 100
0000080F 33C0 XOR EAX, EAX
00000811 F3:AE REPE SCAS BYTE PTR ES:[EDI]
scan all bytes from 10c00 to 10d00 for 0
00000813 75 0C JNZ SHORT 00000821
if all not zero go to win95/98
00000815 BE 2D110000 MOV ESI, 112D win nt
0000081A BF 0000F077 MOV EDI, 77F00000 k32 base
0000081F EB 0A JMP SHORT 0000082B
00000821 BE 25110000 MOV ESI, 1125 win 95 / 98
00000826 BF 0000F7BF MOV EDI, BFF70000 k32 base
用于
win nt
此模式( esi = 1125 or 112d) ( ebp = 402000) 40312d/25 1925 or 192d (800+1125 or 112d)
0000082B 03F5 ADD ESI, EBP
(so esi will be either 403125 or 40312d)
0000082D 89BD C8170000 MOV DWORD PTR SS:[EBP+17C8], EDI
saves the pointer kernel base guess why ??
00000833 BA 00000400 MOV EDX, 40000
00000838 FC CLD
00000839 B9 08000000 MOV ECX, 8
0000083E 56 PUSH ESI
0000083F 57 PUSH EDI
00000840 F3:A6 REPE CMPS BYTE PTR ES:[EDI], BYTE PTR>
00000842 5F POP EDI
00000843 5E POP ESI
跳转到正常或不正常
00001925 C2 0400 RETN 4
00001928 57 PUSH EDI
00001929 6A 22 PUSH 22
0000192B 2BD2 SUB EDX, EDX
如果发现模式将转到850
其他91b
在91b处有
0000192D C2 0400 RETN 4
00001930 55 PUSH EBP
00001931 8B4C24 0C MOV ECX, DWORD PTR SS:[ESP+C]
,这将返回到920(请参见上文,回到402005)
00000844 74 0A JE SHORT 00000850 `right user with right os jump`
00000846 47 INC EDI
00000847 4A DEC EDX
00000848 0F84 CD000000 JE 0000091B `wrong user with wrong os jump`
0000084E ^ EB E9 JMP SHORT 00000839
这将重新启动到内核或退出线程地址(pushad == 0x20)
其他都是垃圾
exe在204f到224f处不包含任何内容,只需通过retn退出
/>(184f + 800 ecx = 40两个lodsd = 80 dwords = 200字节= 224f)
如果该区域与retn值比较为ok-5(请参见edx,5)应用程序将崩溃,并且ollydbg会发出警告
0000091B E8 BA0D0000 CALL 000016DA
ollydbg将显示不知道如何执行步骤,因为地址0
的内存不可读,请尝试更改Eip或如果到达此处则将异常传递给程序
在850或402050处反汇编
00000920 8B5424 20 MOV EDX, DWORD PTR SS:[ESP+20]
00000924 B9 40000000 MOV ECX, 40
00000929 83EA 05 SUB EDX, 5
0000092C BE 4F180000 MOV ESI, 184F
16ee处的字节模式
00000931 03F5 ADD ESI, EBP
00000933 AD LODS DWORD PTR DS:[ESI]
00000934 3BC2 CMP EAX, EDX
00000936 AD LODS DWORD PTR DS:[ESI]
00000937 74 04 JE SHORT 0000093D
00000939 ^ E2 F8 LOOPD SHORT 00000933
0000093B 61 POPAD
0000093C C3 RETN
0000093D 8985 47010000 MOV DWORD PTR SS:[EBP+147], EAX
00000943 61 POPAD
00000944 EB 00 JMP SHORT 00000946
00000946 68 00000000 PUSH 0 <---- apllication will crash
0000094B C3 RETN eip not valid or 0
进一步拆卸
00000850 83C7 03 ADD EDI, 3 add 3 to bytepattern address
00000853 BE E70E0000 MOV ESI, 0EE7
00000858 03F5 ADD ESI, EBP 402ee7 = 16e7 (ee7 -800 + 1000)
0000085A 8BC6 MOV EAX, ESI
0000085C 83C0 07 ADD EAX, 7 16e7+7 = 16ee
尝试向前走:)
评论
如果您修补kernel32基址以适合xp kernel32基址@ EBP + 17C8(即说0x7c800000而不是硬编码77f00000),则可以强制上述示例在xp vm中运行,而无需使用NT(如果您猜想可以将EDI调整为正确的地址并感染XP
– blabb
13年7月16日在9:37
我只是注意到您在评论中提到的文章并没有谈论该病毒,它包含该病毒的完整源代码。如果可能,还可以将问题的标题更改为类似如何在nt vm或类似物中使用ollydbg 1.10调试bolzano病毒的方法
– blabb
13年7月16日在9:44
我认为Bolzano病毒无法在Windows NT版本上运行。我试图直接执行可执行的恶意软件文件,但遇到访问冲突异常。
–user1744108
13年7月19日在6:13
我正在使用Windows NT 4.0的sp 6。我找到了liutilities.com/malware/computer-virus/w32-bolzano文章。这里提到“它还会攻击Windows NT文件系统。但是,如果您具有更高版本的Windows NT,例如带有Service Pack的3.50至4.0,则不必担心此病毒的攻击”。那是因为操作系统,我得到了错误吗?
–user1744108
13年7月19日在14:12
当我调试恶意软件时,我将转至“正确的操作系统,正确的用户跳转”,因为当我将断点设置为00000850 83C7 03 ADD EDI 3时,调试器将进入此步骤。但是然后当程序到00000867 FFD7 CALL NEAR EDI附近并且api被称为“ FindNextFileA”时,我得到了与EIP相关的错误。
–user1744108
13年7月22日在3:43
评论
您是否尝试过将异常传递给程序?恶意软件是否按预期退出或继续?是的,即使在Ollydbg 1.10的情况下,我也试图通过该异常。但是,然后我的EIP指向地址00000000,然后我继续收到相同的错误“尝试更改eip或将异常传递给程序”。 Ollydbg的版本有问题吗?由于我正在使用1.10。我搜索了此错误,并建议使用2.0。但是在2.0的情况下,我得到上面提到的dll错误
您是否尝试过在没有调试器的情况下使用动态分析工具来确保该恶意软件甚至可以在Windows NT 4.0上运行?如果它可以在OllyDbg外部正确运行,但不能在OllyDbg内部正确运行,则很可能是由于恶意软件中的反调试代码,而不是OllyDbg本身的错误。
我认为Bolzano病毒无法在Windows NT版本上运行。我尝试直接执行可执行的恶意软件文件,但遇到访问冲突异常。