新手破解进阶教程之EXESCOPE之第一篇!




高手略,菜菜菜菜鸟(即只会爆破的)进,中手(?我该怎么叫?)指点一下:)



作者:NONAME SWORDMAN[CPU]


软件:EXESCOPE
版本:6.50
口号:大力支持破解小日本的软件!!!!
软件简介:略
NONAME剑人(不要说贱人……~_~……否则,hihihi~~~)第1篇破解文章
使用软件:C32ASM+OLLYDBG(oll老显示不出来中文字符串资源……怒了!还是用C32ASM辅助一下查查地址吧……)
破解方式:序列号+爆破
目的:1  学习研究   2  练手   3   看不惯小日本
PS:不知道有没有人发过,我是断网写,只有一本学院1-6的精华,不知是否是老黄历,不管了,让新手看看吧
(众人:你不也是吗?我倒~我也在看啊~),互相学习一下


大力感谢:小虾(你的6.41版本是我在最无助的情况下看的,原谅我吧,谁叫这个软件老不升级序列号呢:))
          商朝子(教程太好了~不过就是太老了……)


-----------------------我是分割线,只会爆破的,想分析注册码的看---------------------------
呵呵:)其实这还真是我第一次分析序列号的,其实一点也不难,只要去看一点点教程(学院精华5 6的基础知识那里……)
再去看看一些已经破完的注释,差不多就可以连蒙带猜地分析了(必要是看一下先辈们的CREAK笔记……)
------------------------------------------分割线完毕--------------------------------------
步骤:    1  打开C32ASM(其他工具亦可,像W32DASM黄金版之类的,只要别OLL就行,老显示不出来,烦!)
          2  点击“查看字符串”(你不知道?晕,去HELP里看吧)
          3  找到“无效的ID或名字”,单击下拉菜单,单击那个地址,记下来
          4  打开OLLYDBG,打开文件后CTRL+G,输入(应该是004C2B5E吧:)众人:你为什么不早说?我:既然我查了也要让
          你们查!沉默3秒……找扁!你真是“贱人”…………我:HIHIHI~~~你完了,不让你看了)
          5  OK,我们的故事从这里就开始了

