首页
社区
课程
招聘
[旧帖] [讨论][求助]结果找上了我,,谁能提示一下相关的步骤? 0.00雪花
发表于: 2010-8-9 20:16 2026

[旧帖] [讨论][求助]结果找上了我,,谁能提示一下相关的步骤? 0.00雪花

2010-8-9 20:16
2026
得到热心人(dvag 和 私仇之路)(这两位人是活跃的热心人,到处能看到身影~~呵呵)的帮助,找出小林子QQ相册批量下载器1.16的注册码后,
(如下:http://bbs.pediy.com/showthread.php?t=118190

又看了这种软件系列的另一款软件,QQ动感影集下载器(QQFlash),
软件介绍见
http://hi.baidu.com/softsing/blog/item/b9de1888e4a3bcbf0e244477.html
若要下载,建议选择 软行天下 下载。

先把我的机子上注册成功的画面贴出来




这款软件应该是没壳,,用OllyDbg载入正常,,应该与QQ相册批量下载器1.16保护机制类似。。

用OD载入,,之前设置的几处断点没怎么改动,就没管了  (本人是新手,,没怎么深究,也没办法深究)



任意试着调试了几次,,有一次出现了异常,但突然发现了机器码的前三位



后来不知怎么弄的,,发现了本机的机器码:


这个与QQ相册批量下载器里的情况有些类似,,我就把QQ相册批量下载的那张图放在开始提到的帖子的回复里面。。

后来再弄弄试试,,不知哪一次就发现了那个很像注册码的字符串:

“0012E47C   00C57F70  p?      ASCII "A4Q8GHLO0KOYENXS8T9K"

将后面的填进注册框,点确定,,注册成功!!!   

好了,,上面的貌似是废话。

刚才又试了一下,,调试时竟然又出现让我注册的按钮了,,点了后,,再点“确定”,出现“注册失败”,,这时将将右下角的窗口处(我连这个窗口叫什么都不确定,呵呵),找到0012E47C 处,,看到了让我欣喜的  




当然这只是 记事本里的,,因为前面需要注册成功的画面,我就输了正确的注册了,,现在想找注册的界面也找不到了。     

到了说疑问的地方了,,


1.。。在一开始就提到的帖子中按照

在OD载入后怎么也找不到00503C85,,在W32Dasm载入后有,,在OllyDbg中代码窗口显示的总比W32Dasm少些,,是什么区别?


2,。。先前我注册过QQ动感影集下载器了,,吃了饭回来后刚才所说的这次调试中又出现了注册的按钮(注册后就没有注册成功的按钮了),是怎么回事呢?现在想让它出现它都不出现……


3,。。关于下关键断点还是不知道怎么找,,上面提到的几个之前随便设置的断点不知有没有起作用,,常看到调试时有一个注册表的内容飞过,,就是停不下来,,谁能帮帮忙,,告诉我怎么找到关键的断点的?包括本文开始提到的那个帖子中的那个断点是大概怎么找到的?  有了具体的注册码出现点,,相当于有了结果,,谁能给个过程(或者干脆另发一个关于这两个软件的帖)?要是能的话太感谢了~~~……

最后在写一句话,,我是菜鸟,,是黑暗中的摸索者,,别拍砖哈~~

在过几天就要忙起来,,没多少时间顾这个了……

哎,,写了这么多,,希望有成效啊……

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 73
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
刚进来就看到我的名字吓我一跳哈。我刚学跟人凑凑热闹而已。你不会用破解相册批量下载的软件方法来破解这个软件吧?想要去到00503C85可以按CTRL+G然后输入00503C85即可,当然前提是有这个地址。
2010-8-9 20:32
0
雪    币: 156
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
么有这个地址,,上面就记录了我发现的步骤,,,可以说是偶然找到注册码了,,,,这个软件我根本就不知道断哪里,,包括那个QQ相册批量下载器的那个断点,,,怎么找到的呢?

说实话,,小林子的那批软件很值得研究,,,不过不知道小林子本人是否在这个论坛,,,呵呵呵~~~
2010-8-9 20:36
0
雪    币: 193
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
咦。。。小私。。。来看,这次也有你哎。。。看来咱真的出名了哇。。。

欣喜之余给lz留下注册表断的函数:

bp RegOpenKey(A) 打开子健
bp RegOpenKeyEx 打开子健
bp RegQueryValue(A) 查找子健
bp RegQueryValueEx 查找子健
bp RegSetValue(A) 设置子健
bp RegSetValueEx(A) 设置子健

希望对你有用哦
2010-8-9 20:54
0
雪    币: 73
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我是找程序对GetWindowTextA函数的调用,找到读取输入的注册码的地方,对保存注册码的内存下访问断点,然后就可以找到真正的注册码了。




我找到的地方:

00405A0B   .  56            PUSH ESI
00405A0C   .  57            PUSH EDI
00405A0D   .  8B7C24 0C     MOV EDI,DWORD PTR SS:[ESP+C]
00405A11   .  8BF1          MOV ESI,ECX
00405A13   .  8D46 74       LEA EAX,DWORD PTR DS:[ESI+74]
00405A16   .  50            PUSH EAX                                 ; /Arg3 = 0012F05C
00405A17   .  68 06040000   PUSH 406                                 ; |Arg2 = 00000406
00405A1C   .  57            PUSH EDI                                 ; |Arg1
00405A1D   .  E8 D5170100   CALL QQFlash1.004171F7                   ; \读取机器码
00405A22   .  8D46 78       LEA EAX,DWORD PTR DS:[ESI+78]
00405A25   .  50            PUSH EAX                                 ; /Arg3
00405A26   .  68 07040000   PUSH 407                                 ; |Arg2 = 00000407
00405A2B   .  57            PUSH EDI                                 ; |Arg1
00405A2C   .  E8 C6170100   CALL QQFlash1.004171F7                   ; \读取注册码
00405A31   .  83C6 7C       ADD ESI,7C
00405A34   .  56            PUSH ESI                                 ; /Arg3
00405A35   .  68 08040000   PUSH 408                                 ; |Arg2 = 00000408
00405A3A   .  57            PUSH EDI                                 ; |Arg1
00405A3B   .  E8 17170100   CALL QQFlash1.00417157                   ; \QQFlash1.00417157
00405A40   .  5F            POP EDI
00405A41   .  5E            POP ESI
00405A42   .  C2 0400       RETN 4
上传的附件:
2010-8-9 21:30
0
雪    币: 193
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
我下的是消息massageboxexa
2010-8-9 21:58
0
雪    币: 73
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这样子回来会不会很困难?
2010-8-9 22:34
0
雪    币: 156
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
忙这个软件到现在,,还没时间过来看,,只有明早过来学习了……
2010-8-9 23:03
0
雪    币: 193
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
没啊,只是重复加载几次而已啦。。。比较保险
2010-8-9 23:05
0
雪    币: 166
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
收藏了,学习一下
2010-8-10 08:09
0
雪    币: 156
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
为什么我只能在右下角的窗口看到我输入的注册码和真实的注册码?




还有左下角显示“当读取00AD7A98时设置内存断点”是怎么出来的?
在上面输入“dd 00ad7a98”,回车后提示“地址不指向任何地方”……

貌似是我不会下内存断点造成的……
上传的附件:
2010-8-10 13:22
0
雪    币: 156
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
问题已解决,,再次感谢那两位热心人的帮忙,,

应该来说对GetWindowTextA与massageboxa下断点再加上内存断点能解决简单的软件(仅仅是猜想~~)

2010-8-10 14:50
0
雪    币: 156
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13

这个软件与QQAlbum 1.12 稍有不同,,但也差不多,,
可以找到004D78E4这个关键地方,,(先要利用内存及相关函数(GetWindowText与Messagebox)断点在点下注册后用F8到达这些数据区域),,
在004D78E4处下断点,,几次F9后寄存器窗口会出现注册码,
若是F8步进,关注0012E7F4处,此处会先于上面的情况出注册码,0012E804处则是注册码,,

在软件界面点软件注册后步进  , 右下角窗口0012E580出现乱码,再步进,寄存器窗口出现user.dat,步进,乱码消失,0012E7F4出现相似的乱码,但注册码与机器码也都出来了,,软件窗口输入任意注册码点注册后,,步进,,0012E6E4处出现的与0012E7F4应该一样乱码,(其中有两行是注册码与机器码),,再看0012F05C 和 0012F060处,分别出现了机器码和输入的注册码,,0012E550和其上不远处有三行显示输入的注册码,,(还有很多地方有b986e8adad09e1413e0cf5ccfbea9c967f436e389c0d3348411f0990583c10f977fa73d30fc0a476b7505eddabfca25585aa,不知是什么字符串)

(备注(第二天):这里应该是用了读写文件方面的函数断点,,今天没用这个断点就没能复现这个过程。)
(备注(第三天):“0012E7F4出现相似的乱码,但注册码与机器码也都出来了”,这里应该不是最先出现机器码或注册码的地方,至少有一点,,这些乱码的出现是有顺序的,,今天就发现0012E7F4下面的0012E804出现机器码,,但乱码还未出现,,今天好像也没怎么看到这里出现乱码。今天得出:
004212F6      8B75 0C       MOV ESI,DWORD PTR SS:[EBP+C]
004212F9  |.  57            PUSH EDI     ;  //ESI中首次出现机器码   。。。
当然,这是在没有user.dat的文件的情况下)

两下F9,,寄存器窗口显示出了正确的注册码,而0012E6E4与0012F05C处没有变化,,0012E47C,,0012E458处显示的是注册码,,

{{
(断点:内存访问,,004121D5(GetWindowText函数),,,00405A1D(上面所说的读取机器码的地方))
在左下侧窗口查找,并将0012E6E4处的注册码改为想要的注册码,,运行回到软件界面会显示注册成功。软件界面上也没了注册的选项。。。其实在这里出现之前就改过,,但0012E6E4这个地址处出现的还是真实的注册码,,,,,由此可判断,,,显示的  注册成功与否  是这里决定的。。
(备注(第三天):生成的user.dat文件中还是输入的假注册码,通不过重启验证,,这次试验对找爆破点有帮助,,但是很粗,,不太好采纳,,今天也没有尝试复现这个过程,,相比于其他的意义不大。。)

下面是一些记录(一步步F8过来的(只有几个地方跳))

*************************************************************

是删了原有的文件重新开始的,,但是先前利用修改0012E6E4的注册码使其出现注册成功画面的……
(备注(第二天):这句话可能有些不准确,,内存中出现了先前修改的假注册码,,是真的在调试之前把相关文件删了还是软件在注册表上有残留?)

(备注(第三天):可以确定,,输入假注册码并使其注册成功的那次产生的user.dat肯定没有被删去)
大部分时间用的断点:
断点
地址       模块       激活                       反汇编                                   注释
00405A1D   QQFlash1   始终                         CALL QQFlash1.004171F7
00405A2C   QQFlash1   已禁止                        CALL QQFlash1.004171F7
004064F0   QQFlash1   始终                         CALL DWORD PTR DS:[<&KERNEL32.DeleteFil
00406AAE   QQFlash1   始终                         CALL DWORD PTR DS:[<&KERNEL32.WriteFile
00408BF1   QQFlash1   始终                         CALL DWORD PTR DS:[<&KERNEL32.DeleteFil
00408F8F   QQFlash1   始终                         CALL DWORD PTR DS:[<&KERNEL32.DeleteFil
0040FCD8   QQFlash1   已禁止                        CALL DWORD PTR DS:[<&USER32.MessageBoxA
004121D5   QQFlash1   始终                         CALL DWORD PTR DS:[<&USER32.GetWindowTe
00415EC4   QQFlash1   始终                         CALL DWORD PTR DS:[<&USER32.GetWindowTe
00417226   QQFlash1   始终                         CALL DWORD PTR DS:[<&USER32.GetWindowTe
00417447   QQFlash1   已禁止                        CALL DWORD PTR DS:[<&ADVAPI32.RegQueryV
00417AF3   QQFlash1   已禁止                        CALL DWORD PTR DS:[<&ADVAPI32.RegQueryV
0041B6DB   QQFlash1   始终                         CALL DWORD PTR DS:[<&KERNEL32.ReadFile>
0041B717   QQFlash1   始终                         CALL DWORD PTR DS:[<&KERNEL32.WriteFile
0042133D   QQFlash1   始终                         CALL DWORD PTR DS:[<&USER32.GetWindowTe
004303E9   QQFlash1   已禁止                        MOVZX CX,BYTE PTR DS:[EDX]
00436468   QQFlash1   始终                         CALL DWORD PTR DS:[<&KERNEL32.WriteFile
00439F8A   QQFlash1   始终                         CALL DWORD PTR DS:[<&KERNEL32.ReadFile>
0043A042   QQFlash1   始终                         CALL DWORD PTR DS:[<&KERNEL32.ReadFile>
0043A26E   QQFlash1   始终                         CALL DWORD PTR DS:[<&KERNEL32.ReadFile>
0043AFA5   QQFlash1   已禁止                        JMP SHORT QQFlash1.0043B007
0043E917   QQFlash1   始终                         CALL DWORD PTR DS:[<&KERNEL32.WriteFile
0043E958   QQFlash1   始终                         CALL DWORD PTR DS:[<&KERNEL32.WriteFile
0043EA72   QQFlash1   始终                         CALL DWORD PTR DS:[<&KERNEL32.WriteFile
0043EB15   QQFlash1   始终                         CALL DWORD PTR DS:[<&KERNEL32.WriteFile
0043EBEC   QQFlash1   始终                         CALL DWORD PTR DS:[<&KERNEL32.WriteFile
0043EC34   QQFlash1   始终                         CALL DWORD PTR DS:[<&KERNEL32.WriteFile
0044820C   QQFlash1   已禁止                        ADC BL,BYTE PTR DS:[EAX]
004D78E4   QQFlash1   始终                         CALL QQFlash1.004D70CD
004D78E9   QQFlash1   仅一次                        MOV EDX,DWORD PTR SS:[EBP+4]
004DAC79   QQFlash1   仅一次                        JB SHORT QQFlash1.004DAC0B
004DB00B   QQFlash1   仅一次                        MOV DWORD PTR SS:[ESP],EBP

点击软件注册后……
******
004D78E4   .  E8 E4F7FFFF   CALL QQFlash1.004D70CD  *******

00409431  |.  E8 90180000   CALL QQFlash1.0040ACC6     后 0012E580上一行出现变化,显示了注

册码(上次修改的注册码),
同时  0012A3E4   6141A890  UNICODE

"Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\"

00409423  |.  E8 9E180000   CALL QQFlash1.0040ACC6   很多在一起,,并且步进时0012E580附近的

乱码在变化,
00409469  |.  E8 58180000   CALL QQFlash1.0040ACC6  过后,0012E58C出现机器码,

00406C50   .  E8 F22A0000   CALL QQFlash1.00409747   过后,0012E580处乱码包括注册码与机器码

消失,,

*****************先读取能读取到的注册信息,再计算机器码,判断是否注册了?  (CALL

QQFlash1.0040ACC6 计算机器码?)

004D78E4   .  E8 E4F7FFFF   CALL QQFlash1.004D70CD   后,出现了变化(没注意)    此时

0012E7F7 处出现了 原始的 0010E580处的乱码及注册码机器码(之前的修改没什么用)
******************************重新计算注册码与机器码?

按了几次F8后,,user.dat文件终于可以看了,,看到的是正常用正确注册码注册后生成的文件。。

00421359  |> \56      PUSH ESI  ; /Text = "19LZCEIPTIMWAZCPTADEHVY"

F9  ……
注册窗口出来了…………

0041723E  |.  E8 99A00000  CALL QQFlash1.004212DC  ;\QQFlash1.004212DC

到00405A2C   .  E8 C6170100   CALL QQFlash1.004171F7; \QQFlash1.004171F7 时  寄存器窗口的两

行修改的机器码消失,,,,这步后,,0012F060出现了输入的注册码,,,
00417231  |.  E8 EB0DFFFF   CALL QQFlash1.00408021  后,寄存器窗口出现了两行输入的注册码

004D78E4   .  E8 E4F7FFFF   CALL QQFlash1.004D70CD   之后,0012E6E4 处出现了 原始的

0010E580处的乱码及注册码机器码

(有按F9)

0041B717  |.  FF15 C0824400 CALL DWORD PTR DS:[<&KERNEL32.WriteFile>>; \WriteFile

程序异常  终止……

关闭后,,user.dat文件正常,,其中所保存的注册码是修改了的注册码。。(注意:在上面过程中,,遇到原始的机器码或注册码就改掉了,,改法:机器码的前三位换为QQAlbum 2.3 的机器码的前三位,,正确注册码的前三位换为三个0,,)

004D78E4   .  E8 E4F7FFFF   CALL QQFlash1.004D70CD 很重要,,

*****************************************************************

只在004D70CD处设置断点,,一路F9,,……,,然后注册码就出现了……
(备注(第二天):先要利用内存及相关函数(GetWindowText与Messagebox)断点在点下注册后用F8到达这些数据区域  (有些忘了,,不敢确信))
}}}

+++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++

又花了一个晚上来看这个软件,,,今天对51Album1.0.exe在寻找注册码的过程中无意地又爆破了它,又回来在看看这个QQFlash.exe1.3(本来就准备放弃了的),结果到现在没结果,,,

但QQFlash1.3有些不同。。。

1,,前面说的通过修改内存中的值使其报为注册成功,,今天想想,,,是一个很好的爆破思路,,但是今天怎么也出现不了那种情况了,,

应该是断点的设置问题,,记得昨天晚上对于文件方面的函数也下了断点,现在没时间试了,

2,,这里把现在用的断点列出来 (当然还有内存断点)

地址        模块        激活        反汇编        注释
00405A1D QQFlash1 始终        CALL QQFlash1.004171F7
0040FC65 QQFlash1 已禁止        JE SHORT QQFlash1.0040FC95
0040FCD8 QQFlash1 始终        CALL DWORD PTR DS:[<&USER32.MessageBoxA>]
004121D5 QQFlash1 始终        CALL DWORD PTR DS:[<&USER32.GetWindowTextA>]
00415EC4 QQFlash1 始终        CALL DWORD PTR DS:[<&USER32.GetWindowTextA>]
00417226 QQFlash1 始终        CALL DWORD PTR DS:[<&USER32.GetWindowTextA>]
0042133D QQFlash1 始终        CALL DWORD PTR DS:[<&USER32.GetWindowTextA>]
004D78E4 QQFlash1 始终        CALL QQFlash1.004D70CD
(注意由004D78E4跳转到004D70CD   $ /E9 E8110000   JMP QQFlash1.004D82BA    应该是关键的地方,,跳来跳去的。。


在输入注册码并点确定后,F9几次,,到了0040FCD8  |.  FF15 C4844400 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>  处,,F7步入,,

右下角的窗口会出现注册成功或失败的字样,,因此判断正误的在此之前,,。现在又想到,上面提的改内存使其出现注册成功字样是一条非

常好的线索。。。或者找两台电脑,,或者装虚拟机,,看看正确的注册码和错误的注册码到底是在哪里出现了不同。。

下面的今天调试时随手记的东西,,

************************************
再回来看 QQFlash1.3   
004DB000   .^\E9 DAC8FFFF   JMP QQFlash1.004D78DF(改掉此处运行后还是会注册失败,,说明判断在此之前,)

004D7A0F   . /E9 F4080000   JMP QQFlash1.004D8308(  )

00417231  |.  E8 EB0DFFFF   CALL QQFlash1.00408021

00405A2C .  E8 C6170100   CALL QQFlash1.004171F7 ; \QQFlash1.004171F7

0040FDC2  |. /74 07         JE SHORT QQFlash1.0040FDCB (nop掉此处,还是注册失败)

004199D5  |.  E8 BC62FFFF   CALL QQFlash1.0040FC96 (到此处时 跳到注册失败部分?)

004094A7  |.  E8 0481FFFF   CALL QQFlash1.004015B0(相邻的这个调用很多,,在检验注册码?)
0040954F  |. /7E 1A         JLE SHORT QQFlash1.0040956B(nop后出错)

00401B58  |. /75 0A         JNZ SHORT QQFlash1.00401B64 (注意了一下,好像没什么)

************************************

附:
**************************************************
———————————————————————————————————
破解51Album1.0.exe过程(可以独立成文的……)

OD载入,,运行,点软件注册,,
对函数MessageboxA ,,GetWindowsTextA,,设置断点,并设置内存访问断点,

,软件的注册码处输入任意字符(1234567890),点注册,,,
OD界面一二十下F8,,当寄存器窗口ECX处出现一行应该是注册码的字符串时,

,注意到代码窗口处停在00406E7E   /0F85 D5000000 JNZ  51Album1.00406F59
****************************,,
无意地将JNZ 改为JE,,再F8,,就跳到了注册成功界面……看来00406E7E处就

是关键跳,,改了先保存了再试,,,让软件判断注册码正误,,果然是“注册

成功”,,再去看看产生的user.dat文件,,,竟然机器码和真实的注册码都在

里面,,,将user.dat文件删去,,再运行修改的后保存的文件,,点软件注册

,,再直接点注册,注册成功出来了。。。

———————————————————————————————————
****************************************************

++++++++++++++++++++++++++++++++++++

第三天再继续,,

早上起来,,删去了QQFlash.exe的相关的其他文件,,就OD一步步地F8,,记录如下

记录一下用的断点【【断点表 1】】
0042B813  |. /75 0A         JNZ SHORT QQFlash1.0042B81F

00406A44  |.  FF15 BC824400 CALL DWORD PTR DS:[<&KERNEL32.CreateFileA>]       ; \CreateFileA

004019AD   .  FF15 F4824400 CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>]      ; \LoadLibraryA

00401A02   .  8D85 E8FBFFFF LEA EAX,DWORD PTR SS:[EBP-418] (应该步入?)

00401A20   .  E8 A7530100   CALL QQFlash1.00416DCC (启动程序)

(此时点击软件注册?)

00421359  |> \56            PUSH ESI                                          ; /Text = "11DZCEIPTIMWAZCPTADEHVY"
ESI=00B4BE28, (ASCII "11DZCEIPTIMWAZCPTADEHVY")     (由00421332跳至)
跳转来自 00421332, 00421345

0042EAF0   $  8B5424 0C     MOV EDX,DWORD PTR SS:[ESP+C]
本地调用来自 004025A8, 004025E1, 0040EADE, 004112DB, 00412AE9, 00413A39, 004156C3, 0041672E, 00417BD9, 00418171, 0041A80A, 0041BA67, 0041E8D3, 0041E8F1, 0041E980, 0041F7AC, 0041FD51, 00420116, 00420146, 004201C5, 00420256, 00420E8E, 0042105F, M)

分析了很长很长时间后,将11D修改为19L堆栈窗口出现0012E804  |00B4BE28  ASCII "19LZCEIPTIMWAZCPTADEHVY"   

F8 ,,
00405A2C 后,回到00421332,,F8(这次未跳转至00421359)

00421343  |.  3BC7          CMP EAX,EDI 后堆栈窗口0012F804处修改后的机器码消失。(几步后又发现了)
{
发现
0012B064   00A40062  UNICODE " !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
}
00421345  处未跳转,,00421357处跳转(不确定)

0042136F  \.  C2 0800       RETN 8后来到00417243处
00417246  \.  C2 0C00       RETN 0C后来到00405A31处
00405A3B   .  E8 17170100  CALL QQFlash1.00417157 ;\QQFlash1.00417157
00416A11   . /74 28         JE SHORT QQFlash1.00416A3B 未跳转
00416A19   . /74 20         JE SHORT QQFlash1.00416A3B 跳转
0041328B  |. /74 05         JE SHORT QQFlash1.00413292 未跳转
0040F59F  |. /75 16         JNZ SHORT QQFlash1.0040F5B7跳转
00411814   . /75 38         JNZ SHORT QQFlash1.0041184E未跳转
00412EBD  |. /75 2E         JNZ SHORT QQFlash1.00412EED未跳转
00412EC7  |. /75 24         JNZ SHORT QQFlash1.00412EED未跳转
00412ED9  |. /0F84 C0000000 JE QQFlash1.00412F9F跳转
0040F59F  |. /75 16         JNZ SHORT QQFlash1.0040F5B7未跳转
00411814   . /75 38         JNZ SHORT QQFlash1.0041184E跳转
00411898  |. /EB 10         JMP SHORT QQFlash1.004118AA跳转
00416D3B   . /EB 24         JMP SHORT QQFlash1.00416D61跳转
00416D87   . /75 0A         JNZ SHORT QQFlash1.00416D93跳转
00416D9B   . /75 09         JNZ SHORT QQFlash1.00416DA6跳转
00416DA9   . /74 12         JE SHORT QQFlash1.00416DBD跳转

几步后
输入注册码的窗口出来,,

输入000……(将正确的注册码前三位改为000)

……

0040FCC3  |. /75 04         JNZ SHORT QQFlash1.0040FCC9 跳到
0040FCD8  |.  FF15 C4844400 CALL DWORD PTR DS:[<&USER32.MessageBoxA>]         ; \MessageBoxA
(堆栈窗口已出现注册失败字样了……)

结果也是失败……

··················

修改的没起作用

就向上找给ESI赋值的源头

00411BF2  |.  8BF0          MOV ESI,EAX
00411BFD  |. /75 02         JNZ SHORT QQFlash1.00411C01
00411BFF  |. |8906          MOV DWORD PTR DS:[ESI],EAX;USER32.77D3E5BB

004171C1  |.  8B76 04       MOV ESI,DWORD PTR DS:[ESI+4]                      ; |

没找到,,其实在这一步00421323  |.  E8 C8D70000   CALL QQFlash1.0042EAF0  机器码已出现,,

就现在的断点【【断点表2】】,,

10次F9,,到004121D5  |.  FF15 74844400 CALL DWORD PTR DS:[<&USER32.GetWindowTextA>]      ; \GetWindowTextA


00421306  |.  FF15 00834400 CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>]          ; \lstrlenA
已出现机器码

到00421305  |.  56            PUSH ESI                                          ; /String = "11DZCEIPTIMWAZCPTADEHVY"已出现机器码

已经确定
004212F6      8B75 0C       MOV ESI,DWORD PTR SS:[EBP+C]
004212F9  |.  57            PUSH EDI     ;  //ESI中首次出现机器码

放弃
··················

00411C05  \.  C2 0400       RETN 4   怎么返回的?

输入正确的注册码:
004D842B   .  8B1485 147A4D>MOV EDX,DWORD PTR DS:[EAX*4+4D7A14]

004D8443   .  E8 33010000   CALL QQFlash1.004D857B
往复循环

(重新调试?)
004D827D   > \60                PUSHAD

0041BFAE  |. /75 0D             JNZ SHORT QQFlash1.0041BFBD 跳转

0041C047  |. /75 0E             JNZ SHORT QQFlash1.0041C057 跳转

0041B6E3  |. /75 0F             JNZ SHORT QQFlash1.0041B6F4 跳转

0041D034  |. /75 22             JNZ SHORT QQFlash1.0041D058 跳转

0040AD04  |. /75 5D             JNZ SHORT QQFlash1.0040AD63 未跳转

00406BF4   . /75 1C             JNZ SHORT QQFlash1.00406C12 未跳转

0040AD51  |.  8D45 04           LEA EAX,DWORD PTR SS:[EBP+4]
出现EAX=0012EF20, (ASCII "11DZCEIPTIMWAZCPTADEHVYtmp\user.dat")
堆栈 SS:[0012EF1C]=00B48310, (ASCII "0,r$N0X_O~4x_oB2&c\^&tRFV59UC#U(P%8)/!Xg?k!er#t-zPh1c9`kg1iLoG[)B[9C/]@s< z+!Kuf[=,G+AB$UqD$d^yGJo*ke#U c`<6ZM6(`;FK^N,TGfQ,D!k9B""L:a[;CzRyqAjElpV\~d3$ujbHOW3vioZ,q}`q>J?L)"b"Tca(9^M/6(gl/.kV(&K1l3;mB|OU(4$17!!A.'NIk7SEAX=0012EF20, (ASCII "11DZCEIPTIMWAZCPTADEHVYtmp\user.dat")

00406C0E   .  1BFF              SBB EDI,EDI

寄存器窗口出现注册码

004D8443   .  E8 33010000       CALL QQFlash1.004D857B  启动程序
(与未注册时由
00401A20   .  E8 A7530100   CALL QQFlash1.00416DCC 启动程序  对比)

放弃,,,

·····························

***************************************************
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
从早上八点多已经到下午靠近5点了,,正准备做最后的一次尝试,,
输入正确注册码,,注册后,,调试运行,,软件在启动时会检验是否注册,,根据之前一些印象,注册后的启动好像比注册前的启动跳的要多些,,就留意了一下,,
只对Readfile ,Writefile ,CreateFileA 的函数下断点(好像对后来发现的00406B76处也下过断点),,
整理的具体步骤:
【5下F9,,到了user.dat相关的地方了(对3个文件进行操作,,user.dat是最后一个),,F9(要是00406B76下了断点,就会需要按两次F9),,到了ReadFile这里停下了,,F8(或者事先在00406BF4下断点,直接F9),在00406BF4停下,,此时寄存器窗口的ECX显示了机器码,。】

看到了这个点,
00406BF4   . /75 1C             JNZ SHORT QQFlash1.00406C12
好像离跳转比较近,,注册码正确时,这里是跳转的,现在不让他跳转,,软件面板上没了软件注册的字样,,本想改好了试试下载是否是跟正式版一样的,,结果直接运行出错,,用没改过的也一样,,,原来软件本身就有问题??
可怜了我花的这么长时间啊,,,,之前还真没试过好不好用,,哎。。
[/CODE][COLOR="Red"]
!!!!!!!!!!!!!!!!此小部分完全错误!!!!!!!!!!!!!!!!!![/COLOR][CODE]


存在正确的注册文件时,,程序才会经过00406BF4这个跳转,,也就是说,,要是按照上面的改了之后,,即使是正确的注册文件启动时也会被认为是没有注册!!!!!!!
完全的颠倒了,,不过留在这里,算是一个学习的过程吧,,可能是时间长了大脑错乱了……
*****************************************************

【断点表1:】

地址        模块        激活        反汇编        注释
00401A25 QQFlash1 仅一次        CALL DWORD PTR DS:[<&ole32.CoUninitialize>]
004064F0 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.DeleteFileA>]
00406A44 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.CreateFileA>]
00408BF1 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.DeleteFileA>]
00408F8F QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.DeleteFileA>]
0040FCD8 QQFlash1 始终        CALL DWORD PTR DS:[<&USER32.MessageBoxA>]
004121D5 QQFlash1 始终        CALL DWORD PTR DS:[<&USER32.GetWindowTextA>]
00415EC4 QQFlash1 始终        CALL DWORD PTR DS:[<&USER32.GetWindowTextA>]
00417226 QQFlash1 始终        CALL DWORD PTR DS:[<&USER32.GetWindowTextA>]
0041B6DB QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.ReadFile>]
0041B7EE QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.FlushFileBuffers>]
0041B8B0 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.GetFileSize>]
0041BD36 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.FindFirstFileA>]
0041BD42 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.FindClose>]
0041BFA5 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.CreateFileA>]
0041EFB7 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.FindClose>]
0041F075 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.FindNextFileA>]
0041F2C6 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.FindFirstFileA>]
0041FC3B QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.FindFirstFileA>]
0041FC50 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.FindClose>]
0041FD9D QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.GetFileSize>]
00421332 QQFlash1 始终        JA SHORT QQFlash1.00421359        //跳转后机器码出现
0042133D QQFlash1 始终        CALL DWORD PTR DS:[<&USER32.GetWindowTextA>]
00421359 QQFlash1 始终        PUSH ESI
0042B809 QQFlash1 始终        CALL DWORD PTR DS:[<&SHLWAPI.PathFindFileNameA>]
00433A16 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.GetFileType>]
00439F8A QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.ReadFile>]
0043A042 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.ReadFile>]
0043A26E QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.ReadFile>]
0043AE1A QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.GetFileType>]
0043AEB6 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.GetFileType>]
0043EE33 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.FlushFileBuffers>]
004431E4 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.CreateFileA>]
00444575 QQFlash1 仅一次        TEST EAX,EAX
004D9B9F QQFlash1 仅一次        PUSH 2C9A5C22
77D2BD44 USER32        仅一次        LEAVE
77D2BE4B USER32        仅一次        LEAVE

