好友
阅读权限 40
听众
最后登录 1970-1-1
我是用户
发表于 2013-5-25 12:48
本帖最后由 我是用户 于 2013-6-23 13:50 编辑
【软件 名称】: 豪杰屏幕录像机 v2.0
【作者邮箱】: 2714608453@qq.com
【下载地址】: http://www.skycn.com/soft/12856.html
【加壳 方式】: Microsoft Visual C++ 6.0
【使用工具】: OD
【操作平台】: XP SP2
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
与注册相关的文件:
EXE:
Courseware2.exe 主程序
AuthReg.exe 注册程序
play.exe 录像播放程序
DLL:
RUNEXEC.dll 验证函数(试用框资源)
SthClass.dll 验证函数
1.查壳
分别对Courseware2.exe,AuthReg.exe,play.exe,RUNEXEC.dll,SthClass.dll 用PEID查壳。
结果如下:
Courseware2.exe Microsoft Visual C++ 6.0
AuthReg.exe Microsoft Visual C++ 6.0
play.exe Microsoft Visual C++ 6.0
RUNEXEC.dll PE Win32 DLL (0 EntryPoint)(无壳)
SthClass.dll PE Win32 DLL (0 EntryPoint)(无壳)
都没有壳,很好,直接载入OD。
2.简单的分析
第一点:Courseware2.exe,play.exe运行之前会调用RUNEXEC.dll。
在RUNEXEC.dll中先判断注册码是否正确,正确直接跳过试用框,错误则判断日期是否到期(满30天)
第二点:AuthReg.exe为注册程序,验证函数在SthClass.dll里,如果成功,则保存注册码。
第三点:RUNEXEC.dll与SthClass.dll两者的注册函数是一样的。
3.具体的分析(PS:因为DLL存在重定位问题,所以基址不同,地址也不相同)
对RUNEXEC.dll的分析。
用OD载入Courseware2.exe,未到达Courseware2.exe的OEP,试用框窗口已出现,点击确定或试用后,到达Courseware2.exe的OEP。
因为我们要对RUNEXEC.dll下断,然后Ctrl+F2重新运行,程序成功断下。
RUNEXEC.dll分析代码如下:
[C] 纯文本查看 复制代码
00621C60 /$ 8B4424 08 mov eax,dword ptr ss:[esp+0x8] ; runexec.00628000
00621C64 |. 83EC 10 sub esp,0x10
00621C67 |. 83F8 01 cmp eax,0x1
00621C6A |. 56 push esi ; runexec.00620000
00621C6B |. 0F85 96000000 jnz runexec.00621D07
00621C71 |. 8B0D 28806200 mov ecx,dword ptr ds:[0x628028]
00621C77 |. 8BC1 mov eax,ecx
00621C79 |. 41 inc ecx
00621C7A |. 890D 28806200 mov dword ptr ds:[0x628028],ecx
00621C80 |. 85C0 test eax,eax
00621C82 |. 74 0C je short runexec.00621C90
00621C84 |. B8 01000000 mov eax,0x1
00621C89 |. 5E pop esi ; runexec.00620000
00621C8A |. 83C4 10 add esp,0x10
00621C8D |. C2 0C00 retn 0xC
00621C90 |> E8 8B000000 call runexec.00621D20 ; 注册CALL
00621C95 |. 8BF0 mov esi,eax
00621C97 |. 85F6 test esi,esi ; runexec.00620000
00621C99 |. 75 63 jnz short runexec.00621CFE ; 跳走则表示注册成功,未跳走则取系统时间进行日期比较
00621C9B |. 8D4424 04 lea eax,dword ptr ss:[esp+0x4]
00621C9F |. 50 push eax ; /pSystemTime = NULL
00621CA0 |. FF15 C8916200 call dword ptr ds:[<&KERNEL32.GetSystemT>; \GetSystemTime
00621CA6 |. 8B4C24 04 mov ecx,dword ptr ss:[esp+0x4] ; runexec.006265E4
00621CAA |. 33C0 xor eax,eax
00621CAC |. 66:8B4424 06 mov ax,word ptr ss:[esp+0x6]
00621CB1 |. 81E1 FFFF0000 and ecx,0xFFFF
00621CB7 |. C1E1 04 shl ecx,0x4
00621CBA |. 0BC8 or ecx,eax
00621CBC |. 33C0 xor eax,eax
00621CBE |. C1E1 08 shl ecx,0x8
00621CC1 |. 66:8B4424 0A mov ax,word ptr ss:[esp+0xA]
00621CC6 |. 0BC8 or ecx,eax
00621CC8 |. 51 push ecx ; 7DD518(7DD年份,5月份,18日期)
00621CC9 |. 890D 2C806200 mov dword ptr ds:[0x62802C],ecx
00621CCF |. E8 1CF5FFFF call runexec.006211F0 ; 将日期加密保存在注册表里
00621CD4 |. 8B4C24 1C mov ecx,dword ptr ss:[esp+0x1C]
00621CD8 |. 83C4 04 add esp,0x4
00621CDB |. 8BF0 mov esi,eax
00621CDD |. 56 push esi ; runexec.00620000
00621CDE |. 51 push ecx
00621CDF |. E8 4CFFFFFF call runexec.00621C30 ; 出现试用对话框
00621CE4 |. 83C4 08 add esp,0x8
00621CE7 |. 85F6 test esi,esi ; esi=1表示还在使用期
00621CE9 |. 75 13 jnz short runexec.00621CFE
00621CEB |. E8 30000000 call runexec.00621D20
00621CF0 |. 8BF0 mov esi,eax
00621CF2 |. 85F6 test esi,esi ; runexec.00620000
00621CF4 |. 75 08 jnz short runexec.00621CFE
00621CF6 |. 6A 00 push 0x0 ; /ExitCode = 0x0
00621CF8 |. FF15 DC916200 call dword ptr ds:[<&KERNEL32.ExitProces>; \ExitProcess
00621CFE |> 8BC6 mov eax,esi ; runexec.00620000
00621D00 |. 5E pop esi ; runexec.00620000
00621D01 |. 83C4 10 add esp,0x10
00621D04 |. C2 0C00 retn 0xC
00621D07 |> 85C0 test eax,eax
00621D09 |. 75 06 jnz short runexec.00621D11
00621D0B |. FF0D 28806200 dec dword ptr ds:[0x628028]
00621D11 |> B8 01000000 mov eax,0x1
00621D16 |. 5E pop esi ; runexec.00620000
00621D17 |. 83C4 10 add esp,0x10
00621D1A \. C2 0C00 retn 0xC
进入00621D20注册CALL
[C] 纯文本查看 复制代码
00621EEC |. 8D4424 14 lea eax,dword ptr ss:[esp+0x14]
00621EF0 |. 8D5424 54 lea edx,dword ptr ss:[esp+0x54]
00621EF4 |. 50 push eax
00621EF5 |. 52 push edx
00621EF6 |. FFD1 call ecx ; 注册CALL(ECX=00622640)
00621EF8 |. 85C0 test eax,eax
00621EFA |. 7F 1A jg short runexec.00621F16
00621EFC |. 85C0 test eax,eax
00621EFE |. 7D 14 jge short runexec.00621F14
00621F00 |. 85FF test edi,edi
进入00622640注册CALL
[C] 纯文本查看 复制代码
00622640 . 8B4424 08 mov eax,dword ptr ss:[esp+0x8]
00622644 . 50 push eax
00622645 . E8 26000000 call runexec.00622670 ;注册CALL
0062264A . 83C4 04 add esp,0x4
0062264D . 85C0 test eax,eax
0062264F . 75 0D jnz short runexec.0062265E
00622651 . 8B4424 04 mov eax,dword ptr ss:[esp+0x4]
00622655 . 50 push eax
00622656 . E8 E5010000 call runexec.00622840
0062265B . 83C4 04 add esp,0x4
0062265E > C2 0800 retn 0x8
进入00622670注册CALL
[C] 纯文本查看 复制代码
00622670 /$ 8B4424 04 mov eax,dword ptr ss:[esp+0x4]
00622674 |. 81EC 38010000 sub esp,0x138
0062267A |. 8D8C24 B80000>lea ecx,dword ptr ss:[esp+0xB8]
00622681 |. 53 push ebx
00622682 |. 56 push esi ; kernel32.lstrlenA
00622683 |. 50 push eax ; /String2 = ""
00622684 |. 51 push ecx ; |String1 = runexec.00622640
00622685 |. FF15 00926200 call dword ptr ds:[<&KERNEL32.lstrcpyA>] ; \lstrcpyA
0062268B |. 8D4C24 40 lea ecx,dword ptr ss:[esp+0x40]
0062268F |. 8D8424 C00000>lea eax,dword ptr ss:[esp+0xC0]
00622696 |. 51 push ecx ; runexec.00622640
00622697 |. 50 push eax
00622698 |. E8 830C0000 call runexec.00623320
0062269D |. C74424 28 800>mov dword ptr ss:[esp+0x28],0x80
006226A5 |. 8B0D 78816200 mov ecx,dword ptr ds:[0x628178]
006226AB |. 894C24 2C mov dword ptr ss:[esp+0x2C],ecx ; runexec.00622640
006226AF |. 8B15 7C816200 mov edx,dword ptr ds:[0x62817C]
006226B5 |. 895424 30 mov dword ptr ss:[esp+0x30],edx
006226B9 |. 8B15 A8816200 mov edx,dword ptr ds:[0x6281A8]
006226BF |. A1 80816200 mov eax,dword ptr ds:[0x628180]
006226C4 |. 6A 10 push 0x10
006226C6 |. 894424 38 mov dword ptr ss:[esp+0x38],eax
006226CA |. 8D8424 840000>lea eax,dword ptr ss:[esp+0x84]
006226D1 |. 8B0D 84816200 mov ecx,dword ptr ds:[0x628184]
006226D7 |. 50 push eax
006226D8 |. 894C24 40 mov dword ptr ss:[esp+0x40],ecx ; runexec.00622640
006226DC |. 6A 10 push 0x10
006226DE |. 8D4C24 4C lea ecx,dword ptr ss:[esp+0x4C]
006226E2 |. 895424 48 mov dword ptr ss:[esp+0x48],edx
006226E6 |. 8D5424 34 lea edx,dword ptr ss:[esp+0x34]
006226EA |. 51 push ecx ; runexec.00622640
006226EB |. 52 push edx
006226EC |. E8 CF0A0000 call runexec.006231C0
006226F1 |. 8B8C24 940000>mov ecx,dword ptr ss:[esp+0x94]
006226F8 |. 8B9424 980000>mov edx,dword ptr ss:[esp+0x98]
006226FF |. 8D4424 1C lea eax,dword ptr ss:[esp+0x1C]
00622703 |. 894C24 54 mov dword ptr ss:[esp+0x54],ecx ; runexec.00622640
00622707 |. 8D4C24 54 lea ecx,dword ptr ss:[esp+0x54]
0062270B |. 895424 58 mov dword ptr ss:[esp+0x58],edx
0062270F |. 8D5424 40 lea edx,dword ptr ss:[esp+0x40]
00622713 |. 83C4 14 add esp,0x14
00622716 |. 33F6 xor esi,esi ; kernel32.lstrlenA
00622718 |. 897424 48 mov dword ptr ss:[esp+0x48],esi ; kernel32.lstrlenA
0062271C |. 50 push eax
0062271D |. 897424 50 mov dword ptr ss:[esp+0x50],esi ; kernel32.lstrlenA
00622721 |. 51 push ecx ; runexec.00622640
00622722 |. 52 push edx
00622723 |. E8 B8000000 call runexec.006227E0
00622728 |. 8B8C24 940000>mov ecx,dword ptr ss:[esp+0x94]
0062272F |. 8B9424 980000>mov edx,dword ptr ss:[esp+0x98]
00622736 |. 897424 1C mov dword ptr ss:[esp+0x1C],esi ; kernel32.lstrlenA
0062273A |. 897424 20 mov dword ptr ss:[esp+0x20],esi ; kernel32.lstrlenA
0062273E |. 894C24 4C mov dword ptr ss:[esp+0x4C],ecx ; runexec.00622640
00622742 |. 895424 50 mov dword ptr ss:[esp+0x50],edx
00622746 |. 8D4424 24 lea eax,dword ptr ss:[esp+0x24]
0062274A |. 8D4C24 4C lea ecx,dword ptr ss:[esp+0x4C]
0062274E |. 897424 54 mov dword ptr ss:[esp+0x54],esi ; kernel32.lstrlenA
00622752 |. 897424 58 mov dword ptr ss:[esp+0x58],esi ; kernel32.lstrlenA
00622756 |. 83C4 0C add esp,0xC
00622759 |. 50 push eax
0062275A |. 51 push ecx ; runexec.00622640
0062275B |. 8D5424 10 lea edx,dword ptr ss:[esp+0x10]
0062275F |. 52 push edx
00622760 |. E8 7B000000 call runexec.006227E0
00622765 |. 8B4C24 24 mov ecx,dword ptr ss:[esp+0x24]
00622769 |. 8B5424 28 mov edx,dword ptr ss:[esp+0x28] ; MPGAUDIO.005EB008
0062276D |. 8D4424 14 lea eax,dword ptr ss:[esp+0x14]
00622771 |. 894C24 2C mov dword ptr ss:[esp+0x2C],ecx ; runexec.00622640
00622775 |. 8D4C24 24 lea ecx,dword ptr ss:[esp+0x24]
00622779 |. 895424 30 mov dword ptr ss:[esp+0x30],edx
0062277D |. 83C4 0C add esp,0xC
00622780 |. 6A 10 push 0x10
00622782 |. 50 push eax
00622783 |. 6A 10 push 0x10
00622785 |. 68 88816200 push runexec.00628188
0062278A |. 51 push ecx ; runexec.00622640
0062278B |. E8 70040000 call runexec.00622C00
00622790 |. 8B4424 1C mov eax,dword ptr ss:[esp+0x1C] ; SPad.10006000
00622794 |. 83C4 14 add esp,0x14
00622797 3B05 98816200 cmp eax,dword ptr ds:[0x628198] //通过计算后的注册值比较
0062279D EB 27 jnz short runexec.006227D4
0062279F A1 9C816200 mov eax,dword ptr ds:[0x62819C]
006227A4 8B4C24 0C mov ecx,dword ptr ss:[esp+0xC]
006227A8 3BC8 cmp ecx,eax //通过计算后的注册值比较
006227AA 75 28 jnz short runexec.006227D4
006227AC A1 A0816200 mov eax,dword ptr ds:[0x6281A0]
006227B1 8B4C24 10 mov ecx,dword ptr ss:[esp+0x10] ; runexec.00620000
006227B5 3BC8 cmp ecx,eax //通过计算后的注册值比较
006227B7 75 1B jnz short runexec.006227D4
006227B9 A1 A4816200 mov eax,dword ptr ds:[0x6281A4]
006227BE 8B4C24 14 mov ecx,dword ptr ss:[esp+0x14]
006227C2 3BC8 cmp ecx,eax //通过计算后的注册值比较
006227C4 75 0E jnz short runexec.006227D4
006227C6 |. B8 01000000 mov eax,0x1 //注册标志
006227CB |. 5E pop esi ; 0012F7BC
006227CC |. 5B pop ebx ; 0012F7BC
006227CD |. 81C4 38010000 add esp,0x138
006227D3 C3 retn
006227D4 33C0 xor eax,eax //未注册标志
006227D6 5E pop esi ; 0012F7BC
006227D7 5B pop ebx ; 0012F7BC
006227D8 81C4 38010000 add esp,0x138
006227DE \. C3 retn
爆破:1.006227D4处的xor eax,eax改成mov eax,0x1,但是代码长度太长,不合适.
2.0062279D处的jnz short runexec.006227D4改成jmp 006227C6,合适.
当我们照第二点改好之后,保存,注意保存的代码长度,多选会把重定位数据也保存了,因为play.exe也要调用这个CALL,
所以会出错。Ctrl+F2,试用框已不出现了。
顺便说一下使用日期的加密,只是单纯的取反加密罢了,保存日期的键值是通过xor 7F进行加密的,感兴趣
的朋友可以去跟一下。
然后在SthClass.dll中也找到相应的代码,修改之后,保存,成功爆破。
如图1,2:
=================================================================
传送门:
破解 实战-第一战:http://www.52pojie.cn/thread-197281-1-1.html
破解实战-第二战:http://www.52pojie.cn/thread-197598-1-1.html
破解实战-第三站:http://www.52pojie.cn/thread-197957-1-1.html
破解实战-第四站:http://www.52pojie.cn/thread-198203-1-1.html
破解实战-第五战:http://www.52pojie.cn/thread-198365-1-1.html
破解实战-第六战:http://www.52pojie.cn/thread-198930-1-1.html
破解实战-第七战:http://www.52pojie.cn/thread-199459-1-1.html
破解实战-第八战:http://www.52pojie.cn/thread-199834-1-1.html
破解实战-第九战:http://www.52pojie.cn/thread-200655-1-1.html
破解实战-第十战:http://www.52pojie.cn/thread-200798-1-1.html
免费评分
查看全部评分
本帖被以下淘专辑推荐:
· 破解教程 | 主题: 126, 订阅: 214
· 教程 | 主题: 123, 订阅: 88