首先往上看看,看到004C2A88,注意,用户名+进来了(注意:不知道的地址可以动态看……怎么动态?我~~~~~吐了88个白沫,您还是回去修炼100年吧……)
正题:可以往上来一点,在004C2A83设断点,注意有的该跟……有的您还是……别像我,跟了一大堆API……
别跟点F8,跟的点F7,乱了F9再来,没用就调试--》重新开始
004C2A7D  |.  8B83 F8020000 MOV EAX,DWORD PTR DS:[EBX+2F8]
004C2A83  |.  E8 F4F8FAFF   CALL eXeScope.0047237C                   ;  别跟
004C2A88  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]             ;  用户名加进来(当然是假的喽!)
004C2A8B  |.  A1 E8FE4C00   MOV EAX,DWORD PTR DS:[4CFEE8]
004C2A90  |.  E8 4F1FF4FF   CALL eXeScope.004049E4                   ;  别跟
004C2A95  |.  8D55 F8       LEA EDX,DWORD PTR SS:[EBP-8]
004C2A98  |.  8B83 FC020000 MOV EAX,DWORD PTR DS:[EBX+2FC]
004C2A9E  |.  E8 D9F8FAFF   CALL eXeScope.0047237C                   ;  别跟
004C2AA3  |.  8B55 F8       MOV EDX,DWORD PTR SS:[EBP-8]
004C2AA6  |.  A1 4CFE4C00   MOV EAX,DWORD PTR DS:[4CFE4C]            ;  密码加进来(当然也是假的喽!)
004C2AAB  |.  E8 341FF4FF   CALL eXeScope.004049E4
004C2AB0  |.  8B15 4CFE4C00 MOV EDX,DWORD PTR DS:[4CFE4C]            ;  eXeScope.004D2E58
004C2AB6  |.  8B12          MOV EDX,DWORD PTR DS:[EDX]               ;  EDX的密码……
004C2AB8  |.  A1 54FC4C00   MOV EAX,DWORD PTR DS:[4CFC54]
004C2ABD  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
004C2ABF  |.  E8 B8940000   CALL eXeScope.004CBF7C                   ;  跟,F7,最关键->菜鸟笔记:一般在爆破点上面几行都很关键
004C2AC4  |.  84C0          TEST AL,AL                               ;  同志们,测试!
004C2AC6  |.  0F84 8D000000 JE eXeScope.004C2B59                     ;  传说中的爆破点……不过我们不要爆  
004C2ACC  |.  A1 E8FE4C00   MOV EAX,DWORD PTR DS:[4CFEE8]            ;  以下就是错误/成功信息了.不管.成功了还有写入文件,麻烦!
004C2AD1  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
004C2AD3  |.  E8 7821F4FF   CALL eXeScope.00404C50
004C2AD8  |.  85C0          TEST EAX,EAX
004C2ADA  |.  7E 7D         JLE SHORT eXeScope.004C2B59
004C2ADC  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
004C2ADF  |.  A1 FCFE4C00   MOV EAX,DWORD PTR DS:[4CFEFC]
004C2AE4  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
004C2AE6  |.  E8 11FCFCFF   CALL eXeScope.004926FC
004C2AEB  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]
004C2AEE  |.  8D4D F4       LEA ECX,DWORD PTR SS:[EBP-C]
004C2AF1  |.  BA B82B4C00   MOV EDX,eXeScope.004C2BB8                ;  ASCII ".ini"
004C2AF6  |.  E8 2570F4FF   CALL eXeScope.00409B20
004C2AFB  |.  8B4D F4       MOV ECX,DWORD PTR SS:[EBP-C]
004C2AFE  |.  B2 01         MOV DL,1
004C2B00  |.  A1 2CBE4300   MOV EAX,DWORD PTR DS:[43BE2C]
004C2B05  |.  E8 D293F7FF   CALL eXeScope.0043BEDC
004C2B0A  |.  8BF0          MOV ESI,EAX
004C2B0C  |.  A1 E8FE4C00   MOV EAX,DWORD PTR DS:[4CFEE8]
004C2B11  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
004C2B13  |.  50            PUSH EAX
004C2B14  |.  B9 C82B4C00   MOV ECX,eXeScope.004C2BC8                ;  ASCII "Name"
004C2B19  |.  BA D82B4C00   MOV EDX,eXeScope.004C2BD8                ;  ASCII "Reg"
004C2B1E  |.  8BC6          MOV EAX,ESI
004C2B20  |.  8B38          MOV EDI,DWORD PTR DS:[EAX]
004C2B22  |.  FF57 04       CALL DWORD PTR DS:[EDI+4]
004C2B25  |.  A1 4CFE4C00   MOV EAX,DWORD PTR DS:[4CFE4C]
004C2B2A  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
004C2B2C  |.  50            PUSH EAX
004C2B2D  |.  BA D82B4C00   MOV EDX,eXeScope.004C2BD8                ;  ASCII "Reg"
004C2B32  |.  B9 E42B4C00   MOV ECX,eXeScope.004C2BE4                ;  ASCII "ID"
004C2B37  |.  8BC6          MOV EAX,ESI
004C2B39  |.  8B38          MOV EDI,DWORD PTR DS:[EAX]
004C2B3B  |.  FF57 04       CALL DWORD PTR DS:[EDI+4]
004C2B3E  |.  8BC6          MOV EAX,ESI
004C2B40  |.  E8 9B10F4FF   CALL eXeScope.00403BE0
004C2B45  |.  A1 5CFC4C00   MOV EAX,DWORD PTR DS:[4CFC5C]
004C2B4A  |.  C600 01       MOV BYTE PTR DS:[EAX],1
004C2B4D  |.  C783 4C020000>MOV DWORD PTR DS:[EBX+24C],1
004C2B57  |.  EB 20         JMP SHORT eXeScope.004C2B79
004C2B59  |>  6A 00         PUSH 0
004C2B5B  |.  8D55 EC       LEA EDX,DWORD PTR SS:[EBP-14]
004C2B5E >|.  B8 F02B4C00   MOV EAX,eXeScope.004C2BF0                ;  game over hihihi~~~
004C2B63  |.  E8 680D0000   CALL eXeScope.004C38D0
004C2B68  |.  8B45 EC       MOV EAX,DWORD PTR SS:[EBP-14]            ; |
004C2B6B  |.  66:8B0D 202C4>MOV CX,WORD PTR DS:[4C2C20]              ; |
004C2B72  |.  B2 01         MOV DL,1                                 ; |
004C2B74  |.  E8 2F4BF7FF   CALL eXeScope.004376A8                   ; \eXeScope.004376A8
004C2B79  |>  33C0          XOR EAX,EAX
004C2B7B  |.  5A            POP EDX
004C2B7C  |.  59            POP ECX
004C2B7D  |.  59            POP ECX
004C2B7E  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
004C2B81  |.  68 A82B4C00   PUSH eXeScope.004C2BA8
004C2B86  |>  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
004C2B89  |.  BA 03000000   MOV EDX,3
004C2B8E  |.  E8 211EF4FF   CALL eXeScope.004049B4
004C2B93  |.  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]
004C2B96  |.  BA 02000000   MOV EDX,2
004C2B9B  |.  E8 141EF4FF   CALL eXeScope.004049B4
004C2BA0  \.  C3            RETN



