首页
社区
课程
招聘
易语言LikeOne新视听网络电影电视脱壳
发表于: 2005-2-8 10:10 7936

易语言LikeOne新视听网络电影电视脱壳

David 活跃值
20
2005-2-8 10:10
7936

【脱文标题】 易语言LikeOne新视听网络电影电视UPX-Scrambler RC1.x反脱壳分析+伪破解

【破文作者】 weiyi75[Dfcg][D.4S]

【作者邮箱】 [email]weiyi75@sohu.com[/email]

【作者主页】 Dfcg官方大本营、龙族联盟论坛

【使用工具】 Peid,Anti-UPX scramble.exe,UpxShell,olldbg,winhex

【破解平台】 WinNT/2000/XP

【软件名称】 LikeOne新视听网络电影电视

【下载页面】 点击下载

【软件大小】 1169 KB

【软件限制】 UPX-Scrambler RC1.x -> ┫nT?L [Overlay]防脱壳,启动NAG+功能限制。

【软件简介】 最值得信赖的网络电影电视软件。500多个国内外电视电影台,40多个精彩视频节目,100多部最新电影。超强音量控制。<新视听网络电影电视>是一款功能强大的网络电影电视播放软件。一个网络视频、音频的巨大仓库,软件中内置了多达数百个国内外精彩电视频道、数十个国内外精彩电台的广播,以及数百部最新精彩电影。

主要特点:

★在线实时收看数百个国内外精彩电影、电视频道的节目
★ 在线实时收听数十个国内外精彩电台广播;
★ 大量且不断更新的最新精彩电影;
★ 赏心悦目的数十个时尚写真精彩视频;
★ 简便的操作,您只需单击按钮便可进行观看、收听节目。
★ 专人负责节目链接,从而保证了节目链接的数量和质量。

【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)

--------------------------------------------------------------------------------

【破解分析】

首先Peid 查壳,为UPX-Scrambler RC1.x -> ┫nT?L [Overlay],注意到[Overlay],是指程序尾部有数据,手动脱壳时尾部数据是不能脱壳出来的,因为它并没有载入内存中。UPX-Scrambler是UPX的一种加密器,使UpxShell等工具无法直接脱壳。

近期二哥提供了Upx脱壳工具全家福,目前用Upx包括变形Upx的程序还真多,赶快去下载吧,顶部工具介绍贴里面有下载地址。

工具脱壳

首先对付UPX-Scrambler,用Anti-UPX scramble,使用非常简单,自动帮你备份程序了。然后用Upxshell(Upx必须是1.90版),否则无法脱壳,脱的干干净净,Overlay自动帮我们复制了。

UPX-Scrambler RC1.x -> ┫nT?L [Overlay]  To  Microsoft Visual C++ 6.0 [Overlay]

904k To 3431k  //用Upx脱Upx壳是最完美的。

Btw:  并非所有UPX-Scrambler RC1.x都是可以补丁的,略微变形一下工具就败下阵来了,手动脱壳复制Overlay我们还是要学。

手动脱壳

OD载入程序。

006AA60F >  90              NOP   //外壳UpxScrambler入口。
006AA610    61              POPAD  //特征码
006AA611    BE 00D06700     MOV ESI,LikeOne1.0067D000
006AA616    8DBE 0040D8FF   LEA EDI,DWORD PTR DS:[ESI+FFD84000]
006AA61C    57              PUSH EDI
006AA61D    83CD FF         OR EBP,FFFFFFFF
006AA620    EB 10           JMP SHORT LikeOne1.006AA632
006AA622    EB 00           JMP SHORT LikeOne1.006AA624
006AA624  ^ EB EA           JMP SHORT LikeOne1.006AA610
006AA626  ^ EB E8           JMP SHORT LikeOne1.006AA610
006AA628    8A06            MOV AL,BYTE PTR DS:[ESI]
006AA62A    46              INC ESI
006AA62B    8807            MOV BYTE PTR DS:[EDI],AL
006AA62D    47              INC EDI
006AA62E    01DB            ADD EBX,EBX
006AA630    75 07           JNZ SHORT LikeOne1.006AA639
..............................................................

