吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 903|回复: 6
收起左侧

[已解决] 如何到达OEP?

[复制链接]
朱朱你堕落了 发表于 2024-6-29 13:23
750吾爱币
脱壳这个东西,一直都不知道如何下手,比如说想到达OEP吧,你要说一步一步的跟吧,里面代码来回跳,乱七八糟,跟了一会儿,没那个耐心了。
对区段下F2断点,好像也没啥用,ESP定律用不到这个上面,不知道如何下手,好像最基础的脱壳方法都不管用。就说这个程序吧,求助大佬,你拿到手,
你第一步会想到什么,从哪里开始下手来搞,思路是啥。思路肯定有个大概轮廓,从哪方面下手分析,谢谢大佬。

试炼品:
https://www.123pan.com/s/YL29-2ljOh.html

最佳答案

查看完整内容

1、dump我用的是x64dbg的ollydumpEx插件,你也可以用Scylla,lordpe 直接dump,用lordpe时候注意修改选项,不要从磁盘加载文件头。dump出来不能执行,看一下入口点对不对,然后修改导入表指向原始导入表即可。当然你也可以重新增加个区段建立新的导入表,也不是不可以。 2、视频演示地址:https://www.123pan.com/s/zoLaTd-Yk7Wd.html

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
netspirit + 1 + 1 看见绿色的技术相关的悬赏贴就知道是你

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

cndml 发表于 2024-6-29 13:23
朱朱你堕落了 发表于 2024-7-1 19:54
老哥,麻烦把dump内存+修改IAT这个做个一两分钟的视频演示吧。

1、dump我用的是x64dbg的ollydumpEx插件,你也可以用Scylla,lordpe 直接dump,用lordpe时候注意修改选项,不要从磁盘加载文件头。dump出来不能执行,看一下入口点对不对,然后修改导入表指向原始导入表即可。当然你也可以重新增加个区段建立新的导入表,也不是不可以。
2、视频演示地址:https://www.123pan.com/s/zoLaTd-Yk7Wd.html

免费评分

参与人数 1吾爱币 +3 热心值 +1 收起 理由
朱朱你堕落了 + 3 + 1 老哥对壳真的太有研究了,佩服,羡慕。

查看全部评分

我的爱是你 发表于 2024-6-29 14:19
不开OD软件我也无法运行没有任何界面和提示。
普通OD载入就结束,换过检测OD进去单步里面一直在用zwqueryobject与bug那个API循环检测。

免费评分

参与人数 1热心值 +1 收起 理由
朱朱你堕落了 + 1 用虚拟机XP或win7就能打开了。

查看全部评分

woflant 发表于 2024-6-29 16:05
这里应该是OEP吧,IAT表也能找到

OEP.png

虽然找到OEP,但是XDBG在dump是显示dump失败,具体没看了

-------------------分割线-------------------

简单说下过程,一般加密、压缩类壳,可下断VirtualProtect函数,查找最后一次断下时机,一步步往外层跟

因为解密过程必须要更改PE区段内存属性,不可写入更改为可写入

涉及到IAT表修复的,也会在最后一次断下附近进行IAT修复等操作

一般跟到“jmp eax”、“jmp edx”之类,基本就是跳转到OEP的

这个软件在最后一次VirutalProtect断下后,有两次跳转,一次应该是跳转到开辟的内存区间执行代码,第二次才是跳转OEP

还要注意这个软件的检测,应该是检测,有时候能正常运行,有时会运行异常,貌似是IAT表修复异常导致的,下硬件断点调试就没问题了

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
朱朱你堕落了 + 1 DUMP老是失败。
qq19699 + 1 + 1 我很赞同!

查看全部评分

woflant 发表于 2024-7-1 10:42
大致看了下dump失败的原因,加壳程序的代码基本在0x511xxx处,0x400000地址处开始,大小0x9000区域,应该是原始程序通过内存拉伸后内容,但由于是加壳程序开辟的内存区域,再将数据复制过来的,没有对应文件偏移,所以无法dump

试过在OEP处,即0x401700处(此时解密等操作应该已经完成),将0x400000-0x409000区间转存到二进制文件,xdbg中通过scylla插件fixdump保存的二进制文件修复导入表,运行windows提示无效PE文件,应该还涉及到PE文件修复等,比较麻烦
cndml 发表于 2024-7-1 11:16
脱壳一个程序,首先要大体了解一下程序,然后寻找突破口,网上给出的一些关键api也是通过分析确认后的经验总结,不一定普适。
1、具体到这个小程序,先运行起来,附加进去,可以看到程序重新分配了内存0x400000,并释放代码其中执行。调试器执行不是每次都能成功,跟踪vitualalloc函数发现程序每次总是从0x400000申请内/8000内存,申请不成功就不会执行,因此可能断定,释放的代码没有重定位表,必须固定基址运行。
2、单开始是关键代码解密,注意esi edi寄存器操作指令,其他寄存器操作指令基本是垃圾代码,等跳到解密后的代码,程序逻辑就基本清楚了。vitualalloc设断点,返回后就是解密后的代码段,没有花指令,很好读懂。
[Asm] 纯文本查看 复制代码
mov eax, dword ptr ss:[ebp - 0x1D0]
add eax, dword ptr ss:[ebp - 0xC]
mov ecx, dword ptr ss:[ebp - 0xC]
pop esi
pop edi
pop ebx
leave 
ret 0xC

往后翻翻代码,在最后就能看到这几行代码,前面的代码,简单读读就能看出,这段代码的主要功能就是模拟系统从磁盘加载文件的方式,从程序自身内部加载pe程序到0x400000基址,并对iat进行重定位,只有四个函数,然后跳转到程序入口开始执行。
3、释放的程序入口在4070FF,在程序最后一个区段,代码不多,也没花指令,主要功能是对text段代码解压缩,然后对iat重定位,再跳到入口执行。
[Asm] 纯文本查看 复制代码
popad 
mov ecx, 0xFFC
mov ebx, dword ptr ds:[eax + ecx]
mov dword ptr ds:[ecx + <sub_401000>], ebx
loop 0x4071CC
nop 
nop 
mov edx, 0x400000
mov esi, 0x25B0
add esi, edx
mov eax, dword ptr ds:[esi + 0xC]
test eax, eax
je 0x407277
add eax, edx
mov ebx, eax
push eax
mov eax, <&GetModuleHandleA>
call dword ptr ds:[eax]

nop上面这个循环指令是完成解码后的text段写入,je之后的程序就是循环对iat重定位,脱过upx壳对这个会很眼熟,地址0x25b0是输入表开始地址,大小就是这个je执行跳转后,si的值减去25b0。
4、je跳转后没几行代码就跳转到程序入口了,这时就可以dump程序了,由于pe程序是从内存模拟磁盘加载的,dump时候需要选择内存,而不是进程dump,dump的时候最后一个区段可以抛弃。
5、dump出的程序不能运行,因为iat表错误,需要手工用前面计算的长度,首地址修改一下导入表即可,都不需要用重建!

点评

老哥,麻烦把dump内存+修改IAT这个做个一两分钟的视频演示吧。  详情 回复 发表于 2024-7-1 19:54
 楼主| 朱朱你堕落了 发表于 2024-7-1 19:54
cndml 发表于 2024-7-1 11:16
脱壳一个程序,首先要大体了解一下程序,然后寻找突破口,网上给出的一些关键api也是通过分析确认后的经验 ...

老哥,麻烦把dump内存+修改IAT这个做个一两分钟的视频演示吧。

免费评分

参与人数 1吾爱币 +1 收起 理由
董督秀 + 1 热心回复!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 12:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表