本帖详细分析了易语言oep到main函数之间具体干了哪些事,想搞破解的朋友可以详细了解一下,可以从这些函数中提取特征码,从而快速定位到oep,甚至可以写出脚本自动识别。

OEP分析

开头有易语言的特征push ffffffff,这经常用来识别是否是易语言程序

函数1

调用GetVersion()
如果加壳后想找到OEP,通常给GetVersion()下断点。
图片描述

函数2

图片描述
看看里面干了什么事
创建堆空间,
应该是根据操作系统位数和获取环境信息做出不同的跳转
再调用底层VirtualAlloc函数和内核函数RtAllocateHeap分配空间,如果分配失败,就调用HeapDestory销毁。
失败返回0,成功返回1
图片描述

函数3

如果函数2成功,会跳过函数3,函数3是清理退出函数。
图片描述

函数4

线程局部存储分配空间相关,这里可以藏代码
图片描述

函数5

分配失败,调用清理函数
图片描述

函数6 7

这两个函数分别获得命令行和环境并保存到全局变量中
图片描述

函数8

获得.exe文件路径,保存到全局变量中
图片描述

函数9

解析上面获得的文件路径
图片描述

函数10

创建线程并填充上面分配好的线程局部存储的堆中内容
图片描述

函数11

获得线程启动相关信息
图片描述

函数12

加载user.dll等动态链接库,这个函数应该是窗口程序特有的
图片描述

函数13

传入的参数是0 ,获得当前模块句柄
图片描述

main函数

可以看见main函数在GetMoudleHandle的下面,可以通过对该函数下断快速找到main函数,但是得断多次,因为上面有些函数也用到了获取模块句柄加载dll。
图片描述

结束语

要想在加壳的情况下找到OEP或者main函数,可以通过提取上面某些函数的特征码,再返回上一层,或者直接在某些调用了一次的API上面下断,这样可以快速定位。
新人第一次发帖,谢谢大家。

最新回复:
轻装前行 2024-11-17 02:23:33
能不能分析下为啥吴涛要把一个空的窗口程序塞入大把无用的资源图标对话框字符串,还有一个隐藏窗口是什么EL  oner
fjqisba 2024-11-22 16:08:51
你用VC 6.0编译个MFC程序看看?