我有一个包装LoadLibraryGetProcAddress二重奏以动态解析功能的恶意软件示例。调用此包装器后,立即调用存储在eax中的值(即函数名)。字符串已加密,对我而言,反转加密算法太困难了。相反,我写了一个python脚本来设置断点,其中提到了call eax指令。一切都很好,我从eax获得了动态导入的函数的地址。问题是我需要它们可读。我知道如何通过调用ln address将地址解析为widbg中的函数名称。但是我不想整天坐着,将所有649种进口产品一一复制到windbg控制台上。我查找了windbg的脚本功能,但无法编写任何可完成此工作的东西。

感谢

评论

我查找了windbg的脚本功能,但无法编写任何能胜任的工作。您可以通过pykd将python与windbg一起使用

#1 楼

我不知道我是否正确理解了您的查询,但是如果您想记录传递给getproc地址的函数名称,可以在windbg中这样记录它们:

C:\>cdb calc

Microsoft (R) Windows Debugger Version 10.0.15063.468 X86

ntdll!LdrpDoDebuggerBreak+0x2c:
775605a6 cc              int     3

0:000> bp KERNELBASE!GetProcAddress ".printf \"%ma\n\",poi(@esp+8);gc"

0:000> bl
 0 e 756c6c81     0001 (0001)  0:**** KERNELBASE!GetProcAddress ".printf \"%ma\n\",poi(@esp+8);gc"


0:000> g

ImmWINNLSEnableIME
ImmWINNLSGetEnableStatus
ImmSendIMEMessageExW
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
CtfImmTIMActivate
CtfImmRestoreToolbarWnd
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
LpkPSMTextOut
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ModLoad: 740c0000 740d3000   C:\Windows\system32\dwmapi.dll
DwmIsCompositionEnabled
GetLayout
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ModLoad: 75590000 7559c000   C:\Windows\system32\CRYPTBASE.dll
SystemFunction036
CLSIDFromOle1Class
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ModLoad: 73b70000 73bac000   C:\Windows\system32\oleacc.dll
EventWrite
EventRegister
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
BufferedPaintStopAllAnimations

ntdll!DbgBreakPoint:
774f4108 cc              int     3
0:004> q
quit:

C:\>


afaik windbg还将地址解析为其函数名称

0:000> rM0
calc!WinMain+0x6b:
001316a0 ffd7            call    edi {kernel32!GetModuleHandleWStub (7737ccac)}


评论


谢谢,但是我想特别知道如何将eax的值解析为函数名。例如,如果有0x77 ******之类的地址,则IDA会执行此操作。

–rustam Shirinov
17-10-28在20:58

据我所知,windbg还将地址解析为函数名称,请参见编辑

– blabb
17-10-29在3:48

我知道这一点。我希望windbg对所有649个地址执行此操作,而我不想手动执行。我也不知道idapython是否可行。

–rustam Shirinov
17-10-29在7:12

您的查询仍然不清楚,您必须在所有调用eax上设置断点,以进行模式匹配并收集模式匹配的地址,您可以使用#call * eax range然后使用.foreach,结果中没有任意方法任何调试器都可以自动中断呼叫eax,如果您知道每次最佳选择是获取getproc地址,则您需要根据一些手动工作来执行每条指令或预设bps

– blabb
17-10-29在7:40

发现windbg具有.for循环,并完成了工作谢谢。您的回答很有帮助。

–rustam Shirinov
17-10-29在9:19