首页
社区
课程
招聘
[旧帖] [原创]echap511的破文 0.00雪花
2008-6-8 11:00 3662

[旧帖] [原创]echap511的破文 0.00雪花

2008-6-8 11:00
3662
【文章标题】: echap511破文
【文章作者】: xitian
【作者邮箱】: luotuo512@163.com
【作者主页】: hi.baidu.com\luotuo512
【作者QQ号】: 253269872
【软件名称】: echap511
【软件大小】: 4k
【下载地址】: 自己搜索下载
【加壳方式】: 无
【保护方式】: 序列号
【编写语言】: masm
【使用工具】: OD 计算器
【操作平台】: winxp sp2
【软件介绍】: 《加密解密》后附带的习题
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
找到关键子函数如下
  004010C9  /$  56            PUSH ESI                                 ;  echap511.00401041
  004010CA  |.  57            PUSH EDI
  004010CB  |.  51            PUSH ECX
  004010CC  |.  33F6          XOR ESI,ESI
  004010CE  |.  33FF          XOR EDI,EDI
  004010D0  |.  B9 08000000   MOV ECX,8
  004010D5  |.  BE 44304000   MOV ESI,echap511.00403044                ;  ASCII "123456"
  004010DA  |>  8036 32       /XOR BYTE PTR DS:[ESI],32
  004010DD  |.  46            |INC ESI
  004010DE  |.^ E2 FA         \LOOPD SHORT echap511.004010DA
  004010E0  |.  BE 44304000   MOV ESI,echap511.00403044                ;  ASCII "123456"
  004010E5  |.  B9 04000000   MOV ECX,4
  004010EA  |>  8A06          /MOV AL,BYTE PTR DS:[ESI]
  004010EC  |.  8A5E 01       |MOV BL,BYTE PTR DS:[ESI+1]
  004010EF  |.  32C3          |XOR AL,BL
  004010F1  |.  8887 4C304000 |MOV BYTE PTR DS:[EDI+40304C],AL
  004010F7  |.  83C6 02       |ADD ESI,2
  004010FA  |.  47            |INC EDI
  004010FB  |.^ E2 ED         \LOOPD SHORT echap511.004010EA
  004010FD  |.  BE 4C304000   MOV ESI,echap511.0040304C
  00401102  |.  8A06          MOV AL,BYTE PTR DS:[ESI]
  00401104  |.  8A5E 01       MOV BL,BYTE PTR DS:[ESI+1]
  00401107  |.  32C3          XOR AL,BL
  00401109  |.  8A5E 02       MOV BL,BYTE PTR DS:[ESI+2]
  0040110C  |.  8A4E 03       MOV CL,BYTE PTR DS:[ESI+3]
  0040110F  |.  32D9          XOR BL,CL
  00401111  |.  32C3          XOR AL,BL
  00401113  |.  B9 08000000   MOV ECX,8
  00401118  |.  BE 44304000   MOV ESI,echap511.00403044                ;  ASCII "123456"
  0040111D  |>  3006          /XOR BYTE PTR DS:[ESI],AL
  0040111F  |.  46            |INC ESI
  00401120  |.^ E2 FB         \LOOPD SHORT echap511.0040111D
  00401122  |.  B9 08000000   MOV ECX,8
  00401127  |.  BE 44304000   MOV ESI,echap511.00403044                ;  ASCII "123456"
  0040112C  |.  BF 08304000   MOV EDI,echap511.00403008
  00401131  |>  8A06          /MOV AL,BYTE PTR DS:[ESI]
  00401133  |.  3A07          |CMP AL,BYTE PTR DS:[EDI]
  00401135  |.  75 1D         |JNZ SHORT echap511.00401154
  00401137  |.  46            |INC ESI
  00401138  |.  47            |INC EDI
  00401139  |.^ E2 F6         \LOOPD SHORT echap511.00401131
  0040113B  |.  6A 40         PUSH 40                                  ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
  0040113D  |.  68 35304000   PUSH echap511.00403035                   ; |Title = "Crackme 1.0"
  00401142  |.  68 10304000   PUSH echap511.00403010                   ; |Text = "Good Work Cracker"
  00401147  |.  FF35 54304000 PUSH DWORD PTR DS:[403054]               ; |hOwner = 00010430 ('Pusillus Crackme  
  1.0',class='#32770')
  0040114D  |.  E8 3C000000   CALL <JMP.&USER32.MessageBoxA>           ; \MessageBoxA
  00401152  |.  EB 17         JMP SHORT echap511.0040116B
  00401154  |>  6A 30         PUSH 30                                  ; /Style =  
  MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
  00401156  |.  68 35304000   PUSH echap511.00403035                   ; |Title = "Crackme 1.0"
  0040115B  |.  68 22304000   PUSH echap511.00403022                   ; |Text = "Bad Serial, Sorry!"
  00401160  |.  FF35 54304000 PUSH DWORD PTR DS:[403054]               ; |hOwner = 00010430 ('Pusillus Crackme  
  1.0',class='#32770')
  00401166  |.  E8 23000000   CALL <JMP.&USER32.MessageBoxA>           ; \MessageBoxA
  0040116B  |>  5F            POP EDI
  0040116C  |.  5E            POP ESI
  0040116D  |.  59            POP ECX
  0040116E  \.  C3            RETN
  观察可以发现,输入的最好是8个字符,虽然输入少于8个多于8个都不会报错,多于8个时缓冲区里只能存9个字符。所以这个crackme有多个序列号。只要前八个正确即可。
  计算过程:
  输入12345678即 31 32 33 34 35 36 37 38         字符串1   
  每个字符与32异或得到03 00 01 06 07 04 05 0A    字符串2        
  这八个字符按顺序两两异或得到03 07 03 0F        字符串3   
  这四个字符两两异或得到04 0c分别放入al和bl中。
  al和bl异或得到08放入al中
  al与字符串2中的每个字符异或得到0B 08 09 0E 0F 0C 0D 02  字符串4
  程序中有静态字符串 71 18 59 1B 79 42 45 4C      字符串5
  字符串4与字符串5比较,不等,失败。
  写注册机过程:
  我还真是不会写,我在网上找了一下,找到了这个。
      #include
      void main()
      {
       char middle_1[4];
       char middle_2[2];
       char b[8]={0x71,0x18,0x59,0x1B,0x79,0x42,0x45,0x4C} ;
       middle_1[0]=b[0]^b[1];
       middle_1[1]=b[2]^b[3];
       middle_1[2]=b[4]^b[5];
       middle_1[3]=b[6]^b[7];
       cout<<middle_1[0]<<middle_1[1]<<middle_1[2]<<middle_1[3]<<endl;
       middle_2[0]=middle_1[0]^middle_1[1];
       middle_2[1]=middle_1[2]^middle_1[3];
       char al=middle_2[0]^middle_2[1];
       cout<<al<<endl;
       for(int i=0;i<=8;i++)
       {
        b[i]=b[i]^al;
        b[i]=b[i]^0x32;
        cout<<b[i]<<' ';
       }  
      }
  可是我怎么都看不懂,怎么办,加密过程我已经分析出来了,解密不就是加密的逆过程吗,能难倒我吗?
  一步一步来吧。设正确序列号为a1a2……a8.数据块中的静态字符串为c1c2……c8,al即计算过程中al的字符。
   
  字符串c已知,求字符串a。这不就解方程吗。九个方程,九个未知数,可解。
  解法:
  首先要了解异或算符的特点。
  任何数与其自身异或:结果为0;
  任何数与 1 异或:求反;
  任何数与 0 异或:保持不变。
  异或运算可以将指定位求反而不影响其它位。
  异或运算可用于判断两个操作数是否相等
  异或运算可用于将数据清零。
  字符1与字符2异或,然后再与字符2异或,可以还原成字符1.
  异或符合分配律,交换律,结合律。

  根据以上性质,第九个方程中32为8个,所以 式1
  
  方程1可以写为: 式2
  代入上一个方程为: 式4
  字符串c为71 18 59 1B 79 42 45 4C
  所以al=19.
  代入前八个方程得字符串a为:5A 33 72 30 52 69 6E 67
  以上是字符串的asc码,还原为字符即:式3
  Z3r0Ring
  验证正确。
  现在搞清楚了原理,我可以开始写注册机了。
  把上面那个程序改进了一下。
  #include <stdio.h>
  #include <conio.h>
  void main()
  {
      int i;
      char c[8]={0x71,0x18,0x59,0x1B,0x79,0x42,0x45,0x4C};
      char a[8];
      char b=0;
      for(i=0;i<8;i++)
          b^=c[i];
      for(i=0;i<8;i++)
      {
          a[i]=c[i]^b^0x32;
          printf("%c",a[i]);
      }
      getch();
  }
  写的过程中犯了一个错误,a[i]=c[i]^b^0x32;,我写成了a[i]=c[i]^b^32,debug了好几遍才发现这个错误,真是惭愧惭愧。
  
  

  
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2008年06月08日 0:43:53

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
  • 1.JPG (24.09kb,33次下载)
收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xitian 2008-6-8 11:17
2
0
[QUOTE=;]...[/QUOTE]
写错了一点点,改为:
根据以上性质,第九个方程中32为8个,所以 式2
方程1可以写为: 式4
代入上一个方程为: 式3
游客
登录 | 注册 方可回帖
返回