吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 79248|回复: 78
上一主题 下一主题
收起左侧

[原创] 破解实战-第二战

  [复制链接]
跳转到指定楼层
楼主
我是用户 发表于 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] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
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] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
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] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
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

点评

建议楼主发图文贴,有利于新手学习~ 期待楼主新作!  发表于 2013-5-25 13:23

免费评分

参与人数 4吾爱币 +2 热心值 +4 收起 理由
沫弦幽幽 + 2 + 1 用心讨论,共获提升!
yeluosuif + 1 谢谢@Thanks!
xheonen + 1 欢迎分析讨论交流,[吾爱破解论坛]有你更精.
Chief + 1 欢迎分析讨论交流,[吾爱破解论坛]有你更精.

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
SxAni丶 发表于 2013-5-25 13:18
下载来练练手
推荐
a46213599 发表于 2015-8-2 12:09
因大神的连接地址已失效,自己直接百度下载的这个软件安装后为什么没有RUNEXEC.dll这个。

跟楼主文件不一样了,我又不会弄了,能写个详细点儿的教程吗?

我安装后文件列表如下:

Appicon.ico
HSR.ico
AuthReg.exe
Courseware2.exe
play.exe
SEdit.exe
UNINST32.EXE
Auth936.dll
Auth950.dll
CapFileIO.dll
caphook.dll
CAPSCRN.DLL
Courseware2936.dll
EncFAVI.DLL
EncFGif.DLL
ENCMPA.DLL
HttpReq.dll
MPGAUDIO.DLL
SEdit_ch.dll
SEdit_en.dll
SPad.dll
SthClass.dll
TimeCount.dll
UNIST936.DLL
WaveOut.dll
WAVEREC.DLL

免费评分

参与人数 1热心值 +1 收起 理由
hzqjhhjq + 1 我也这样。。

查看全部评分

3#
小雨细无声 发表于 2013-5-25 13:22
4#
1354669803 发表于 2013-5-25 13:45
一个很明显的验证
5#
wkxq 发表于 2013-5-25 14:01
有学习的必要
6#
q349806278 发表于 2013-5-25 14:34
感谢,,学习了
7#
jy03024663 发表于 2013-5-25 14:59
前排,太高端了。
对于新手来说太复杂咯。
8#
老万 发表于 2013-5-25 20:01
谢谢楼主,学习了,好教程
9#
yuxiaopc 发表于 2013-5-30 14:31
谢谢楼主,当作范例收藏了。论坛太需要这样的教程了
10#
107883194 发表于 2013-6-1 17:16
问个小白的问题。RUNEXEC.dll下断  要怎么下断点  我怎么进不去00621c60这段代码 用F8单步也不行
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-2-21 22:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表