首页
社区
课程
招聘
[原创]TMD加壳VC程序OEP修复_新手学习教材
发表于: 2011-4-4 11:48 27669

[原创]TMD加壳VC程序OEP修复_新手学习教材

2011-4-4 11:48
27669

标 题: 【原创】TMD加壳VC程序OEP修复_新手学习教材
作 者: knightsoft(ryo)
时 间: 2011-04-04,11:40:00
链 接: http://bbs.pediy.com/showthread.php?t=131835

已测环境 :
  XP SP3
  修改版 FLY OD + StrongOD 0.2.6.415
  脚本 Themida - Winlicense 1.x - 2.x Imports Fixer Edition 1.1 by SnD
Themida - Winlicense 1.x - 2.x Imports Fixer Edition 1.1 by SnD.txt
TMD加壳VC程序OEP修复_新手学习教材.part1.rar
TMD加壳VC程序OEP修复_新手学习教材.part2.rar
TMD加壳VC程序OEP修复_新手学习教材.part3.rar
TMD加壳VC程序OEP修复_新手学习教材.part4.rar
TMD加壳VC程序OEP修复_新手学习教材.part5.rar

脚本运行完,下内存401000断点断在这里。

00406AE9    6A 02              push 2
00406AEB    5F                 pop edi
00406AEC    57                 push edi
00406AED    90                 nop
00406AEE    E8 89E87F77        call msvcrt.__set_app_type
00406AF3    59                 pop ecx
00406AF4    830D 48D54100 FF   or dword ptr ds:[41D548],FFFFFFFF
00406AFB    830D 4CD54100 FF   or dword ptr ds:[41D54C],FFFFFFFF
00406B02    E8 D4867E77        call msvcrt.__p__fmode
00406B07    90                 nop
00406B08    8B0D 20BE4100      mov ecx,dword ptr ds:[41BE20]
00406B0E    8908               mov dword ptr ds:[eax],ecx
00406B10    E8 8F867E77        call msvcrt.__p__commode
00406B15    90                 nop
00406B16    8B0D 1CBE4100      mov ecx,dword ptr ds:[41BE1C]
00406B1C    8908               mov dword ptr ds:[eax],ecx
00406B1E    A1 20B34000        mov eax,dword ptr ds:[40B320]
00406B23    8B00               mov eax,dword ptr ds:[eax]
00406B25    A3 44D54100        mov dword ptr ds:[41D544],eax
00406B2A    E8 D2010000        call GenuineV.00406D01
00406B2F    391D 903C4100      cmp dword ptr ds:[413C90],ebx
00406B35    75 0C              jnz short GenuineV.00406B43

这里已经是OEP以后了,也就是说OEP已经被偷了代码了。这时候看下参考程序的OEP头代码:

