define dd rva on IDAPro
发布日期:2021-06-30 22:10:33 浏览次数:2 分类:技术文章

本文共 3506 字,大约阅读时间需要 11 分钟。

前言

IDAPro载入PE分析后,会标出 dd rva GetOpenFileNameA 这样的助记符地址.

在这样的助记符地址上,按h键(一不小心就按一下), 助记符号地址变成了dd 1234h这样的rva地址.
如果再想变成好记的助记符地址,就麻烦了,IDAPro好像没有提供像k那样的快捷键.
现在正在分析一个加壳的程序,如果不改回来,就轮到我难受了. e.g. 加壳程序将引入表的IAT抹掉了,是动态恢复的, 在分析时,__IMPORT_DESCRIPTOR_KERNEL32中的DLL名称和NAME的RVA如果改不成dd rva GetOpenFileNameA这样一目了然的助记符, 静态分析时,会麻烦很多. 毕竟人不是机器. 要不然,要助记符干嘛.
经过试验,圈住rva地址, 用ALT+F1(自定义标注)可以改回rva地址的助记符地址的型式.

记录

先看原来的样子(IDA自动分析的结果)

.text:004066D6 ; ---------------------------------------------------------------------------.text:004066D9                 db 0.text:004066DA                 db    0.text:004066DB                 db    0.text:004066DC __IMPORT_DESCRIPTOR_USER32_DLL dd rva INT_USER32_DLL.text:004066E0                 dd 0                    ; Time stamp.text:004066E4                 dd 0                    ; Forwarder Chain.text:004066E8                 dd rva szUser32_dll     ; DLL Name.text:004066EC                 dd rva GetWindowLongW   ; Import Address Table.text:004066F0 __IMPORT_DESCRIPTOR_KERNEL32 dd rva INT_KERNEL32_dll ; Import Name Table.text:004066F4                 dd 0                    ; Time stamp.text:004066F8                 dd 0                    ; Forwarder Chain.text:004066FC                 dd rva aKernel32_dll    ; DLL Name.text:00406700                 dd rva HeapAlloc        ; Import Address Table.text:00406704 .text:004201E8 off_4201E8      dd rva word_40127E.text:00406704 __IMPORT_DESCRIPTOR_RPCRT4 dd rva INT_RPCRT4_dll ; Import Name Table.text:00406708                 dd 0                    ; Time stamp.text:0040670C                 dd 0                    ; Forwarder Chain.text:00406710                 dd rva aRpcrt4_dll      ; DLL Name.text:00406714                 dd rva IUnknown_Release_Proxy ; Import Address Table.text:00406718 __IMPORT_DESCRIPTOR_COMDLG32 dd rva off_42022C ; Import Name Table.text:0040671C                 dd 0                    ; Time stamp.text:00406720                 dd 0                    ; Forwarder Chain.text:00406724                 dd rva aComdlg32_dll    ; DLL Name.text:00406728 .idata:00401580 ; BOOL __stdcall GetOpenFileNameA(LPOPENFILENAMEA).text:00406728                 dd rva GetOpenFileNameA ; Import Address Table

这里用到的助记符都是rva地址.

假设手欠, 在dd rva GetOpenFileNameA的GetOpenFileNameA上按了一下h, 将rva地址变成了rva地址的16进制值.

.text:00406718 __IMPORT_DESCRIPTOR_COMDLG32 dd rva off_42022C ; Import Name Table.text:0040671C                 dd 0                    ; Time stamp.text:00406720                 dd 0                    ; Forwarder Chain.text:00406724                 dd rva aComdlg32_dll    ; DLL Name.text:00406728 .idata:00401580 ; BOOL __stdcall GetOpenFileNameA(LPOPENFILENAMEA).text:00406728                 dd 1580h                ; Import Address Table

现在看起来就很难受了, 现在改回来.

1580h的VA地址00401580h, 去00401580h看看

.idata:00401580 ; Imports from COMDLG32.dll.idata:00401580 ;.idata:00401580 ; BOOL __stdcall GetOpenFileNameA(LPOPENFILENAMEA).idata:00401580                 extrn GetOpenFileNameA:dword.idata:00401584 ; DWORD __stdcall CommDlgExtendedError().idata:00401584                 extrn CommDlgExtendedError:dword

在.text:00406728圈住1580h, 右击,选择菜单 Menual…

这里写图片描述
这里写图片描述
填入 rva GetOpenFileNameA, 不要选check operand, 点击确定
助记符回来了.

.text:00406728                         .idata:00401580 ; BOOL __stdcall GetOpenFileNameA(LPOPENFILENAMEA).text:00406728 80 15 00 00                             dd rva GetOpenFileNameA ; Import Address Table

在手工添加rva 标号时,如果标号不存在(按h键时,IDA可能直接将符号删了(加入一个dowrd_xx标号,只有一处在引用)),可以去对应的目标VA处,添加一个标号,再ALT+F1, 恢复dd rva 助记符.

转载地址:https://lostspeed.blog.csdn.net/article/details/52718599 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:脱壳-cerber3
下一篇:OD的字符串断点

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月07日 04时49分27秒