首页
社区
课程
招聘
[原创][原创]基于QT的IDA python插件
发表于: 2015-12-4 21:18 6076

[原创][原创]基于QT的IDA python插件

2015-12-4 21:18
6076
工作之后鲜有时间空余,上论坛且是奢侈,遑论发贴。
那么直入主题,这是一个辅助建立结构体的小插件,近来用得较多,有此一闲便分享出来,以飨看官。

注:请自备PySide



代码
import  sys
import  traceback
import  idc
from  PySide  import  QtGui
from  PySide  import  QtCore
from  PySide.QtCore  import  Qt



def addstruc(name,size):
  id=AddStrucEx(-1,name,0)
  AddStrucMember(id,"vtbl",0,0x20000400,-1,4)
  i=4
  length=size-1
  for i in range(length):
    AddStrucMember(id,"field_"+str(hex(i))[2:].upper(),i,FF_DWRD,-1,4)
  print "Done"

class MakeUserStruct(QtGui.QDialog):
  
  def on_ok_button(self):
    self.done(QtGui.QDialog.Accepted)
    name=self.nameText.text()
    size=self.sizeText.text()
    addstruc(name.encode("ascii"),int(size.encode("ascii")))
    idaapi.set_script_timeout(0)

  def populate_form(self):

    layout=QtGui.QVBoxLayout()
    strinfo="this plugin will help you create a struct"
    layout.addWidget(QtGui.QLabel(strinfo))

    # struct
    stlayout=QtGui.QHBoxLayout()
    self.nameText=QtGui.QLineEdit()
    self.nameText.setReadOnly(False)
    stlayout.addWidget(self.nameText)
    self.sizeText=QtGui.QLineEdit()
    self.sizeText.setReadOnly(False)
    stlayout.addWidget(self.sizeText)
    groupBox=QtGui.QGroupBox("please input name && size")
    groupBox.setLayout(stlayout)
    layout.addWidget(groupBox)

    # button
    buttonOk=QtGui.QPushButton("&OK")
    buttonOk.setDefault(True)
    buttonOk.clicked.connect(self.on_ok_button)
    layout.addWidget(buttonOk)

    buttonCel=QtGui.QPushButton("&Cancel")
    buttonCel.clicked.connect(self.on_ok_button)
    layout.addWidget(buttonCel)

    # setup
    hlayout=QtGui.QHBoxLayout()
    hlayout.addLayout(layout)
    self.setLayout(hlayout)

  def __init__(self, parent=None):
          QtGui.QDialog.__init__(self, parent, QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowTitleHint)
          self.setWindowTitle("Make User Struct")
    self.populate_form()

if __name__ == '__main__':

    dlg = MakeUserStruct()    
    t = idaapi.set_script_timeout(0)
    dlg.exec_()    
    idaapi.set_script_timeout(t)
    


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 107
活跃值: (404)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢分享。。。。。。。。。
2015-12-4 21:30
0
雪    币: 12362
活跃值: (5128)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
哎,之前玩QT肿么都搞不窗口,放弃了
2015-12-4 22:27
0
雪    币: 6
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢楼主分享技术贴。
2015-12-5 22:41
0
雪    币: 135
活跃值: (719)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢分享!
创建结构体的话,最方便是用local type窗口(大致名称),可以直接输c语言结构体定义。
较多要定义时,用文件菜单的load xxx中,parse header file(大致位置)更方便。
2015-12-6 09:37
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
你说的不失为一种好的方法,在创建大结构体时这个脚本的优势可见分晓
2015-12-6 11:44
0
游客
登录 | 注册 方可回帖
返回
//