根据UPX及变形UPX

POPAD  对应  PUSHAD

PUSHAD

底下是

JMP XXXXX  //入口或第二层壳的特性。

直接

Ctrl+F 向下找PUSHAD

006AA77E    60              PUSHAD  //一下就找到了。
006AA77F  - E9 AD90D5FF     JMP LikeOne1.00403831  //直接F4下来。

00403831    55              PUSH EBP      //F8到达C语言入口,非也,应该是易语言,Upx不破坏输入表,直接用OD插件脱壳,重建输入表方式选择1。
00403832    8BEC            MOV EBP,ESP
00403834    6A FF           PUSH -1
00403836    68 F0624000     PUSH LikeOne1.004062F0
0040383B    68 A44C4000     PUSH LikeOne1.00404CA4
00403840    64:A1 00000000  MOV EAX,DWORD PTR FS:[0]
00403846    50              PUSH EAX
00403847    64:8925 0000000>MOV DWORD PTR FS:[0],ESP
0040384E    83EC 58         SUB ESP,58
00403851    53              PUSH EBX
00403852    56              PUSH ESI
00403853    57              PUSH EDI
00403854    8965 E8         MOV DWORD PTR SS:[EBP-18],ESP
00403857    FF15 48604000   CALL DWORD PTR DS:[406048]               ; KERNEL32.GetVersion
0040385D    33D2            XOR EDX,EDX
0040385F    8AD4            MOV DL,AH
.................................................................................

关闭OD。

直接运行脱壳程序是无法运行的,提示你文件数据错误,因为尾部Overlay没有复制出来,我先以为程序有自校验,原来是新版的Peid查壳时Overlay翻译成覆盖了,一时不适应,浪费了不少时间,对比程序分析好久,这个是不细心的结果,自我批评一下。
运行Winhex打开原程序。

找到Overlay数据,从尾部开始,然后向上看,找到一大堆00 00与31 2E 等明显分界点,这里就是Overlay的起点。

我们看到尾部数据从偏移量987开始。在987处点右键选块开始。

如图



然后滚动条拉到底,到偏移量924990为止,在924990处点右键选块结束。

Crtl+C 复制选定内容。

然后打开脱壳文件,直接滚动条到尾部偏移量2815487处,点右键-编辑-剪贴板数据写入,确定两次。

如图



原理搞清楚就不犹豫,保存文件,问你是否更新程序,是,运行正常。

904k To 3652k

比工具脱壳大,并且用工具脱壳你可以看见易语言的标记区段。

Alt+M打开内存镜像

内存镜像,项目 15
地址=00409000
大小=0029C000 (2736128.)
Owner=LikeOne1 00400000
区段=.ecode  //易语言区段。
类型=Imag 01001002
访问=R
初始访问=RWE

这次手动脱壳资源也完全释放了。

不过易语言资源没工具编辑,代码也完全释放了。

我们用资源编辑工具和W32Dasm也可以识别这个程序是易语言。

下面就是伪破解。

首先看清软件的限制。

启动时看到NAG,其它限制逐一搞定,先搞NAG。

OD命令行下断点

bp DestroyWindow

DestroyWindow  用途是破坏(即清除)指定的窗口以及它的所有子窗口(在vb里使用:用处不大。原文:it is unlikely to be of much use.)一般程序退出时调用或关闭窗口时调用。

为什么要下这个断点,思路,程序在启动画面出现后,然后就要关闭它,接着调用NAG画面。

我们就可以通过这个断点在NAG之前拦截启动画面关闭后的代码,然后主动权就在我们手里,看哪里可以跳过NAG。

F9运行,看着程序装完Overlay数据当然中断下来。

77DF736E >  B8 59110000     MOV EAX,1159
77DF7373    8D5424 04       LEA EDX,DWORD PTR SS:[ESP+4]
77DF7377    CD 2E           INT 2E  
77DF7379    C2 0400         RETN 4  //直接在这里下断,F9中断后取消断点。

堆栈友好提示。

