IDA pro的使用总结

目前知道的快捷键:

  • 双击某个函数进入其中
  • 双击进入某个函数后,按ESC返回上一级函数
  • 在返回上一级函数后,按CTRL+ENTER进入之前的下一级函数
  • 在汇编界面按 ;进行注释,在C语言界面按/进行注释
  • 在注释完之后按CTRL+ENTER确定注释,手点确定确实累
  • 在graph视图模式按F5从汇编切换到C语言
  • 在graph视图模式,当光标在某个函数框里时,按空格键切换汇编和graph视图
  • 右键左边function视图可以看到Edit function 可以修改颜色,标记自己发现的比较重要的函数。(也可以在graph的代码界面右键进行颜色标记)

几个重要的视图:

  • 被引用、和引用的网络图,这个在主视图-graph视图-右键菜单的倒数几项里
  • 然后就是Proximity browser视图,这个很好用,直接把每个功能模块抽象成一个函数名(有的函数名仍是stu_xxxx),而且点击某个函数可以进入,点击当前的顶层函数名,还可以找到调用他的链接。
  • 然后是左边的function视图,可以ctrl+F搜索某个函数,有些都是stu、有些是引入的,这个也很重要,用来进入键盘、文件函数的内部,然后在Proximity browser视图逐级往上找调用它的函数。

现在知道的逆向思路(学习参考qhy做法)

  • 对于键盘来说

    • 在Import导入函数视图中,按CTRL+F,搜索框搜索key这个关键字。可以看到相关的引入函数

    • 现在已知的关键函数有:

      • SHORT GetAsyncKeyState(int vKey);直接侦测键盘的硬件中断,返回key status. 然后判断返回值的最高位是不是1,如果是表示这个处于按下状态

      • SHORT GetKeyState( int nVirtKey ); 从windows消息队列中取得键盘消息,返回key status.

        nVrtKey:定义一虚拟键。若要求的虚拟键是字母或数字(A~Z,a~z或0~9),nVirtKey必须被置为相应字符的ASCII码值,对于其他的键,nVirtKey必须是一虚拟键码。

        GetKeyState函数是用来获取指定的虚拟键码的按键的状态。返回码的高位显示当前是否有键被按下,低位(0位)则显示NumLock、CapsLock、ScrollLock的状态(ON或OFF,为ON时键盘指示灯亮)。即高位为1,返回值小于0,说明有键按下

    • 然后在function视图中搜索GetKeyState这个函数,可以看到一些函数块,点击进去,在主页面可以看到点击出来的函数块,开启Proximity browser视图,然后就可以级往上找调用它的函数。

    • 然后看到可能是比较重要的,可以切换到graph的汇编视图来,或者F5的C语言视图来查看代码进行分析。