手脱ORiEN(学习历程)
本帖最后由 开始的复活节 于 2017-4-21 23:41 编辑声明:
1.纪录自己成长历程,与大家分享
2.由于技术与能力,如有疏漏错误,欢迎指出,高手轻喷
简述:
在小生我怕怕的吾爱破解脱壳练习七期中--ORiEN中,关于两个无效的指针的修复操作是需要用删除指针,这个操作我还是第一次碰到,于是我又找到了其他的ORiEN加壳程序练习,结果撞壁了,
具体原因吗就是删除无效指针后程序跑不起来,提示错误为内存不能为“written”于是我在论坛里搜索了一下,发现小生我怕怕大牛的老帖(http://www.52pojie.cn/thread-18757-1-1.html),
这个壳修复后跑不起来的原因是区段并没有修复完整,下面我们来看具体事例。
1.发送到PEID查壳,插件核心扫描:ORiEN v2.11 (DEMO)
2.寻找OEP
这个壳的OEP用ESP定理法就能快速找到,虽然简单,但是我们还是来看一下。
01023000 > /E9 5D010000 jmp calc.01023162 ;//加载OD程序停在此处
01023005 |CE into
01023006 |D1CE ror esi,1
01023008 |CE into
01023162 60 pushad ;//上面跳转后来到这里
01023163 E8 783B0000 call calc.01026CE0 ;//此处可以用ESP定理法(hr 6ffa4)
SHIFT+F9后来到下面代码后就单步跟
01024ADB B8 E0190100 mov eax,0x119E0 ;//删除硬件断点
01024AE0 83F8 00 cmp eax,0x0
01024AE3 74 13 je short calc.01024AF8
01024AE5 05 00000001 add eax,calc.01000000
01024AEA EB 08 jmp short calc.01024AF4
01024AEC 49 dec ecx
01024AED E5 24 in eax,0x24
01024AEF 15 20FFE0CD adc eax,0xCDE0FF20
01024AF4^ EB FB jmp short calc.01024AF1 ;此处向上跳转实现后就快到OEP
01024AF6 EB 10 jmp short calc.01024B08
01024AF8 33C0 xor eax,eax
01024AFA EB 06 jmp short calc.01024B02
01024AF1- FFE0 jmp eax ; calc.010119E0
来到OEP
010119E0 55 push ebp
010119E1 8BEC mov ebp,esp
010119E3 6A FF push -0x1
010119E5 68 70150001 push calc.01001570
010119EA 68 601D0101 push calc.01011D60 ; jmp 到 msvcrt._except_handler3
010119EF 64:A1 00000000mov eax,dword ptr fs:
010119F5 50 push eax
010119F6 64:8925 0000000>mov dword ptr fs:,esp
010119FD 83C4 98 add esp,-0x68
01011A00 53 push ebx
01011A01 56 push esi
01011A02 57 push edi
下面就具体讲修复的问题吧。
图片1.
用LoadPE修复镜像大小并完整转存。然后用ImportREC修复,有一个无效的指针。在已知剪切指针无效的情况下我们试试删除指针。
程序出现了我上面遇到的错误。
用PEID来查看我们脱壳后的程序。
图片2.
LoadPE来看看程序区段,打开PE编辑器,加载我们的dumped_.exe程序。选择区段,发现了吧,.bss的物理偏移(R0ffset)和物理大小(Rsize)没有修复好。
图片3.
编辑区段修改一下
图片4.
将物理偏移改为虚拟地址的大小,物理大小改为虚拟大小。保存确定,程序完美运行。
图片5.
感谢发布原创作品,吾爱破解论坛因你更精彩! 牛人,楼主辛苦了,感谢分享。 。。。。。。。。。。。。。。。 000000000000000000000000000
页:
[1]