0012F710   100A421B  /CALL 到 DestroyWindow 来自 krnln.100A4215
0012F714   01050390  \hWnd = 01050390 (class='Afx:10000000:b:10011:1900015:0')
0012F718   060101CC
0012F71C   01403380
0012F720   00000000
0012F724   1005D750  返回到 krnln.1005D750
0012F728   024C1901
0012F72C   0054E62C  LikeOne1.0054E62C
0012F730   0012F774
0012F734   100D7224  krnln.100D7224

然后我们Ctrl+F9 根据OD信息框提示我们回到程序领空为止。

按了3次Ctrl+F9

100543B5    C3              RETN

OD提示返回到006A0AF7

006A0AF2    E8 62370000     CALL LikeOne1.006A4259
006A0AF7    83C4 10         ADD ESP,10  //返回到这里。
006A0AFA    8BE5            MOV ESP,EBP
006A0AFC    5D              POP EBP
006A0AFD    C3              RETN   //这里要进入程序领空,进去吧,对跟踪更容易些。

又进入系统领空。

10054426    5F              POP EDI                                  ; 01403290
10054427    5E              POP ESI
10054428    895D F4         MOV DWORD PTR SS:[EBP-C],EBX
1005442B    8945 F8         MOV DWORD PTR SS:[EBP-8],EAX
1005442E    8B55 E8         MOV EDX,DWORD PTR SS:[EBP-18]
10054431    C782 E4010000 0>MOV DWORD PTR DS:[EDX+1E4],0
1005443B    837D F4 00      CMP DWORD PTR SS:[EBP-C],0
1005443F    74 13           JE SHORT krnln.10054454

还是Ctrl+F9返回。

这回按了19次Ctrl+F9

100543B5    C3              RETN

OD信息栏提示返回到0069C42C

0069C427    E8 2D7E0000     CALL LikeOne1.006A4259
0069C42C    83C4 28         ADD ESP,28  //返回到这里,回的正是时候。
0069C42F    E8 180C0000     CALL LikeOne1.0069D04C  //这个Call跟进去可以有大量跟踪细节,二哥没跟踪出注册码,里面很复杂,它的作用如果没有注册,就会产生NAG注册窗口,我们点以后再说。那么这里就是要放炸药的位置^_^,NOP掉,注册标记是没有指望了。
0069C434    68 04000080     PUSH 80000004  //继续执行。
0069C439    6A 00           PUSH 0
0069C43B    68 D3E65200     PUSH LikeOne1.0052E6D3                   ; ASCII "windir"
0069C440    68 01000000     PUSH 1
0069C445    BB 0C010000     MOV EBX,10C
.....................................................

F9运行。

这里NAG就搞定了。

继续搞定三处功能限制。

首先要看清楚限制。

1, 点港澳台电视标签,程序马上就禁用了这个标签。光标由手变为鼠标指针,再点是不会理你的。右边的节目菜单出现您好,请注册的字样。

2, 点推荐频道标签,也是禁用了。

3, 点电影台,同样禁用了。

这些标签禁用,虽然用按钮突破专家等可以暂时打开,但点击后再次禁用。

我们调试人员当然用OD提供的窗口工具插件,二哥论坛里面提供了OD全部插件下载,赶快去下载吧。

使用方法很容易,按住Shift,移动鼠标到灰标签,松开鼠标,然后点使有效,全部激活。

如图。



然后我们来治本。

那就是

EnableWindow
允许或禁止鼠标和键盘控制指定窗口和条目(禁止时菜单变灰)  
BOOL EnableWindow(
HWND hWnd, // 窗口句柄
BOOL bEnable // 允许/禁止输入
);
Returns
如窗口以前被禁止则返回一TRUE,否则返回 FALSE。

为这个我翻了不少资料,实际调试发现确实有效,它可不是专门对窗口有效,对按钮,标签,等都有效。

于是命令行。

bp EnableWindow

点港澳台标签,立即中断。

77DF5CBE >  6A 53           PUSH 53
77DF5CC0    FF7424 0C       PUSH DWORD PTR SS:[ESP+C]
77DF5CC4    FF7424 0C       PUSH DWORD PTR SS:[ESP+C]
77DF5CC8    E8 E3FFFFFF     CALL USER32.77DF5CB0
77DF5CCD    C2 0800         RETN 8

