-
您的位置:首页 → 精文荟萃 → 破解文章 → Screen Taker V2.31
Screen Taker V2.31
时间:2004/10/15 1:01:00来源:本站整理作者:蓝点我要评论(0)
-
简介:一个相当不错的屏幕捕捉软件,可惜哥们没有使用过。
追踪:first name:dahuilang
second name:jhw
RN:0000-12345678
这个软件是我向大家介绍的第一篇文章,所以自己也非常高兴,希望通过它能给你们的解密有一个帮助。
现在开始介绍如何破解这个软件,这个软件的注册码运算过程是一个相当复杂的过程,说它复杂是因为它经过了一次XOR和一次OR操作后,算出一个数值来,再使用这个数值进行比较,如果满足条件的话,才能注册成功。现在就向下来看如何破解它。
:00446485 8B049D2CB44400 mov eax, dword ptr [4*ebx+0044B42C] <-xw33
:0044648C 8B55FC mov edx, dword ptr [ebp-04] <-0000
:0044648F E8D4D6FBFF call 00403B68
:00446494 75E9 jne 0044647F
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00446483(C)
|
:00446496 83FB02 cmp ebx, 00000002
:00446499 7E04 jle 0044649F
:0044649B 33DB xor ebx, ebx
:0044649D EB73 jmp 00446512
在这里程序是比较注册码的前四位,这前四位是明码,并且它有两个,我们可以任意等于其中的一个,这里我就使用xw33,现在还要说一句,以后的程序将使用这个值来进行运算,就是前面所说的XOR运算,这要等到以后再说了。
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00446499(C)
|
:0044649F 33C0 xor eax, eax
:004464A1 55 push ebp
:004464A2 68CF644400 push 004464CF
:004464A7 64FF30 push dword ptr fs:[eax]
:004464AA 648920 mov dword ptr fs:[eax], esp
:004464AD 8D4DF4 lea ecx, dword ptr [ebp-0C]
:004464B0 8B55F8 mov edx, dword ptr [ebp-08]
:004464B3 8B45FC mov eax, dword ptr [ebp-04]
:004464B6 E849FAFFFF call 00445F04
:004464BB 8B45F4 mov eax, dword ptr [ebp-0C]
:004464BE E86108FCFF call 00406D24 <-出错,进入
:004464C3 8BD8 mov ebx, eax
:004464C5 33C0 xor eax, eax
:004464C7 5A pop edx
:004464C8 59 pop ecx
:004464C9 59 pop ecx
:004464CA 648910 mov dword ptr fs:[eax], edx
:004464CD EB13 jmp 004464E2
:004464CF E9B0CBFBFF jmp 00403084
:004464D4 33DB xor ebx, ebx
:004464D6 E84DCEFBFF call 00403328
:004464DB EB35 jmp 00446512
:004464DD E846CEFBFF call 00403328
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004464CD(U)
|
:004464E2 8BC3 mov eax, ebx
:004464E4 B943000000 mov ecx, 00000043
:004464E9 99 cdq
:004464EA F7F9 idiv ecx
:004464EC 8BC8 mov ecx, eax
:004464EE 83F901 cmp ecx, 00000001
:004464F1 7C08 jl 004464FB
:004464F3 81F9E8030000 cmp ecx, 000003E8
:004464F9 7E04 jle 004464FF
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004464F1(C)
|
:004464FB 33DB xor ebx, ebx
:004464FD EB13 jmp 00446512
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004464F9(C)
|
:004464FF 8BC3 mov eax, ebx
:00446501 B943000000 mov ecx, 00000043
:00446506 99 cdq
:00446507 F7F9 idiv ecx
:00446509 4A dec edx
:0044650A 7404 je 00446510
:0044650C 33DB xor ebx, ebx
:0044650E EB02 jmp 00446512
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044650A(C)
|
:00446510 B301 mov bl, 01 ***
从0044649F到00446510这里是这个程序主要的比较过程,其中这里有我在上面标记的地方出错,我因为已经将这个软件破解出来了,所以现在来讲解时,当然可以从系统的方面来介绍它。那个出错的地方我们以后一定要进入,但是现在是先介绍它如何能注册成功。这个对以后的运算目的是很重要的。在***处大家看到了吧,这里将使bl=1,而出错时是将bl=0,这就说明这个程序如果要注册成功一定要让程序走到这个位置,那么我们必需回避那里才能使用程序走到这里,我们在前比较明码的地方就已经知道了一个地方,就是下面的地方。
:0044649B 33DB xor ebx, ebx
:0044649D EB73 jmp 00446512
这里将bl=0,并且将跳到00446512,现在我想对那些初学者说一个小经验,就是象上面那里可以跳到出错的地方,记住这个出错的地方的地址,只要以后能跳到这个地址的地方,都是我们要避开的地方。现在大家向上看,那里有可以跳到出错的地方。
上面共有两个地方可以跳到出错的地方,那么我们就一定要回避这两个地方。现在就分析一下如何回避它们。首先来看第一个地方,在那里我们将有什么样的结论呢?程序在那里使用的eax/43(H)后,得到的余数一定要大于0小于3E8(H),这样它才能不跳到出错的地方,不知道你们是否看明白没有,如果没有可就不能怪我,你们就要学习学习汇编语言了。对于我们已经知道的第一个可以避开出错的地方,那么有人会问那个eax从何而来的,这个大家先不要去管它,我们先弄明白如何能避开出错的地方,到以后就是水到渠成了。现在我们再研究一下第二个出错的地方。在这里它还是使用eax/43后得到余数edx,将edx-1应当等于0,这样它才能跳到使bl=1的地方,这个也就是说eax/43后得到的余数一定要为1,这样才满足程序的要求。好了现在所有的出错的地方我们都已经研究过了,我们现在的任务就是要如何解决掉那个出错的call。现在就进入那个出错的call中,开始对它进行攻击。
如下:
:00406D41 8D55FC lea edx, dword ptr [ebp-04]
:00406D44 8BC3 mov eax, ebx
:00406D46 E80DBDFFFF call 00402A58 ***
:00406D4B 8BF0 mov esi, eax
:00406D4D 837DFC00 cmp dword ptr [ebp-04], 00000000
:00406D51 7423 je 00406D76
:00406D53 8D55F8 lea edx, dword ptr [ebp-08]
:00406D56 B85C674000 mov eax, 0040675C
:00406D5B E878DAFFFF call 004047D8
:00406D60 8B45F8 mov eax, dword ptr [ebp-08]
***处是一个关键地方,所以我们还要进入call中。
:00402A88 80EB30 sub bl, 30
:00402A8B 80FB09 cmp bl, 09
:00402A8E 772A ja 00402ABA
:00402A90 39F8 cmp eax, edi
:00402A92 7726 ja 00402ABA
:00402A94 8D0480 lea eax, dword ptr [eax+4*eax]
:00402A97 01C0 add eax, eax
:00402A99 01D8 add eax, ebx
:00402A9B 8A1E mov bl, byte ptr [esi]
:00402A9D 46 inc esi
:00402A9E 84DB test bl, bl
:00402AA0 75E6 jne 00402A88
:00402AA2 FECD dec ch
:00402AA4 7410 je 00402AB6
:00402AA6 85C0 test eax, eax
:00402AA8 7C10 jl 00402ABA
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00402AB8(C), :00402AFD(U)
|
:00402AAA 59 pop ecx
:00402AAB 31F6 xor esi, esi
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00402ABD(U)
|
:00402AAD 8932 mov dword ptr [edx], esi
:00402AAF 5F pop edi
:00402AB0 5E pop esi
:00402AB1 5B pop ebx
:00402AB2 C3 ret
我们进入call后将来到这里,上面的地方大家发现没有其实它就是运算我们前面所研究的那个eax,在这里我们可以看到那个bl一定要有一定的要求。bl的值一定要在30(H)到39(H)之间,也就是数字,而上面的过程就是将字符数字转化为运算的数字。也就是说字符串12345使用上面的过程就可以将字符串转化为数字12345,这个有什么不同的?我想这个就不用我再说了吧。再说一下,那个转化的数字是10进位的。
现在我们就可以知道了它的过程了。那么我们研究的关键是如何得到那个bl值,对了,这个软件的注册关键就在这里。我们将如何得到那个经过运算过的bl值。
现在就应当展开搜捕了,捕捉到那个bl值了。经过我的追踪发现在主程序中call 00445F04这里将是第一次的运算bl过程。我们就进入call中看一看它将如何计算。
如下:
:00445F6B BE01000000 mov esi, 00000001
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00445FAE(C)
|
:00445F70 8BC6 mov eax, esi
:00445F72 03C0 add eax, eax
:00445F74 8B55F8 mov edx, dword ptr [ebp-08]
:00445F77 8A4402FE mov al, byte ptr [edx+eax-02] 奇数位上的值
:00445F7B E870FFFFFF call 00445EF0
:00445F80 8BD8 mov ebx, eax
:00445F82 C1E302 shl ebx, 02
:00445F85 8BC6 mov eax, esi
:00445F87 03C0 add eax, eax
:00445F89 8B55F8 mov edx, dword ptr [ebp-08]
:00445F8C 8A4402FF mov al, byte ptr [edx+eax-01] 相邻偶数上的值
:00445F90 E85BFFFFFF call 00445EF0
:00445F95 0AD8 or bl, al
:00445F97 8D45E0 lea eax, dword ptr [ebp-20]
:00445F9A 8BD3 mov edx, ebx
:00445F9C E8DFD9FBFF call 00403980
:00445FA1 8B55E0 mov edx, dword ptr [ebp-20]
:00445FA4 8D45E8 lea eax, dword ptr [ebp-18]
:00445FA7 E8B4DAFBFF call 00403A60
:00445FAC 46 inc esi
:00445FAD 4F dec edi
:00445FAE 75C0 jne 00445F70
上面就开始使用我们输入的后面10位值了。程序首先使用奇数位上的值如第1位1,将它带入call 00445EF0中,算出一个值来,再将它*4后,得到bl值,然后再使用相邻的偶数位上的值(这里偶数位上的值是指奇数位后面的偶数),这里就将使用2来计算,将2带入同样的call中,运算出第二个值来al,将bl OR al就可以得到一个运算的值,但是这个运算的值还不是我们上面的bl值,在下面我们还要有一次运算。现在我们就来说一下那个call是如何运算值的。这个就要参考我在下面提供的附表1了,call 00445EF0的计算实际上就是将我们输入的字符找出在附表1中的位置值,如我输入的2,它在附表中的值就为36,那么它在出这个call后的al=36,现在你们就应当明白它是如何计算我们输入的值了。现在我们还不能做什么,因为在下面还有一个地方等着我们去分析它。
如下:
:00445FBF BE01000000 mov esi, 00000001
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00445FF1(C)
|
:00445FC4 8B45E8 mov eax, dword ptr [ebp-18]
:00445FC7 8A5C30FF mov bl, byte ptr [eax+esi-01] 前面得到的bl值
:00445FCB 8BC6 mov eax, esi
:00445FCD 99 cdq
:00445FCE F77DEC idiv [ebp-14]
:00445FD1 8B45FC mov eax, dword ptr [ebp-04]
:00445FD4 8A4410FF mov al, byte ptr [eax+edx-01] <-78 77 33 00 78:00445FD8 32D8 xor bl, al
:00445FDA 8D45E0 lea eax, dword ptr [ebp-20]
:00445FDD 8BD3 mov edx, ebx
:00445FDF E89CD9FBFF call 00403980
:00445FE4 8B55E0 mov edx, dword ptr [ebp-20]
:00445FE7 8D45E4 lea eax, dword ptr [ebp-1C]
:00445FEA E871DAFBFF call 00403A60
:00445FEF 46 inc esi
:00445FF0 4F dec edi
:00445FF1 75D1 jne 00445FC4
上面就是程序第二个计算的地方,当在这里计算完后的值就是我们在将字符串转为数字的值了。上面是如何计算的呢?上面我已经标明的所需要的条件了。它实际上就是使用我们在前面第一次得到的bl值(共5个值)再同下面的那5个值进行XOR操作,得到的bl值将是我们想要得到的值。
我们到此已经明白了这个软件的整个注册过程了,现在就是如何通过计算得到注册码了问题了。那么我们将怎样计算得到注册码呢?我们在前面得到的可以避开出错地方的条件在这里就得到了应用了。程序要求我们计算后的值除以43(H)后应当得到余数1,那么满足这个条件的数值将有什么呢?这里我使用了最简单的一个值因为43(H)=67(D),那么只要计算得到68就满足条件了。现在我们有了一个明确的值了,再进行前面的XOR操作就简单多了。
我们完成XOR后,应当得到0 0 0 6 8这5个值,这样就能注册成功了。我们就使用反推法来计算第一个值,
bl XOR 78 =30
通过计算这个bl值应当等于48,而这个48的值是通过第1位的位置值*4再同第2位的位置值进行或操作得到的。现在就再来讨论如何得到这两个值,因为a OR b =48,这里因为使用了OR操作,经我查OR表发现只有当0 OR 4 =4,4 OR 4=4(这里专指4的位),因为a和b都为附表中的位置值,所以没有一个可以在首位上等于4的,所以在这里只有首位为0和1的满足条件(因为bl*4)。现在就设第1位为Q,那么第二位应当等于什么呢?我在这里就不向大家介绍如何计算了,因为这里就比较简单了。满足条件应当为I,这样我们就得到的前两位的注册码了。以下同上面一样,就可以得到这个软件的注册码了。
好了,我这节课也应当结束了,也不知道大家都听懂没有,如果没有听懂可以给我写信,。再见!!!
附表1:
序号:0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15
字母:A B C D E F G H I J K L M N O P Q R S T U V
序号:16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C
字母:W X Y Z a b c d e f g h i j k l m n o p q r s
序号:2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D
字母: t u v w x y z 0 1 2 3 4 5 6 7 8 9
*********************************
* First name: dahuilang *
* Second name:jhw *
* RN: xw33-QIQHADNyQA *
*********************************
声明:此文可以自由拷贝,散发和传播,如果你认为有错误的地方你可以将改正后发表在网上,但是请不要将原作者的名字删除或改变,你可以加上你修改后作者名字,并希望你能将修改的文章发给本人。如果愿意同我讨论的话,可以向下面的邮箱写信。我将非常高兴同你讨论关于解密方面的事情,谢谢。(千万不要给我发病毒或黑客程序啊)
邮箱:programhunter@china.com
|
相关阅读
Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
-
热门文章
去除winrar注册框方法
最新文章
比特币病毒怎么破解 比去除winrar注册框方法
华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据
人气排行
华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程
查看所有0条评论>>