004222E2 >  55                 push ebp
004222E3    8BEC               mov ebp,esp
004222E5    6A FF              push -1
004222E7    68 E8974200        push SerPortM.004297E8
004222EC    68 46244200        push <jmp.&MSVCRT._except_handler3>
004222F1    64:A1 00000000     mov eax,dword ptr fs:[0]
004222F7    50                 push eax
004222F8    64:8925 00000000   mov dword ptr fs:[0],esp
004222FF    83EC 68            sub esp,68
00422302    53                 push ebx
00422303    56                 push esi
00422304    57                 push edi
00422305    8965 E8            mov dword ptr ss:[ebp-18],esp
00422308    33DB               xor ebx,ebx
0042230A    895D FC            mov dword ptr ss:[ebp-4],ebx
0042230D    6A 02              push 2
0042230F    FF15 4C5A4200      call dword ptr ds:[<&MSVCRT.__set_a>; msvcrt.__set_app_type
00422315    59                 pop ecx
00422316    830D 801A4300 FF   or dword ptr ds:[431A80],FFFFFFFF
0042231D    830D 841A4300 FF   or dword ptr ds:[431A84],FFFFFFFF
00422324    FF15 485A4200      call dword ptr ds:[<&MSVCRT.__p__fm>; msvcrt.__p__fmode
0042232A    8B0D 741A4300      mov ecx,dword ptr ds:[431A74]
00422330    8908               mov dword ptr ds:[eax],ecx
00422332    FF15 445A4200      call dword ptr ds:[<&MSVCRT.__p__co>; msvcrt.__p__commode
00422338    8B0D 701A4300      mov ecx,dword ptr ds:[431A70]
0042233E    8908               mov dword ptr ds:[eax],ecx
00422340    A1 405A4200        mov eax,dword ptr ds:[<&MSVCRT._adj>
00422345    8B00               mov eax,dword ptr ds:[eax]
00422347    A3 7C1A4300        mov dword ptr ds:[431A7C],eax
0042234C    E8 28010000        call SerPortM.00422479
00422351    391D 58FF4200      cmp dword ptr ds:[42FF58],ebx
00422357    75 0C              jnz short SerPortM.00422365
00422359    68 76244200        push SerPortM.00422476
0042235E    FF15 3C5A4200      call dword ptr ds:[<&MSVCRT.__setus>; msvcrt.__setusermatherr
00422364    59                 pop ecx

参考后,可以看出,程序被偷的代码是这一部分的:

  push ebp
  mov ebp,esp
  push -1h
  push 04297E8h                //这是需要更改的部分,在堆栈中寻找,程序不同,值可能不同
  push _except_handler3        //这是需要更改的部分,在堆栈中寻找,程序不同,值可能不同
  mov eax,dword ptr fs:[0h]
  push eax
  mov dword ptr fs:[0h],esp
  sub esp,68h
  push ebx
  push esi
  push edi
  mov dword ptr ss:[ebp-18h],esp
  xor ebx,ebx
  mov dword ptr ss:[ebp-4h],ebx
  push 2h

这时候看堆栈和寄存器窗口

EAX 0012FFE0
ECX 51006A60
EDX 00000000
EBX 00000000
ESP 0012FF10
EBP 0012FF94
ESI 005066B7 GenuineV.005066B7
EDI FFFF4000
EIP 00406AE9 GenuineV.00406AE9

看EBP部分,这个地址在堆栈窗中跟随

0012FF7C   0012FF10
0012FF80   0012FF9C
0012FF84   0012FFE0    指针到下一个 SEH 记录
0012FF88   00406D02    SE 句柄
0012FF8C   0040C090    GenuineV.0040C090
0012FF90   00000000
0012FF94   00004CB1
0012FF98   61F2FC4D

12FF8C的内容就是参考程序中的代码 004222E7    68 E8974200        push SerPortM.004297E8
12FF88的内容就是参考程序中的代码 004222EC    68 46244200        push <jmp.&MSVCRT._except_handler3>

所以在修复OEP时需要用到这2个参数

修复OEP的代码写在FOEP的上面,也就是这里的上面
00406AEE    E8 89E87F77        call msvcrt.__set_app_type

开出部分区域用NOP填充后补全OEP处被偷的代码

00406AC1 >  55                 push ebp
00406AC2    8BEC               mov ebp,esp
00406AC4    6A FF              push -1
00406AC6    68 026D4000        push dumped_.00406D02
00406ACB    68 90C04000        push dumped_.0040C090
00406AD0    64:A1 00000000     mov eax,dword ptr fs:[0]
00406AD6    50                 push eax
00406AD7    64:8925 00000000   mov dword ptr fs:[0],esp
00406ADE    83EC 68            sub esp,68
00406AE1    53                 push ebx
00406AE2    56                 push esi
00406AE3    57                 push edi
00406AE4    8965 E8            mov dword ptr ss:[ebp-18],esp
00406AE7    33DB               xor ebx,ebx
00406AE9    895D FC            mov dword ptr ss:[ebp-4],ebx
00406AEC    6A 02              push 2

修复好OEP处的代码后,重新定位EIP到00406AC1,纠正镜象大小后DUMP程序

由于这个程序的IAT部分未加密,所以到FOEP的时候,数据窗里显示的就是IAT表
IAT表的开始地址为
0040B000 <>77DC7B60  advapi32.RegisterEventSourceA
IAT表的结束地址为
0040B3E8 <>77D29849  user32.EnableWindow

所以这就得到了IAT修复的函数部分,用软件修复DUMP处程序的IAT部分

至此,程序修复已经完成了,打开程序可以运行,脱壳完成。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (16)
雪    币: 2323
活跃值: (4113)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
2
谢谢分享~~
2011-4-4 12:15
0
雪    币: 210
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这个一定要顶,但是你的脚本我怎么下不到?
2011-4-6 11:24
0
雪    币: 210
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我用的1.0的,你是1.1的,其他都一样,我的脚本怎么跑不起来?
2011-4-6 11:25
0
雪    币: 65
活跃值: (171)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我也来看看,楼上的可能OD的设置有问题吧
2011-4-6 18:57
0
雪    币: 111
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
脚本已经传上来了
2011-4-8 21:40
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这个一定要顶~~~
2011-4-12 17:25
0
雪    币: 437
活跃值: (49)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
来学习了,大牛
2011-6-16 10:08
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
9
楼主能写下注释吗
2011-6-16 12:43
0
雪    币: 386
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
脚本怎么跑不起来,请问怎么设置?
2011-6-16 13:55
0
雪    币: 241
活跃值: (67)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
脚本跑不起来
和插件 环境 以及加壳的tmd版本都有关系
有些要手动改下脚本的
2011-6-23 17:44
0
雪    币: 224
活跃值: (157)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢楼主,下载来学习一下。
2012-3-7 09:47
0
雪    币: 375
活跃值: (201)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
请教楼主,themida不能下断点 怎么解决啊?
2012-3-7 13:24
0
雪    币: 5
活跃值: (208)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
收藏了                 
2018-4-15 13:03
0
雪    币: 9
活跃值: (57)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
15
233333themida不能下断点 怎么解决啊? 
2022-3-30 12:33
0
雪    币: 9
活跃值: (57)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
16
发不出v吧
2022-3-30 12:41
0
雪    币: 9
活跃值: (57)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
17
有没有好的破解技术学习啊
2022-3-30 12:42
0
游客
登录 | 注册 方可回帖
返回
//