堆栈友好提示。

0012F9D4   100A728D  /CALL 到 EnableWindow 来自 krnln.100A7287
0012F9D8   02C20216  |hWnd = 02C20216 ('港澳台电视',class='Afx:10000000:b:710039f:1900015:0',parent=02DF0284)
0012F9DC   00000000  \Enable = FALSE  //怒,标签被禁用了。
0012F9E0   1002D98E  返回到 krnln.1002D98E 来自 krnln.100A7279
0012F9E4   00000000
0012F9E8   0012FA98
0012F9EC   014002A0
0012F9F0   0069B736  返回到 LikeOne1.0069B736 来自 LikeOne1.00699B94
0012F9F4   100D7570  krnln.100D7570

还是Ctrl+F9根据OD信息提示返回,看是哪里做的手脚。

按了四次 Ctrl+F9

10054B46    C3              RETN

OD提示返回到 0069BABD

0069BA7D    E8 E9870000     CALL LikeOne1.006A426B
0069BA82    83C4 34         ADD ESP,34
0069BA85    8945 C8         MOV DWORD PTR SS:[EBP-38],EAX
0069BA88    837D C8 00      CMP DWORD PTR SS:[EBP-38],0
0069BA8C    0F84 04000000   JE LikeOne1.0069BA96
0069BA92    33C0            XOR EAX,EAX
0069BA94    EB 05           JMP SHORT LikeOne1.0069BA9B
0069BA96    B8 01000000     MOV EAX,1    //从很远的位置更上面跳到这里。
0069BA9B    85C0            TEST EAX,EAX
0069BA9D    0F84 3A000000   JE LikeOne1.0069BADD  //爆破点2,必须跳转。

修改为

0069BA9D   /75 3E           JNZ SHORT LikeOne1.0069BADD
0069BA9F   |90              NOP
0069BAA0   |90              NOP
0069BAA1   |90              NOP
0069BAA2   |90              NOP

0069BAA3    6A 00           PUSH 0
0069BAA5    68 01000000     PUSH 1
0069BAAA    6A FF           PUSH -1
0069BAAC    6A 06           PUSH 6
0069BAAE    68 80030116     PUSH 16010380
0069BAB3    68 01000152     PUSH 52010001
0069BAB8    E8 96870000     CALL LikeOne1.006A4253  //功能限制。
0069BABD    83C4 18         ADD ESP,18  //返回到这里,当然往上看。
0069BAC0    6A 00           PUSH 0
0069BAC2    68 E8030000     PUSH 3E8
0069BAC7    6A FF           PUSH -1
0069BAC9    6A 08           PUSH 8
0069BACB    68 AE030116     PUSH 160103AE
0069BAD0    68 01000152     PUSH 52010001
0069BAD5    E8 79870000     CALL LikeOne1.006A4253
..............................................................

保存上面的修改,运行,是否没有NAG和要你注册的提示了,灰标签也解决了,一切尽在掌握。

然后一样的方法。

bp EnableWindow

点推荐频道标签标签,立即中断。

77DF5CBE >  6A 53           PUSH 53
77DF5CC0    FF7424 0C       PUSH DWORD PTR SS:[ESP+C]
77DF5CC4    FF7424 0C       PUSH DWORD PTR SS:[ESP+C]
77DF5CC8    E8 E3FFFFFF     CALL USER32.77DF5CB0
77DF5CCD    C2 0800         RETN 8

堆栈友好提示。

0012F9D4   100A728D  /CALL 到 EnableWindow 来自 krnln.100A7287
0012F9D8   023E016E  |hWnd = 023E016E ('推荐频道',class='Afx:1610000:b:10011:1900015:0',parent=02B001A6)
0012F9DC   00000000  \Enable = FALSE
0012F9E0   1002D98E  返回到 krnln.1002D98E 来自 krnln.100A7279

按四次Ctrl+F9

10054B46    C3              RETN

返回到0069B5C6

