如何在delphi编的软件(没有源程序)中加入或修改某一个按钮的功能?谢谢

解决方案 »

  1.   

    如果只是临时添加按钮可以用API去处理
    SetWindowLong(窗口句柄,GWL_WNDPROC,传递过程)
      

  2.   

    看是否加过壳,如果有先脱壳,没有加壳接着下面的步骤来:首先你用Delphi新建一个工程,然后放个按钮上去,用exescope打开编译过的这个程序,在Resource的RCDATA下TForm1见到控件属性
    object Button1: TButton
        Left = 300
        Top = 400
        Width = 100
        Height = 22
        Caption = 'Button1'
        TabOrder = 1
        OnClick = Button1Click
      end
    稍做修改以后,然后用exescope打开你要修改的这个软件,把上面那段复制到这里,保存以后完成了按钮的增加。接下来是处理事件,
    delphi控件事件指针可以用下面的结构表述:
    Type TControlProcedurePtr = packed record
         PtrCount  : Word;
         Ptr1      : TPtr;
         Ptr2      : TPtr;
         ......
         PtrN      : TPtr;    // n = PtrCount
         FrmName   : PChar;
    end;type TPtr = packed record
         TPtrLen    : Word;
         Ptr        : Dword;
         PtrName    : PChar;
    end;    添加事件指针,最重要的就是计算清楚:如何通过缩小原有Tptr结构的长度,使得加入新指针TPtr结构后整个TControlProcedurePtr长度仍旧保持不变。    通过上述结构,我们知道TPtr结构最短长度为8字节,然后你查看是否还有8个字节的空为,如果没有,你用LoadPE增加一段空间出来,然后在hex workshop添加OnClick = D。保存以后事件增加成功了。最后是实现函数功能,你可以采用把函数功能写到一个DLL文件里面,然后在刚刚增加的按钮事件里面增加对DLL的调用,再调用DLL提供的接口。
    通过另外写一个程序,在要修改的程序里面增加一个新区块,把函数函数写到这个新的区块里面,然后在事件里面调用就可以了。成功与否看你的逆向工程知识了。