文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页精文荟萃破解文章 → 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破解如何给软件脱壳基础教程