【断点表2:】

地址        模块        激活        反汇编        注释
00401A25 QQFlash1 仅一次        CALL DWORD PTR DS:[<&ole32.CoUninitialize>]
004064F0 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.DeleteFileA>]
00406A44 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.CreateFileA>]
00408BF1 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.DeleteFileA>]
00408F8F QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.DeleteFileA>]
0040FCD8 QQFlash1 始终        CALL DWORD PTR DS:[<&USER32.MessageBoxA>]
00411BF2 QQFlash1 始终        MOV ESI,EAX
004121D5 QQFlash1 始终        CALL DWORD PTR DS:[<&USER32.GetWindowTextA>]
00415EC4 QQFlash1 始终        CALL DWORD PTR DS:[<&USER32.GetWindowTextA>]
00417226 QQFlash1 始终        CALL DWORD PTR DS:[<&USER32.GetWindowTextA>]
0041B6DB QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.ReadFile>]
0041B7EE QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.FlushFileBuffers>]
0041B8B0 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.GetFileSize>]
0041BD36 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.FindFirstFileA>]
0041BD42 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.FindClose>]
0041BFA5 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.CreateFileA>]
0041EFB7 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.FindClose>]
0041F075 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.FindNextFileA>]
0041F2C6 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.FindFirstFileA>]
0041FC3B QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.FindFirstFileA>]
0041FC50 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.FindClose>]
0041FD9D QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.GetFileSize>]
00421323 QQFlash1 始终        CALL QQFlash1.0042EAF0
00421332 QQFlash1 始终        JA SHORT QQFlash1.00421359        //跳转后机器码出现
0042133D QQFlash1 始终        CALL DWORD PTR DS:[<&USER32.GetWindowTextA>]
00421359 QQFlash1 始终        PUSH ESI
0042B809 QQFlash1 始终        CALL DWORD PTR DS:[<&SHLWAPI.PathFindFileNameA>]
00433A16 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.GetFileType>]
00439F8A QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.ReadFile>]
0043A042 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.ReadFile>]
0043A26E QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.ReadFile>]
0043AE1A QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.GetFileType>]
0043AEB6 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.GetFileType>]
0043EE33 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.FlushFileBuffers>]
004431E4 QQFlash1 始终        CALL DWORD PTR DS:[<&KERNEL32.CreateFileA>]
00444575 QQFlash1 仅一次        TEST EAX,EAX
004D78E9 QQFlash1 仅一次        MOV EDX,DWORD PTR SS:[EBP+4]
004D8448 QQFlash1 仅一次        BT AX,SP
004D9B9F QQFlash1 仅一次        PUSH 2C9A5C22
77D28EFC USER32        仅一次        LEAVE
77D2BD44 USER32        仅一次        LEAVE
77D2BE4B USER32        仅一次        LEAVE

