首页 > 逆向调试 > 逆向分析中快速定位Delphi TThread线程函数代码

逆向分析中快速定位Delphi TThread线程函数代码

Delphi中对线程的操作封装了一个TThread类,没接触过Delphi的人来说跟踪线程函数毫无头绪,即便是对CreateThread函数下断点,依然会遇到层层包装。

TThread是个抽象类,有个Execute的抽象方法。使用时需要自己派生出一个新类,并重载Execute方法,也就是Delphi的线程函数了。网上似乎也没有文章介绍如何跟踪Delphi线程函数,本人经过测试找到了一个看上去似乎很不错的快速定位方法。下面介绍本人的方法:

(1)在IDA的Functions Window中单击标题栏Function Name对函数名进行排序,然后就可以快速找到Classes::TThread:DoTerminate(void),双击来到函数;
Delphi Classes::TThread::DoTerminate(void)
(2)查找Classes::TThread:DoTerminate(void)的交叉引用,一个一个找(通常为列表最后一个);
IDA中查找Classes::TThread::DoTerminate交叉引用
(3)在最后一个交叉引用的下方,即有一个dd offset sub_XXXXXX的定义,这个sub就是Execute线程函数了。
Classes::TThread::DoTerminate最后一个交叉引用

代码验证过程(加了一个字符串,如果IDA找不到字符串引用,可以用OD来定位):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
type
  TMyThread = class(TThread)
  protected
    procedure Execute; override;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TMyThread.Execute;
begin
  FreeOnTerminate := True;
  ShowMessage('TMyThread_Execute_Proc');
end;
 
procedure TForm1.btn1Click(Sender: TObject);
begin
  ShowMessage('Http://Www.ProgramLife.Net/');
  TMyThread.Create(False);
end;
 
end.

逆向分析中快速定位Delphi TThread线程函数代码


觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> 逆向分析中快速定位Delphi TThread线程函数代码
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



  1. 2012年7月14日23:57 | #1

    看起来你对IDA已经熟悉了,很牛呀,这个东西光是手册就厚的很呀,当时记得打开界面鼓捣了一会就给关了,很复杂。

    [回复]

    代码疯子 回复:

    @the5fire的技术博客, IDA还是比较复杂的东西,当前我只是懂点皮毛。 [em020]

    [回复]

  1. 本文目前尚无任何 trackbacks 和 pingbacks.