女萝岩 发表于 2020-1-27 15:36

分析delphi程序的一些心得

本帖最后由 女萝岩 于 2020-1-27 15:37 编辑


1.delphi程序中的字符串大概是这么个结构

用c语言表示
struct
{
    int a;//不知道是做什么的
    int flag;//1或者-1
    int length//字符串大小
    char str[];//不以\0结尾的数组
}

在OD或者IDA中经常能看到类似下面的获取字符串大小的代码

lea,edx,var
call GetString//调用完之后,edx指向字符串
mov eax,
test eax,eax,//判断指针是否为0
jz return
mov ebx,// eax指向字符串,根据结构,就是字符串的大小


2.delphi程序获取编辑框内容用GetDlgItemText GetWindowText,SendMessage 都是断不下来的,因为它是用自己内部的函数获取的。获取流程先是传递一个指针,用来存放buffer的地址
再传进去一个对象的地址,对象是用ebx寻址的,后面再根一个call
特征码如下
8D????8B83????????E8????????
在OD中搜索这段特征码很快就能定位到类似string a:=Edit1.Text这种代码了。

冥界3大法王 发表于 2020-1-28 11:59

本帖最后由 冥界3大法王 于 2020-1-28 12:02 编辑


@女萝岩
试了下,不好用,定位不到。 https://attach.52pojie.cn/forum/202001/18/192444iczj0cqnnjn1e9vx.gif

女萝岩 发表于 2020-1-28 15:15

冥界3大法王 发表于 2020-1-28 11:59
@女萝岩
试了下,不好用,定位不到。

{:1_909:} 我的是delphi7的程序,其它版本可能有问题?{:1_918:} sorry

A-new 发表于 2020-1-28 18:30

有个软件叫idr,一般人不告诉他

女萝岩 发表于 2020-1-29 01:23

A-new 发表于 2020-1-28 18:30
有个软件叫idr,一般人不告诉他

可以可以

女萝岩 发表于 2020-1-31 20:12

noname123 发表于 2020-1-30 12:01
偏移0的int a可能是reference count,不过我也记不太清了。好久之前分析的Delphi了。QT里面的QString确实有 ...

你说的应该是对的,面向对象的语言少不了引用计数这种东西的。听你这么一说突然想起来,delphi程序析构函数总是能看到sub ,1这种代码,就是减少引用计数的。

mazhb 发表于 2021-3-3 14:57

慢慢积累经验了,听说DELPHI是有特点的,可惜我还在找
页: [1]
查看完整版本: 分析delphi程序的一些心得