0069B586    E8 E08C0000     CALL Cracker3.006A426B
0069B58B    83C4 34         ADD ESP,34
0069B58E    8945 C8         MOV DWORD PTR SS:[EBP-38],EAX
0069B591    837D C8 00      CMP DWORD PTR SS:[EBP-38],0
0069B595    0F84 04000000   JE Cracker3.0069B59F
0069B59B    33C0            XOR EAX,EAX
0069B59D    EB 05           JMP SHORT Cracker3.0069B5A4
0069B59F    B8 01000000     MOV EAX,1
0069B5A4    85C0            TEST EAX,EAX
0069B5A6    0F84 3A000000   JE Cracker3.0069B5E6  //爆破点3

修改为

0069B5A6   /75 3E           JNZ SHORT Cracker3.0069B5E6
0069B5A8   |90              NOP
0069B5A9   |90              NOP
0069B5AA   |90              NOP
0069B5AB   |90              NOP

0069B5AC    6A 00           PUSH 0
0069B5AE    68 01000000     PUSH 1
0069B5B3    6A FF           PUSH -1
0069B5B5    6A 06           PUSH 6
0069B5B7    68 95030116     PUSH 16010395
0069B5BC    68 01000152     PUSH 52010001
0069B5C1    E8 8D8C0000     CALL Cracker3.006A4253  //功能限制。
0069B5C6    83C4 18         ADD ESP,18  //返回到这里。
0069B5C9    6A 00           PUSH 0
0069B5CB    68 E8030000     PUSH 3E8
0069B5D0    6A FF           PUSH -1
0069B5D2    6A 08           PUSH 8
0069B5D4    68 AE030116     PUSH 160103AE
0069B5D9    68 01000152     PUSH 52010001
0069B5DE    E8 708C0000     CALL Cracker3.006A4253
..............................................................

点电影台标签,再点电影频道,立即中断。

77DF5CBE >  6A 53           PUSH 53
77DF5CC0    FF7424 0C       PUSH DWORD PTR SS:[ESP+C]
77DF5CC4    FF7424 0C       PUSH DWORD PTR SS:[ESP+C]
77DF5CC8    E8 E3FFFFFF     CALL USER32.77DF5CB0
77DF5CCD    C2 0800         RETN 8

堆栈有好提示

0012F880   100A728D  /CALL 到 EnableWindow 来自 krnln.100A7287
0012F884   03070196  |hWnd = 03070196 ('电影台',class='Afx:10000000:b:73f022f:1900015:0',parent=02B001A6)
0012F888   00000000  \Enable = FALSE
0012F88C   1002D98E  返回到 krnln.1002D98E 来自 krnln.100A7279
0012F890   00000000

按四次Ctrl+F9

10054B46    C3              RETN

返回到0069FF37

0069FEF7    E8 6F430000     CALL Cracker3.006A426B
0069FEFC    83C4 34         ADD ESP,34
0069FEFF    8945 C8         MOV DWORD PTR SS:[EBP-38],EAX
0069FF02    837D C8 00      CMP DWORD PTR SS:[EBP-38],0
0069FF06    0F84 04000000   JE Cracker3.0069FF10
0069FF0C    33C0            XOR EAX,EAX
0069FF0E    EB 05           JMP SHORT Cracker3.0069FF15
0069FF10    B8 01000000     MOV EAX,1
0069FF15    85C0            TEST EAX,EAX
0069FF17    0F84 3A000000   JE Cracker3.0069FF57  //爆破点4

修改为

0069FF17   /75 3E           JNZ SHORT Cracker3.0069FF57
0069FF19   |90              NOP
0069FF1A   |90              NOP
0069FF1B   |90              NOP
0069FF1C   |90              NOP

