吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 77181|回复: 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] 纯文本查看 复制代码
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

点评

建议楼主发图文贴,有利于新手学习~ 期待楼主新作!  发表于 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, 2024-4-26 09:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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