首页
社区
课程
招聘
[旧帖] [求助]屏幕间谍2008(完美破解) 0.00雪花
发表于: 2008-9-26 17:06 14206

[旧帖] [求助]屏幕间谍2008(完美破解) 0.00雪花

2008-9-26 17:06
14206
本人初学   还请各位大力支持      技术太差   见笑
   
本贴是求助贴,求助解释一下出现如下问题的原因
  
      2005年7月的时候,开始接触脱壳破解,一开始就拿屏幕间谍2004练习了一下,竟然给爆破了,昨天整理硬盘的时候,发现了曾经这个东西,突发奇想,想看看作者有没有更新的版本发布,在程序自我保护方面有没有新的改进,于是在网上看了一下,发现原来有了最新的版本,2008版,也就是spy1612x(我不知道这个是不是最新版的,我认为可能是吧),于是拿来测试,发现这次加的壳和屏幕间谍2004版的壳相同(ASProtect 1.22 - 1.23 Beta 21 -> Alexey Solodovnikov),编译语言也相同 vb,所以今天就拿他试演了。

   说明一下:本人只是出于测试,没有其他目的,如果有不妥之处轻指出!

脱壳就不用说了 软件直接脱壳,至于破解  本人现在还不知道怎么才能进去分析该软件,发现一旦运行就直奔系统控制区,7*******,没法,测试了n久,发现函数调用
00401186   .- FF25 28104000 jmp     dword ptr [<&msvbvm60.#595>]     ;  msvbvm60.rtcMsgBox
处下断能断下来
运行程序,shift+f9    15次后程序正常运行,打开注册页面,填入注册码,确定,
程序第一次被断在401186的时候看到堆栈窗口 中有
0012E628   00197194  UNICODE "5471152008"
实际上这个就是注册码了,后来经过分析知道,该软件2008版1612x的注册码格式如下:
前三位是每个计算机不同,具体怎么得来的还有待高手提示我怎么进入软件处理数据区了才能知道,注册码第4,5,6位是通过你输入的用户名计算得来的(还是不知道怎么算的,跟踪,算法方面一窍不通),注册码第7,8,9,10位是固定的数字2008   ,虽然我这样能找到注册码

可是我的目标是至少找到爆破点,能做出补丁文件,或者破解文件,至于算法,请那位高人先告诉我怎么才能跟踪到该软件的代码里面去!

00401120   .- FF25 AC104000 jmp     dword ptr [<&msvbvm60.#610>]     ;  msvbvm60.rtcGetDateVar
00401126   .- FF25 B0104000 jmp     dword ptr [<&msvbvm60.#613>]     ;  msvbvm60.rtcVarStrFromVar
0040112C   .- FF25 10104000 jmp     dword ptr [<&msvbvm60.#660>]     ;  msvbvm60.rtcVarFromFormatVar
00401132   .- FF25 C0104000 jmp     dword ptr [<&msvbvm60.#619>]     ;  msvbvm60.rtcRightCharVar
00401138   .- FF25 E0104000 jmp     dword ptr [<&msvbvm60.#581>]     ;  msvbvm60.rtcR8ValFromBstr
0040113E   .- FF25 38104000 jmp     dword ptr [<&msvbvm60.#522>]     ;  msvbvm60.rtcLeftTrimVar
00401144   .- FF25 34104000 jmp     dword ptr [<&msvbvm60.#520>]     ;  msvbvm60.rtcTrimVar
0040114A   .- FF25 78104000 jmp     dword ptr [<&msvbvm60.#607>]     ;  msvbvm60.rtcStringVar
00401150   .- FF25 7C104000 jmp     dword ptr [<&msvbvm60.#608>]     ;  msvbvm60.rtcVarBstrFromAnsi
00401156   .- FF25 B8104000 jmp     dword ptr [<&msvbvm60.#617>]     ;  msvbvm60.rtcLeftCharVar
0040115C   .- FF25 68104000 jmp     dword ptr [<&msvbvm60.#711>]     ;  msvbvm60.rtcSplit
00401162   .- FF25 4C104000 jmp     dword ptr [<&msvbvm60.#528>]     ;  msvbvm60.rtcUpperCaseVar
00401168   .- FF25 94104000 jmp     dword ptr [<&msvbvm60.#645>]     ;  msvbvm60.rtcDir
0040116E   .- FF25 08104000 jmp     dword ptr [<&msvbvm60.#518>]     ;  msvbvm60.rtcLowerCaseVar
00401174   .- FF25 80104000 jmp     dword ptr [<&msvbvm60.#531>]     ;  msvbvm60.rtcMakeDir
0040117A   .- FF25 40104000 jmp     dword ptr [<&msvbvm60.#632>]     ;  msvbvm60.rtcMidCharVar
00401180   .- FF25 1C104000 jmp     dword ptr [<&msvbvm60.#554>]     ;  msvbvm60.rtcFileReset
00401186   .- FF25 28104000 jmp     dword ptr [<&msvbvm60.#595>]     ;  msvbvm60.rtcMsgBox
0040118C   .- FF25 98104000 jmp     dword ptr [<&msvbvm60.#571>]     ;  msvbvm60.rtcEndOfFile
00401192   .- FF25 88104000 jmp     dword ptr [<&msvbvm60.#717>]     ;  msvbvm60.rtcStrConvVar2
00401198   .- FF25 DC104000 jmp     dword ptr [<&msvbvm60.#580>]     ;  msvbvm60.rtcSetFileAttr
0040119E   .- FF25 5C104000 jmp     dword ptr [<&msvbvm60.#600>]     ;  msvbvm60.rtcShell
004011A4   .- FF25 50104000 jmp     dword ptr [<&msvbvm60.#529>]     ;  msvbvm60.rtcKillFiles
004011AA   .- FF25 04104000 jmp     dword ptr [<&msvbvm60.#516>]     ;  msvbvm60.rtcAnsiValueBstr
004011B0   .- FF25 30104000 jmp     dword ptr [<&msvbvm60.#599>]     ;  msvbvm60.rtcSendKeys
004011B6   .- FF25 A0104000 jmp     dword ptr [<&msvbvm60.#685>]     ;  msvbvm60.rtcErrObj
004011BC   .- FF25 44104000 jmp     dword ptr [<&msvbvm60.#526>]     ;  msvbvm60.rtcSpaceVar
004011C2   .- FF25 6C104000 jmp     dword ptr [<&msvbvm60.#712>]     ;  msvbvm60.rtcReplace
004011C8   .- FF25 90104000 jmp     dword ptr [<&msvbvm60.#537>]     ;  msvbvm60.rtcBstrFromAnsi
004011CE   .- FF25 18104000 jmp     dword ptr [<&msvbvm60.#661>]     ;  msvbvm60.rtcDateAdd
004011D4   .- FF25 84104000 jmp     dword ptr [<&msvbvm60.#532>]     ;  msvbvm60.rtcRemoveDir
004011DA   .- FF25 74104000 jmp     dword ptr [<&msvbvm60.#606>]     ;  msvbvm60.rtcStringBstr
004011E0   .- FF25 A8104000 jmp     dword ptr [<&msvbvm60.#579>]     ;  msvbvm60.rtcGetFileAttr
004011E6   .- FF25 2C104000 jmp     dword ptr [<&msvbvm60.#598>]     ;  msvbvm60.rtcDoEvents
004011EC   .- FF25 B4104000 jmp     dword ptr [<&msvbvm60.#616>]     ;  msvbvm60.rtcLeftCharBstr
004011F2   .- FF25 9C104000 jmp     dword ptr [<&msvbvm60.#573>]     ;  msvbvm60.rtcHexVarFromVar
004011F8   .- FF25 70104000 jmp     dword ptr [<&msvbvm60.#713>]     ;  msvbvm60.rtcStrReverse
004011FE   .- FF25 24104000 jmp     dword ptr [<&msvbvm60.#594>]     ;  msvbvm60.rtcRandomize
00401204   .- FF25 20104000 jmp     dword ptr [<&msvbvm60.#593>]     ;  msvbvm60.rtcRandomNext
0040120A   .- FF25 BC104000 jmp     dword ptr [<&msvbvm60.#618>]     ;  msvbvm60.rtcRightCharBstr
00401210   .- FF25 0C104000 jmp     dword ptr [<&msvbvm60.#519>]     ;  msvbvm60.rtcTrimBstr
00401216   .- FF25 3C104000 jmp     dword ptr [<&msvbvm60.#524>]     ;  msvbvm60.rtcRightTrimVar
0040121C   .- FF25 64104000 jmp     dword ptr [<&msvbvm60.__vbaExcep>;  msvbvm60.__vbaExceptHandler
00401222   .- FF25 60104000 jmp     dword ptr [<&msvbvm60.EVENT_SINK>;  msvbvm60.EVENT_SINK_QueryInterface
00401228   .- FF25 48104000 jmp     dword ptr [<&msvbvm60.EVENT_SINK>;  msvbvm60.EVENT_SINK_AddRef
0040122E   .- FF25 58104000 jmp     dword ptr [<&msvbvm60.EVENT_SINK>;  msvbvm60.EVENT_SINK_Release
00401234   .- FF25 00104000 jmp     dword ptr [<&msvbvm60.MethCallEn>;  msvbvm60.MethCallEngine
0040123A   .- FF25 8C104000 jmp     dword ptr [<&msvbvm60.ProcCallEn>;  msvbvm60.ProcCallEngine
00401240   $- FF25 A4104000 jmp     dword ptr [<&msvbvm60.#100>]     ;  msvbvm60.ThunRTMain
00401246      00            db      00
00401247      00            db      00
00401248 > $  68 CC154000   push    004015CC                         ;  ASCII "VB5!6&vb6chs.dll"
0040124D   .  E8 EEFFFFFF   call    <jmp.&msvbvm60.#100>
00401252   .  0000          add     byte ptr [eax], al
00401254   .  0000          add     byte ptr [eax], al
00401256   .  0000          add     byte ptr [eax], al
00401258   .  3000          xor     byte ptr [eax], al
0040125A   .  0000          add     byte ptr [eax], al
0040125C   .  40            inc     eax
0040125D   .  0000          add     byte ptr [eax], al
0040125F   .  0000          add     byte ptr [eax], al
00401261   .  0000          add     byte ptr [eax], al
00401263   .  001E          add     byte ptr [esi], bl
00401265   .  64:62B6 4C8DD>bound   esi, qword ptr fs:[esi+46D68D4C]

经过测试  同时发现
004011AA   .- FF25 04104000 jmp     dword ptr [<&msvbvm60.#516>]     ;  msvbvm60.rtcAnsiValueBstr
处能断下来,根据内容猜测是逐个用户名断下来执行,只是里面的都是在系统领域执行,不知道这样执行有什么意义?  主要是回不到程序领空, 不知道程序中是怎么执行的,怎么计算注册码的!

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 211
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
忘记了    把堆栈数据发上来

0012E608   7348D30A  返回到 msvbvm60.7348D30A
0012E60C   0012E740
0012E610   00000010
0012E614   0012E720
0012E618   0012E700
0012E61C   0012E6E0
0012E620   00000000
0012E624   00000000
0012E628   00197134  UNICODE "5471202008"
0012E62C   00000000
0012E630   00000000
2008-9-26 17:08
0
雪    币: 1355
活跃值: (334)
能力值: ( LV13,RANK:920 )
在线值:
发帖
回帖
粉丝
3
看起来挺好玩的,我考虑下要不要玩

"5471202008"--547 跟系统或者用户环境有关,这个我跟了出来,但是始终不明白什么意思,可以肯定,同台电脑上的这个值不会变化,也就是说“120”是关键,而“120”恰恰是用户名第一字母的ASCII值,“2008”是固定值。

更正下:不是ASPROTECT壳,是UPX压缩壳,VB6.0 的 VB-PCODE 解析。

希望你能验证下。。。
2008-9-26 18:01
0
雪    币: 334
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
0012E628   00197134  UNICODE "5471202008"
这个估计就是注册码
2008-9-26 19:59
0
雪    币: 211
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
3楼的兄弟,你用的什么查壳工具阿,我这里fi   查出来的  ASProtect v1.23 A.S     .data
和pe 查出来的一样啊    不知道你看的什么版本

你分析的后面的注册码来历很正确,我现在正在查找前三位的计算方法

4楼的 ,跟踪出来的这个数值就是正确的注册码,可就是不知道怎么得来的   怎么才能跟踪软件的源代码
2008-9-27 07:07
0
雪    币: 331
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼主用什么软件脱壳的?
2008-9-27 07:24
0
雪    币: 211
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
Stripper 2.07ht     

看雪工具下在里面有的,你仔细看看 ,我手工能跟到eip  就是脱不了
2008-9-27 07:29
0
雪    币: 1355
活跃值: (334)
能力值: ( LV13,RANK:920 )
在线值:
发帖
回帖
粉丝
8
对付这样的可以爆破的软件,爆破还是可以的,不必太执着跟踪注册码.
2008-9-27 13:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
经多种侦壳工具,鉴定为:UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
                                UPX -> Markus & Laszlo ver. [ 3.02 ] <- info from file.
                                UPX v0.89.6 - v1.02 / v1.05 - v1.22 -> Markus & Laszlo
                                UPX -> Markus & Laszlo ver. [ 3.02 ] <- 来自文件的信息
2008-9-27 15:42
0
雪    币: 211
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
你们侦测的那个是reader.exe   我检测的是wros.exe   所以检测的壳不一样

原来注册的时候调用的时reader.exe 啊, 我把这个(reader)脱了后发现好像是这样的
2008-9-27 15:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
都一样,四个EXE文件要么是没壳,要么就是UPX的壳!!!   而且OD一下就跑起来了,没异常!!!
2008-9-27 16:18
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
12
str= 'CNT'+C糟之物理硬盘之硬件序号(我为'S00MJI10XA07425')
   = 'CNTS00MJI10XA07425'

第1组 : 1AEh + str[前字]+str[后字]
       =1AEh + 43h + 35h
       =226h
       =550

第2组 : username[0] = 's' = 97h = 115
(我输入sessiondiy)

第3组 : 2008

我的序号 = 5501152008
2008-9-27 19:52
0
雪    币: 211
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
没想到  注册码算法这么简单啊
既然算法这么简单  那么它的注册码就很容易算了

第一组 因为硬件序列号最后一位一般都是数字,所以第一组只有10个数字

他们是:545---554

第二组直接查ASCII码表就可以知道

第三组  2008

所以  就不用怎么算了 ,直接用你用户名算出来的10组注册码测试一下就行了,不需要别的什么复杂的注册机了!

一点看法:    16.12版注册了还是会20分钟弹出网页,可以下载最新版本16.14版,注册码算法和原来相同,解决了自动打开网页问题。
2008-9-28 11:20
0
雪    币: 211
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
存在一个问题 ,发现尽管显示已经注册了,但还是20分钟弹出软件主页!   谁给提示一下vb计时方面
2008-10-2 00:41
0
雪    币: 210
活跃值: (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
似乎是SETTIME函数
2008-10-5 19:55
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
估计这样注册是不对的,上了软件作者的当了,真正的注册码不是这样的!你修改屏幕截图时间看看就知道了!
2008-10-7 10:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
上了当了,不可能就怎么简单就破了
2008-12-18 18:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
牛文!目前还是有点看不懂
2008-12-18 19:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
顶先 下下来看看
2009-1-12 00:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
学习了,谢谢!
2009-1-14 09:14
0
游客
登录 | 注册 方可回帖
返回
//