• 我们在哪一颗星上见过 ,以至如此相互思念 ;我们在哪一颗星上相互思念过,以至如此相互深爱
  • 我们在哪一颗星上分别 ,以至如此相互辉映 ;我们在哪一颗星上入睡 ,以至如此唤醒黎明
  • 认识世界 克服困难 洞悉所有 贴近生活 寻找珍爱 感受彼此

恶意代码技术理论:Delphi语言恶意代码分析

基于语言 云涯 3年前 (2021-01-14) 1673次浏览

1 Delphi启动过程

参考连接:

https://blog.csdn.net/sforiz/article/details/5427245

https://www.cnblogs.com/FKdelphi/p/12773388.html

https://www.cnblogs.com/windlog/p/12354270.html

 

program Project1

第一步:

  • _InitExe     windows调用Exe的入口
  • InitiateModule
  • _StartExe
  • SetExceptionHandler
  • InitUnits

 

第二步:

InitControls 的 initialization (初始化)部分

  • Mouse.create
  • Screen.create
  • Application.Create
  • AllocateHWnd
  • AllocateHWnd
  • MakeObjectInstance
  • StdWndProc
  • Instance^.FMethod := TMethod(AMethod);
  • AMethod==首次创建App时对应PopupControlProc
  • PMethod = ^TMethod;

 

第三步:

  • TApplication.Initialize;   初始化
  • TApplication.CreateForm创建窗体(空白窗体)    或者是   TFORM.CREATE(创建设计好的窗体) ; 
  • TApplication.Run;      启动消息循环  大概这就是主程序 类似于main函数
************************************************************
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.Run;
end.
************************************************************

 

第四步:

  • HandleMessage
  • TApplication.ProcessMessage
  • PeekMessage
  • TranslateMessage
  • DispatchMessageWi->
  • StdWndProc
  • TWinControl.MainWndProc
  • WindowProc: TWndMethod【TControl】
  • TControl.WndProc【初始化时指定FWindowProc := WndProc;】
  • TControl.WndProc
  • procedure TCustomForm.WndProc(var Message: TMessage);
  • 基于多态性调用父类TControl的WndProc
  • Dispatch->TObject.Dispath->消息回调函数
  • DefaultHandler

 

单个窗体:

  • –>程序启动 
  • –>执行 initialization 处的代码 
  • –>执行窗体的构造函数并创建相应窗体和单元中的对象(如拖拉的控件对象,全局变量等) 
  • –>执行 OnCreate 事件 
  • –>程序运行 
  • –>关闭主窗体(此处指调用主窗体的Close或点击主窗体的关闭按钮) 
  • –>执行 OnClose 事件
  • –>执行 OnDestroy 事件
  • –>执行 finalization 处的代码
************************************************************
unit Unit1;

interface



//InitUnits
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

//TApplication.Create
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

//OnClose —— 在点击关闭按钮或执行该事件时调用。 
//OnCreate —— 在窗体创建时调用。(我的感觉:该事件是在窗体创建之后,即执行构造函数后才执行的) 
//OnDestroy —— 在窗体销毁时调用,一般用来销毁程序员自己定义(自己定义、创建,而不是直接从控件板拖拉过来的控件)的对象、变量、指针等等。 

//创建窗体
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage('1 FormCreate');
end;

//销毁窗体 
procedure TForm1.FormDestroy(Sender: TObject); 
begin 
ShowMessage('1 Destroy'); 
end; 



//initialization —— 在单元中放在文件结尾前,包含用来初始化单元的代码,它在主程序运行前运行并且只运行一次。 
//finalization —— 在单元中放在 initialization 和 end. 之间,包含了单元退出时的代码。在程序退出时运行并且只运行一次。 

initialization ShowMessage('1 ini');{单元初始化代码} 
finalization ShowMessage('1 final');{单元退出时的代码} 
end. 
************************************************************

 

2 修复Delphi符号

IDA Pro默认并不会对Delphi有很好的符号解析效果,必须加载额外符号来修正。

  • 下载该地址的IDR:https://github.com/huettenhain/dhrake/releases/tag/INITIAL
  • 或者可以自己构建官方IDR:

知识库下载地址:https://www.dropbox.com/sh/9ran313nidqtagb/AADl_m_9GVYSiXUviZtDQWQHa?dl=0

程序下载地址:https://github.com/crypto2011/IDR/releases

  • 加载Delphi程序
  • Tools  —> IDC Generator  产生IDC脚本
  • IDA加载IDC脚本即可进行符号修正
  • 使用Tools —>  Map Generator 来创建Map文件供x64dbg使用
  • x64dbg使用SwissArmyKnife插件来加载map文件

 

 

 

 

 


云涯历险记 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:恶意代码技术理论:Delphi语言恶意代码分析
喜欢 (0)