++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++
+++++++++
找到了这个软件的注册码后,其实是想利用这个软件计算出其他的机器码对应的注册码,这个系列的软件的机器码的前三个字符只与软件版本相关,,(08Q ,,09B,,10C,,11D,,……),,后面十七个是与电脑相关,且这系列的软件的这十七位是一样的,,于是,,我就想用这些软件,通过修改内存数据,使其显示出相应的注册码,,但这个是失败了,,在这个软件上花的时间不少了,,几十个小时,,换成认真看基础的东西也有很大收获了,,不能再在这上面花费时间,,基础薄弱造成走了弯路,浪费了时间。。。当然,,以后还是要继续研究滴~~~
大概地记一下对这系列软件的了解(可能有误,问作者是最好的办法~~)
:启动时产生skin.dat和skin.dll,并检查是否有user.dat(该系列软件的注册文件)文件,有的话验证其是否为正确的注册文件,,验证时会读取其中的内容,,重点是机器与注册码,,然后决定启动软件后是否有软件注册选项(可能也会有功能的不同,这个要是有时间的话通过这系列软件的其他软件验证),,点击软件注册及输入注册码时的反应上可以参考开头的一小部分,,可能记录是有误的,,。。

据自己在网上找这系列的软件的新旧版本来看:
较早的:下载回来后卡巴斯基报毒,,应该是其实用UPX加壳造成的,,中间的没加壳,,也就是现在研究的,,最新的版本加了壳,,而且保护措施很多,,上面 davg 说是查出壳是vmp,,软件检测到有调试软件运行时,,会拒绝运行,;载入OD调试,忽略错误时,,会跳出检测到了调试软件的警告,;用OD的插件试着脱壳,,运行后提示文件损坏或者病毒感染,,看来保护挺严密的。。下面的版本不知会怎么样。。。

········································································

吃完晚饭再回来看了先前关注的另一个软件QQAlbum1.2,将注册文件中的机器码改了之后,,程序报错,点击软件注册也是先报错,再出来注册框,而且没有显示机器码,,,调试中也会出错,,不弄这两个软件了……

这系列软件的相关网址:http://hi.baidu.com/softsing

##############################################################

(等这些东西乱到一种数量了再整理……)


没较全地掌握基本知识之前研究软件真有些困难~~

#############################################################

把之前的破解的记录文件放这上面,,乱七八糟的,不知道过些时间自己是否还认识……路过的就不要下了,,没多少价值,,特别是还要花 kx 的。。
[ATTACH]46936[/ATTACH]
上传的附件:
2010-8-10 18:02
0
雪    币: 478
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
我过来学习的。
2010-8-10 22:01
0
雪    币: 915
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
学习了下。
还是GetWindowTextA
好用些。
2010-8-10 23:46
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
那对于2.5版本的该如何破解呢?
2010-9-14 11:20
0
雪    币: 163
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
同问~好像有很悍的壳!od看不了什么东西
2010-9-14 12:25
0
游客
登录 | 注册 方可回帖
返回
//