这个软件与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]