准备好CALL了吗?LET'S  GO!!!!
先说明以下我的计数法:(0A)16=10(10)意思是0A是16进制,在10进制里代表10,“0A.16=10.10”在本文和上解释等值(*OI你别这么写就好,什么?你不知道*OI?NOI知道不?IOI?算了,说了你也不知道,和破解无关但和算法有关的C/PASCAL的考试,可以很负责的告诉你:比较变态!)

004CBF7C  /$  55            PUSH EBP                                 ;   一般来说,刚跟进来的都有初始化,我们还是动跟的好
004CBF7D  |.  8BEC          MOV EBP,ESP                              ;   避免出现一些又进API结果屡乱了的事件发生
004CBF7F  |.  51            PUSH ECX
004CBF80  |.  53            PUSH EBX
004CBF81  |.  8955 FC       MOV DWORD PTR SS:[EBP-4],EDX
004CBF84  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004CBF87  |.  E8 B48EF3FF   CALL eXeScope.00404E40
004CBF8C  |.  33C0          XOR EAX,EAX
004CBF8E  |.  55            PUSH EBP
004CBF8F  |.  68 1BC04C00   PUSH eXeScope.004CC01B
004CBF94  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
004CBF97  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
004CBF9A  |.  33DB          XOR EBX,EBX
004CBF9C  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  EAX:FALSE REGCODE(就是试炼码,下同)
004CBF9F  |.  E8 AC8CF3FF   CALL eXeScope.00404C50                   ;  EAX的位数,至于为什么,自己跟!
004CBFA4  |.  83F8 0A       CMP EAX,0A                               ;  0A(16)=10(10),你的REGCODE不到10位,HIHIHI~~~去见马克思
004CBFA7  |.  75 5C         JNZ SHORT eXeScope.004CC005              ;  去见马克思启程
004CBFA9  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]             ;  取头4个位
004CBFAC  |.  B8 30C04C00   MOV EAX,eXeScope.004CC030                ;  ASCII "A1910"
004CBFB1  |.  E8 DE8FF3FF   CALL eXeScope.00404F94                   ;  比较头4个位是否是A1910
004CBFB6  |.  48            DEC EAX                                  ;  EAX=EAX-1
004CBFB7  |.  74 10         JE SHORT eXeScope.004CBFC9               ;  如果已经是A1910就不再取看是否是A1423了
004CBFB9  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]             ;  取头4个位
004CBFBC  |.  B8 40C04C00   MOV EAX,eXeScope.004CC040                ;  ASCII "A1423"
004CBFC1  |.  E8 CE8FF3FF   CALL eXeScope.00404F94                   ;  比较头4个位是否是A1423
004CBFC6  |.  48            DEC EAX                                  ;  eax=eax-1
004CBFC7  |.  75 3C         JNZ SHORT eXeScope.004CC005              ;  见马克思!
004CBFC9  |>  B8 02000000   MOV EAX,2                                ;  eax=2
004CBFCE  |>  8B55 FC       /MOV EDX,DWORD PTR SS:[EBP-4]            ;  FALSE REGCODE LOAD!
004CBFD1  |.  8A5402 FF     |MOV DL,BYTE PTR DS:[EDX+EAX-1]          ;  把下一为进入到DL内,因为EAX每次都要INC(见4CBFDF),所以.....
004CBFD5  |.  80FA 30       |CMP DL,30                               ;  他的ASC小于30(与下面的相结合,即是否为数字?),跳HIHIHI~~
004CBFD8  |.  72 2B         |JB SHORT eXeScope.004CC005              ;  HIHIHI~~~~
004CBFDA  |.  80FA 39       |CMP DL,39                               ;  他的ASC大于39(与上面的相结合,即是否为数字?)
004CBFDD  |.  77 26         |JA SHORT eXeScope.004CC005              ;  HIHIHI~~~
004CBFDF  |.  40            |INC EAX                                 ;  循环指针+1,去见004CBFD1去
004CBFE0  |.  83F8 0B       |CMP EAX,0B                              ;  11.10,判断循环是否结束,因为汇编和BASIC一样,总是到指针+1才OVER
004CBFE3  |.^ 75 E9         \JNZ SHORT eXeScope.004CBFCE             ;  没结束的话继续循环!
004CBFE5  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  false regcode load!
004CBFE8  |.  0FB640 08     MOVZX EAX,BYTE PTR DS:[EAX+8]            ;  第9位进EAX(笔记:MOVZX是取位……)
004CBFEC  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]             ;  false regcode load!
004CBFEF  |.  0FB652 09     MOVZX EDX,BYTE PTR DS:[EDX+9]            ;  第10位进EDX(笔记:MOVZX是取位……)
004CBFF3  |.  03C2          ADD EAX,EDX                              ;  eax=eax+edx
004CBFF5  |.  B9 0A000000   MOV ECX,0A                               ;  ecx=0A.16=10.10
004CBFFA  |.  33D2          XOR EDX,EDX                              ;  edx=0
004CBFFC  |.  F7F1          DIV ECX                                  ;  eax=eax / ecx,笔记:无符号除法,整进EAX,余进EDX
004CBFFE  |.  83FA 04       CMP EDX,4                                ;  余数为4否?
004CC001  |.  75 02         JNZ SHORT eXeScope.004CC005              ;  不是的话,HIHIHIHIHI~~~`~
004CC003  |.  B3 01         MOV BL,1                                 ;  BL=1,标志注册成功了,其实这里要是能一进CALL就……就好了
004CC005  |>  33C0          XOR EAX,EAX                              ;  eax=0,这句和以下的为“善后”处理
004CC007  |.  5A            POP EDX                                  ;  进
004CC008  |.  59            POP ECX                                  ;  进
004CC009  |.  59            POP ECX                                  ;  进
004CC00A  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
004CC00D  |.  68 22C04C00   PUSH eXeScope.004CC022
004CC012  |>  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
004CC015  |.  E8 7689F3FF   CALL eXeScope.00404990
004CC01A  \.  C3            RETN                                     ;  回去啦~~

看晕了吗?呵呵:)(比我还菜的菜鸟:你还笑?你还敢笑?你去见马克思吧!我:~555我好不容易整理的笔记~)
笑过,来解释一下, 从CALL的004CBF9C到004CBFC7开始,都是去判断头4个是否是 A1423或A1910,不是去见马克思,不过不知道大家
注意没有,这是一个小型的循环(大型?去见见嵌套的吧……)MOV DL,BYTE PTR DS:[EDX+EAX-1] (004CBFD1)的意思是取下一个,类似于VB里的
(VB QB通用)
        FOR I=1 TO 10
         X$=MID$(S$,N-I+1,1)
        NEXT

不会VB?没关系,我再来耐心解释一下,这相当于从1到10的循环,类似于西格马,(你还不知道西格马?就是那个倒着的E?你该去补补数学了),

我们来先假定一个字符串S$,是"NONAME SWORDMAN",长度是N,就是15(帮我看看数错了吗?),好,上面的意思就是

当I=1时  取出来的东东=S$中的第N-I+1个,就是15-1+1个,是“N”(右面的啊)
当I=2时  取出来的东东=S$中的第N-I+1个,就是15-2+1个,是“A”(右面的啊)
依次类推,到最后就是
“NAMDROWS EMANON”,你再反过来读……倒着的!

对!这句话类似于这个道理,只不过是EDX+EAX-1,我的是N+1-I,意思都差不多,动跟一下就明白了


再来看004CBFD5  CMP DL,30这句,CMP是判断的意思(高手请指正,反正差不多,我是那么理解的),只不过具体的要看下一句要跟的是那种跳转(汇编据统计共32个左右的跳转命令……汗~,知道几个就OK了),转到正题来,这句话是判断DL里面是否和30有什么关系,具体什么关系呢?下一句:JB *******,哦,小于去见马克思啊,下面两句依此类推,是大于39见马克思,什么意思?因为WIN中的0123456789的ASC分别是30 31 32 33 34 35 36 37 38 39 意思是:不是数字见马克思 (你好像还没见过哪个CREAK报告这么详细吧?对!就是给和我差不多的新手看的!我都写晕了,差点写成“是不是数字见马克思”……)

继续, INC EAX,EAX加1,说明循环已经进行过一次了,再一句,CMP EAX,0B ,=11就OUT循环,否则继续(至于为什么是11去见我上面的笔记)

该这句了,004CBFE8    MOVZX EAX,BYTE PTR DS:[EAX+8],意思是去取第9位,为什么自己动跟,实践出真知!(我打错了吗?都晕了,11:00了,明天还考试呢)

以后看见movze就立刻要想到取位……

下面,DIV ECX ,这句是无符号除法(见商朝子教程),eax=eax / ecx,整进EAX,余进EDX

差不多了,再说一个吧,什么是XOR EAX,EAX?呵呵,XOR是一个很厉害的东东,一碰上XOR AAA,AAA 那AAA=0,相当于清0

再罗嗦两句,扩展一下知识
AND   是两串数做“与”运算,只有2进制都是1的时候才=1,例如
1110111010101
0001010111011
结果就是
0000010010001
一般来讲都是10进制化成2进制再与运算,下两个同
OR   “或”运算,有一个是1就=1,例如
1111010100001
0001010001010
结果就是
1111010101011
最后“与或”(是吧?)运算,两个一个1,一个0才=1
1111010101000
0010101001010
结果就是
1101111100010

形象一下就是
AND 是你玩电脑,只有你妈你爸都同意了你才能玩
OR  是你玩电脑,只有你妈你爸一个同意了你就能玩
XOR 是你玩电脑,你爸你妈打起来了你就能玩了(汗~)

根据这个你应该明白为什么XOR EAX,EAX=0了吧~
补:
-------------------------------
XOR EAX,EAX
XXXXYYYXYXYXYXYYY
XXXXYYYXYXYXYXYYY
=================
00000000000000000
-------------------------------
汗~写了那么久,真想睡了……
对了,不知道这篇文章该叫什么,就叫“新手破解进阶教程之EXESCOPE吧……”
(各位大虾,以上内容决无抄袭前作…………大虾:你去死吧!代码都是一样的!…………我:无语,这段代码本来就没改过……)

反正你们没我分析透彻就对了


再次说明一下:反对小日本软件入侵!大力弘扬破解日本软件的精神!支持国产软件(这是N多程序员又骂我了:你以后还不是要“研究”我们的程序吗?我汗~)

晕,写得好累,都11:15了,完了,明天的考试……555555555,有错你们大虾帮着改,俺先脚底摸油了,各位新手有什么不懂的问,我和大虾都会解答的(大虾:又把我搀上!我:你不会不解答吧?大虾:看人品。我:…………)

祝同我一样的菜鸟们继续努力:)更上10层楼:)今天就到这里了,88

                                              NONAME SWORDMAN[CPU]
                                                                   Lake.NONAME DREAM
                                              mail:wangjunyi2008@sina.com
                                              浩方cs:"love usp"or[:=Cabbage=:]Bird No.1
                                              浩方碧雪:仙剑
                                              新浪碧雪:中国仙剑/中国仙剑联盟/  
    (最后一句话:想知道什么叫做noname swordman[cpu]的CPU是什么意思吗?到联系方式里找找中文,试试翻译成英文,猜对了,下次再写第二个教程的时候有奖!)
(可能到暑假了:()