首页
社区
课程
招聘
[原创]PEncrypt 3.1 Final脱壳笔记(加去自校验)—端午节快乐
发表于: 2009-5-28 16:27 11174

[原创]PEncrypt 3.1 Final脱壳笔记(加去自校验)—端午节快乐

2009-5-28 16:27
11174

【文章标题】: PEncrypt 3.1 Final脱壳笔记(加去自校验)
【文章作者】: 失望米虫
【软件名称】: QQ登陆器
【软件大小】: 97.0 KB
【下载地址】: 附件
【加壳方式】: PEncrypt 3.1 Final -> junkcode
【保护方式】: 加壳,自校验
【编写语言】: VB
【使用工具】: PEid OD LoadPE ImportRE
【操作平台】: win2003 sp2
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  方法一:单步跟踪法
  
  首先,当然是查壳啦
  PEid查出为:PEncrypt 3.1 Final -> junkcode
  
  好,OD载入!点"不分析代码!"!
  OD停在如下:
  
  004023F4 >  B8 882B4600     mov     eax, 00462B88
  004023F9    FFE0            jmp     eax
  004023FB    C6              ???                                      ; 未知命令
  004023FC    65:E5 BD        in      eax, 0BD
  004023FF    2985 9F5CC73E   sub     dword ptr [ebp+3EC75C9F], eax
  00402405    FA              cli
  00402406    14 5C           adc     al, 5C
  
  F8单步一下,是一个Jmp跳 未知命令?再F8,让它跳。OD来到这里:
  
  00462B88    B8 A31946F0     mov     eax, F04619A3
  00462B8D    55              push    ebp
  00462B8E    53              push    ebx
  00462B8F    51              push    ecx
  00462B90    57              push    edi
  00462B91    56              push    esi
  00462B92    52              push    edx
  
  好了,开始单步咯,一直F8单步慢慢走,直到来到这里
  
  00462C12   /EB 0C           jmp     short 00462C20
  00462C14   |03CA            add     ecx, edx
  00462C16   |68 00800000     push    8000
  00462C1B   |6A 00           push    0
  00462C1D   |57              push    edi
  00462C1E   |FF11            call    dword ptr [ecx]
  00462C20   \8BC6            mov     eax, esi
  
  一个Jmp跳,向下跳的,已实现,不管,再F8单步慢慢向下走!
  才走几下,又是一个Jmp,如下:
  
  00462C28  - FFE0            jmp     eax                              ; qqpc.<模块入口点>
  00462C2A    F4              hlt
  00462C2B    2340 00         and     eax, dword ptr [eax]
  00462C2E    0000            add     byte ptr [eax], al
  00462C30    0000            add     byte ptr [eax], al
  
  是跳到eax的,eax是多少,看下寄存器窗口,eax=004023F4,与00462C28  - FFE0            jmp     eax对比,是非常大的跳转!注意啦!
  再F8一下,OD来到这里:
  
  004023F4 >  68 0C624100     push    0041620C
  004023F9    E8 EEFFFFFF     call    004023EC                         ; jmp 到 MSVBVM60.ThunRTMain
  004023FE    0000            add     byte ptr [eax], al
  00402400    40              inc     eax
  00402401    0000            add     byte ptr [eax], al
  00402403    0030            add     byte ptr [eax], dh
  00402405    0000            add     byte ptr [eax], al
  00402407    0038            add     byte ptr [eax], bh
  00402409    0000            add     byte ptr [eax], al
  0040240B    0000            add     byte ptr [eax], al
  0040240D    0000            add     byte ptr [eax], al
  0040240F    006C78 C7       add     byte ptr [eax+edi*2-39], ch
  
  这就是经典的VB入口点特征!!
  
  ===============附五大语言入口点特征==================
  delphi:
  
    55            PUSH EBP
    8BEC          MOV EBP,ESP
    83C4 F0       ADD ESP,-10
    B8 A86F4B00   MOV EAX,PE.004B6FA8
  
  vc++
     55            PUSH EBP
     8BEC          MOV EBP,ESP
     83EC 44       SUB ESP,44
     56            PUSH ESI
  
  vb
  FF25 6C104000   JMP DWORD PTR DS:[<&MSVBVM60.#100>]      ; MSVBVM60.ThunRTMain
  68 147C4000     PUSH PACKME.00407C14
  E8 F0FFFFFF     CALL <JMP.&MSVBVM60.#100>
  0000            ADD BYTE PTR DS:[EAX],AL
  0000            ADD BYTE PTR DS:[EAX],AL
  0000            ADD BYTE PTR DS:[EAX],AL
  3000            XOR BYTE PTR DS:[EAX],AL
  
  bc++
  0040163C > $ /EB 10         JMP SHORT BCLOCK.0040164E
  0040163E     |66            DB 66                                    ;  CHAR 'f'
  0040163F     |62            DB 62                                    ;  CHAR 'b'
  00401640     |3A            DB 3A                                    ;  CHAR ':'
  00401641     |43            DB 43                                    ;  CHAR 'C'
  00401642     |2B            DB 2B                                    ;  CHAR '+'
  00401643     |2B            DB 2B                                    ;  CHAR '+'
  00401644     |48            DB 48                                    ;  CHAR 'H'
  00401645     |4F            DB 4F                                    ;  CHAR 'O'
  00401646     |4F            DB 4F                                    ;  CHAR 'O'
  00401647     |4B            DB 4B                                    ;  CHAR 'K'
  00401648     |90            NOP
  00401649     |E9            DB E9
  
  dasm:
  
  6A 00         PUSH 0                                   ; /pModule = NULL
  E8 C50A0000   CALL <JMP.&KERNEL32.GetModuleHandleA>    ; \GetModuleHandleA
  A3 0C354000   MOV DWORD PTR DS:[40350C],EAX
  E8 B50A0000   CALL <JMP.&KERNEL32.GetCommandLineA>     ; [GetCommandLineA
  A3 10354000   MOV DWORD PTR DS:[403510],EAX
  6A 0A         PUSH 0A                                  ; /Arg4 = 0000000A
  FF35 10354000 PUSH DWORD PTR DS:[403510
  
  
  ==============================================================
  
  方法二:ESP定律法
  
  列行,PEid查壳:PEncrypt 3.1 Final -> junkcode
  
  OK,用OD载入,停在:
  004023F4 >  B8 882B4600     mov     eax, 00462B88
  004023F9    FFE0            jmp     eax
  004023FB    C6              ???                                      ; 未知命令
  004023FC    65:E5 BD        in      eax, 0BD
  004023FF    2985 9F5CC73E   sub     dword ptr [ebp+3EC75C9F], eax
  00402405    FA              cli
  
  好了,F8单步吧!
  四下F8后,停在  00462B8E    53              push    ebx
  
  这时,ESP突现!(看寄存器窗口),ESP的值为:0012FFC0
  
  好了,在OD的命令行打入:hr 0012FFC0 回车!!F9运行!这个时候,OD停在如下:
  
  00462C28  - FFE0            jmp     eax                              ; qqpc.<模块入口点>
  00462C2A    F4              hlt
  00462C2B    2340 00         and     eax, dword ptr [eax]
  00462C2E    0000            add     byte ptr [eax], al
  00462C30    0000            add     byte ptr [eax], al
  
  打开OD菜单:调试—》硬件断点,把硬件断点删除!
  看下OD,是不是眼熟一点了?就是那个Jmp啊,F8一下!到OEP!!
  
  LoadPE完整Dump出来,ImportRE修复!!
  
  ---------------------------------------
  好了!!我这里ImportRE修复出来的是dumped_.exe,双击运行。鼠标动了一下,就没反应了!!再来一次,还是没反应!
  经验告诉我,有自校验!再来,把它干掉!
  
  OD载入脱壳后的dumped_.exe,停在:
  
  004023F4 > $  68 0C624100   push    0041620C
  004023F9   .  E8 EEFFFFFF   call    <jmp.&msvbvm60.ThunRTMain>
  004023FE   .  0000          add     byte ptr [eax], al
  00402400   .  40            inc     eax
  00402401   .  0000          add     byte ptr [eax], al
  00402403   .  0030          add     byte ptr [eax], dh
  00402405   .  0000          add     byte ptr [eax], al
  
  查看过不少VB的自校验文章,不少是说下rtcFileLen这个API断点的
  我们也来,在OD的命令行里打入:bpx rtcFileLen   回车!(注意大小写哦!)  好!F9运行,OD断下来了,停在:
  
  00432D54   .  FF15 DC114000 call    dword ptr [<&msvbvm60.rtcFileLen>; \rtcFileLen
  00432D5A   .  3D 20E50400   cmp     eax, 4E520
  00432D5F   .  7E 12         jle     short 00432D73
  00432D61   .  C745 FC 05000>mov     dword ptr [ebp-4], 5
  00432D68   .  FF15 3C104000 call    dword ptr [<&msvbvm60.__vbaEnd>] ;  msvbvm60.__vbaEnd
  
  这里看下堆栈窗口:
  
  0012F964   0016CA0C  \FileName = "C:\Documents and Settings\Administrator\",D7,"烂鎈dumped_.exe"
  0012F968   0012FB20
  0012F96C   0012FBF0
  
  程序在读自己?好,看OD反汇编当前Call的下一行是cmp比较,下一行是跳转,再下两行又是一个call,这个call就是退出程序了(看这个msvbvm60.__vbaEnd)
  
  点一下00432D5F处的跳转,可以看出是跳过程序退出函数的,逆向分析,此跳一定没实现(不信的朋友自己单步跟一下)
  
  好了,这里我们让它实现就可以了把jle改为je,或把cmp一句中的4E520改大,如改为14E520,保存修改!
  
  再次运行,!!OK!程序跑起来了!
  
--------------------------------------------------------------------------------
【经验总结】
  多学习,多练习!
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2009年05月28日 16:19:10


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (21)
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢分享,下来自己试一试
2009-5-28 20:41
0
雪    币: 203
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢  分享心得
2009-5-28 21:29
0
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
大家都要努力!!
2009-5-29 16:29
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢分享,收藏了
2009-5-29 16:32
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
好文,谢谢分享!
2009-5-29 17:22
0
雪    币: 87
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
感谢分享 学习了!
2009-5-29 20:38
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我发现看多了帖子,有时候也不好,为什么这么说,我也不知道。
2010-3-2 18:30
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢分享 学习了
2010-3-7 10:16
0
雪    币: 508
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
学习了~~~
2010-3-11 00:54
0
雪    币: 90
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
谢谢分享了,学习了
2010-3-11 13:09
0
雪    币: 51
活跃值: (62)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
记住了 bpx rtcFileLen
2010-8-5 17:13
0
雪    币: 531
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
谢谢楼主分享学习心得
2010-8-5 17:16
0
雪    币: 261
活跃值: (55)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
14
学习了.....
2010-8-10 22:39
0
雪    币: 119
活跃值: (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
学习了.....
2010-8-16 21:20
0
雪    币: 286
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
下载学习了,多谢!
2010-8-17 15:00
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
学习中,多谢,高手云集
2010-8-19 15:47
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
哥们不错。。学习了。。
2010-8-21 01:25
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
19
“ 好了,这里我们让它实现就可以了把jle改为je”

这个不应该这么改吧。
2010-9-23 11:08
0
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
我的目地,只是让跳转实现。。。。。不知pencil 有什么更好的改法??请教!~
2010-9-30 12:02
0
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
支持!!
2010-10-3 11:52
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
来学习一下,谢了哦
2010-10-5 03:01
0
游客
登录 | 注册 方可回帖
返回
//