0069FF1D    6A 00           PUSH 0
0069FF1F    68 01000000     PUSH 1
0069FF24    6A FF           PUSH -1
0069FF26    6A 06           PUSH 6
0069FF28    68 86030116     PUSH 16010386
0069FF2D    68 01000152     PUSH 52010001
0069FF32    E8 1C430000     CALL Cracker3.006A4253  //功能限制。
0069FF37    83C4 18         ADD ESP,18  //返回点。
0069FF3A    6A 00           PUSH 0
0069FF3C    68 E8030000     PUSH 3E8
0069FF41    6A FF           PUSH -1
0069FF43    6A 08           PUSH 8
0069FF45    68 AE030116     PUSH 160103AE
0069FF4A    68 01000152     PUSH 52010001
0069FF4F    E8 FF420000     CALL Cracker3.006A4253
0069FF54    83C4 18         ADD ESP,18
........................................................

保存所有修改,功能限制解除,正常运行。

关于菜单提示注册问题,可以搞调,但不好看,留着吧,反正永远不点它。

【破解总结】

0069C42F    E8 180C0000

改为

0069C42F    90              NOP
0069C430    90              NOP
0069C431    90              NOP
0069C432    90              NOP
0069C433    90              NOP

0069BA9D    0F84 3A000000   JE LikeOne1.0069BADD

改为

0069BA9D   /75 3E           JNZ SHORT 23.0069BADD
0069BA9F   |90              NOP
0069BAA0   |90              NOP
0069BAA1   |90              NOP
0069BAA2   |90              NOP

0069B5A6    0F84 3A000000   JE Cracker3.0069B5E6  

改为

0069B5A6   /75 3E           JNZ SHORT 23.0069B5E6
0069B5A8   |90              NOP
0069B5A9   |90              NOP
0069B5AA   |90              NOP
0069B5AB   |90              NOP

0069FF17    0F84 3A000000   JE Cracker3.0069FF57

改为

0069FF17   /75 3E           JNZ SHORT 23.0069FF57
0069FF19   |90              NOP
0069FF1A   |90              NOP
0069FF1B   |90              NOP
0069FF1C   |90              NOP

最后请看胜利截图



--------------------------------------------------------------------------------  

【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (6)
雪    币: 214
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
"然后打开脱壳文件,直接滚动条到尾部偏移量2815487处,点右键-编辑-剪贴板数据写入,确定两次。"二哥:这里为什么从偏移量2815487处开始粘贴数据?盼指教,谢谢!
2005-2-8 15:08
0
雪    币: 411
活跃值: (1160)
能力值: ( LV9,RANK:810 )
在线值:
发帖
回帖
粉丝
3
呵呵~发现上面有很多0,这就是为什么有些人告诉我们找前面是0的原因,其实其本质是因为文件的对齐机制。

参考这里

专业的。

http://bbs.pediy.com/showthread.php?s=&threadid=9182
2005-2-8 15:10
0
雪    币: 214
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
最初由 David 发布
呵呵~发现上面有很多0,这就是为什么有些人告诉我们找前面是0的原因,其实其本质是因为文件的对齐机制。

参考这里

专业的。
........

二哥:你误会了我的意思!我的意思是:上面有很多0的地方有很多处,比如2815360的上面也有很多0,那为什么不从2815360这个地方开始粘贴数据?而偏偏要从2815487这个地方开始粘贴数据?是不是从这两个地方开始粘贴数据都是一样的?俺水平太菜了,请二哥见谅!指教!
2005-2-9 00:48
0
雪    币: 214
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
最初由 ljy3282393 发布

二哥:你误会了我的意思!我的意思是:上面有很多0的地方有很多处,比如2815360的上面也有很多0,那为什么不从2815360这个地方开始粘贴数据?而偏偏要从2815487这个地方开始粘贴数据?是不是从这两个地方开始粘贴数据都是一样的?俺水平太菜了,请二哥见谅!指教!

二哥:干嘛不指教我一下,我等了几天了!
2005-2-13 22:29
0
雪    币: 411
活跃值: (1160)
能力值: ( LV9,RANK:810 )
在线值:
发帖
回帖
粉丝
6
http://bbs.pediy.com/showthread.php?s=&threadid=9182

你看懂就行了,专业级别老师.

这篇放一边
2005-2-13 22:42
0
雪    币: 161
活跃值: (231)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
好贴,强贴啊
2005-2-13 22:53
0
游客
登录 | 注册 方可回帖
返回
//