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

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

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

注:请自备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)
    


[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

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