【脱文标题】 易语言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期)