开始的复活节 发表于 2017-4-21 23:38

手脱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.

md5 发表于 2017-4-24 13:05

感谢发布原创作品,吾爱破解论坛因你更精彩!

bysysnet 发表于 2017-4-26 23:08

牛人,楼主辛苦了,感谢分享。

5771876 发表于 2017-4-30 07:26

。。。。。。。。。。。。。。。

5771876 发表于 2017-4-30 07:27

000000000000000000000000000
页: [1]
查看完整版本: 手脱ORiEN(学习历程)