本帖详细分析了易语言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上面下断,这样可以快速定位。
新人第一次发帖,谢谢大家。