好友
阅读权限20
听众
最后登录1970-1-1
|
照片依旧
发表于 2025-7-17 10:03
本帖最后由 照片依旧 于 2025-7-17 06:06 编辑
程序入口点分析
程序入口点是指 OEP RVA(AddressOfEntryPoint),可通过peid或die等pe工具查看,其具体位置是被指定在 image_dos_headers 下 image_optional_header 表单 AddressOfEntryPoint。
如果不知道理解OEP,可以自己下载一些对应语言的程序来查看OEP,OEP就是不同编译器生产的一个进入用户的程序的“大门”,每个牌子的编译器,可能会配不同的“大门”,相同的编译器会配相同的“大门”。每个“大门”都有自己的特征,比如易语言牌大门,厂家编译器: Microsoft Visual C/C++(12.00.9782),厂家链接程序: Microsoft Linker(5.12.8034)。
入口对应的汇编代码,也就是厂家编号如下图所示。OEP是 e4d5。​​
厂家打上去的编号就是 push ebp 、push -1 、 sub esp, 0x58。
微软牌大门,大厂就是不一样,厂家编译器: Microsoft Visual C/C++(19.36.35211)[LTCG/C++],厂家链接程序: Microsoft Linker(14.36.35211)。
入口对应的汇编代码,也就是厂家编号如下图所示。OEP 是 152b。​​
厂家打上去的编号就是 push 7、push dword ptr [ebp - 0x20]、call 和 jmp 、push 0。
QT厂牌大门,厂家编译器 Qt 6.8.2 (x86_64-little_endian-llp64 shared (dynamic) release build; by GCC 13.1.0),厂家链接程序: GNU Linker ld (GNU Binutils)(2.39)[GUI64]。
入口对应的汇编代码,也就是厂家编号如下图所示。OEP 是 400013d0。​
厂家打上去的编号就是 sub rsp,0x28 、mov dword ptr [rax], 1 、add rsp ,0x28。
其他厂家的门牌因为手头没有足够多的软件测试,所以就到此为止了。
“大门”在不同厂牌编译后是唯一的,通过唯一厂牌的大门来确定我们要执行脱壳工作。厂牌编号受到编译器、链接器等的影响。
后记
总的来说,程序在系统中执行是线性的,所有的程序执行都要经过我们的这个“大门”。对于脱壳人来说,就是需要找对门,看对眼。
大门找对后,还剩下的一项工作就是IAP修复了,IAP修复目前楼主还没学习到位,待楼主了解之后,就可以开启下一篇文章了。 |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|
|