分析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 12:02 编辑
@女萝岩
试了下,不好用,定位不到。 https://attach.52pojie.cn/forum/202001/18/192444iczj0cqnnjn1e9vx.gif 冥界3大法王 发表于 2020-1-28 11:59
@女萝岩
试了下,不好用,定位不到。
{:1_909:} 我的是delphi7的程序,其它版本可能有问题?{:1_918:} sorry 有个软件叫idr,一般人不告诉他 A-new 发表于 2020-1-28 18:30
有个软件叫idr,一般人不告诉他
可以可以 noname123 发表于 2020-1-30 12:01
偏移0的int a可能是reference count,不过我也记不太清了。好久之前分析的Delphi了。QT里面的QString确实有 ...
你说的应该是对的,面向对象的语言少不了引用计数这种东西的。听你这么一说突然想起来,delphi程序析构函数总是能看到sub ,1这种代码,就是减少引用计数的。 慢慢积累经验了,听说DELPHI是有特点的,可惜我还在找
页:
[1]