首页
社区
课程
招聘
私人保险箱 V5.50--简单算法分析(简单循环计算-菜鸟必看)
发表于: 2005-1-28 02:57 8428

私人保险箱 V5.50--简单算法分析(简单循环计算-菜鸟必看)

2005-1-28 02:57
8428

======================================================================
【工程作者】深海游侠[CZG][OCN]
【作者邮箱】shenhaiyouxia@163.com
【作者主页】http://86.22.cn/
======================================================================
【软件名称】私人保险箱 V5.50
【下载地址】http://www4.skycn.com/soft/14176.html
【加壳保护】ASPack加壳
【软件介绍】
为了不使自己的文件能被他人随意使用,你可能会使用一些加密软件来对文件进行加密,但在这种情况下,在文件较大或文件很多的情况下需要花费较多的时间,而且当要使用这些文件的时候,还需要对其进行解密,而使用完毕后,又要重新加密,十分麻烦。其实只要能将这些文件彻底隐藏起来不就行了。本软件就能帮您实现这个功能。
    软件能够帮助您方便快捷彻底地隐藏文件。无论有多少个文件,只要把这些文件或这些文件所在的文件夹存放到所设置的私人保险箱中,又或者直接将这些文件所在的目录设置为私人保险箱,即可实现文件的彻底隐藏。本软件在使用上非常简单。第一次运行的时候请以管理员的身份登录,至少创建一个用户,然后以用户的身份登录,设置该用户的私人保险箱。设置完成后,当要使用私人保险箱时,只需在\\\"我的电脑\\\"或任何一个文件夹上单击右键,选取\\\"进入私人保险箱\\\",输入正确的密码即可使用属于你的所有私人保险箱。
======================================================================
【工程平台】Win ME
【调试工具】TRW2000系列
【脱壳方式】专用工具脱壳
======================================================================
【破解过程】
首先下断点,程序顺利断下,我们来到这里!

016F:004DACC0 50               PUSH     EAX              //EAX=假码
016F:004DACC1 6A03             PUSH     BYTE +03
016F:004DACC3 8D45F8           LEA      EAX,[EBP-08]     
016F:004DACC6 50               PUSH     EAX
016F:004DACC7 8D45F4           LEA      EAX,[EBP-0C]
016F:004DACCA E891AEFEFF       CALL     004C5B60         //猜的没错的话应该是读取机器码,具体没跟。
016F:004DACCF 8B45F4           MOV      EAX,[EBP-0C]     //EAX=机器码
016F:004DACD2 B902000000       MOV      ECX,02
016F:004DACD7 BA01000000       MOV      EDX,01
016F:004DACDC E857AFFEFF       CALL     004C5C38         //毫无疑问,算法CALL,跟进!
016F:004DACE1 8B55F8           MOV      EDX,[EBP-08]     //EDX=真码
016F:004DACE4 58               POP      EAX              //EAX=假码
016F:004DACE5 E8A2A3F2FF       CALL     0040508C         //经典比较
016F:004DACEA 7566             JNZ      004DAD52         //关键跳
016F:004DACEC B201             MOV      DL,01
016F:004DACEE A1847A4600       MOV      EAX,[00467A84]
016F:004DACF3 E88CCEF8FF       CALL     00467B84
016F:004DACF8 8BD8             MOV      EBX,EAX
016F:004DACFA BA01000080       MOV      EDX,80000001
016F:004DACFF 8BC3             MOV      EAX,EBX
016F:004DAD01 E81ECFF8FF       CALL     00467C24
016F:004DAD06 B101             MOV      CL,01
016F:004DAD08 BAACAD4D00       MOV      EDX,004DADAC
016F:004DAD0D 8BC3             MOV      EAX,EBX
016F:004DAD0F E854D0F8FF       CALL     00467D68
016F:004DAD14 8D55F0           LEA      EDX,[EBP-10]
016F:004DAD17 8B8604040000     MOV      EAX,[ESI+0404]
016F:004DAD1D E846ACF6FF       CALL     00445968
016F:004DAD22 8B4DF0           MOV      ECX,[EBP-10]
016F:004DAD25 BAC8AD4D00       MOV      EDX,004DADC8
016F:004DAD2A 8BC3             MOV      EAX,EBX
016F:004DAD2C E863D5F8FF       CALL     00468294
016F:004DAD31 8BC3             MOV      EAX,EBX
016F:004DAD33 E8CC91F2FF       CALL     00403F04
016F:004DAD38 6A00             PUSH     BYTE +00
016F:004DAD3A B9D0AD4D00       MOV      ECX,004DADD0
016F:004DAD3F BADCAD4D00       MOV      EDX,004DADDC
016F:004DAD44 A1541C4E00       MOV      EAX,[004E1C54]
016F:004DAD49 8B00             MOV      EAX,[EAX]
016F:004DAD4B E898B9F8FF       CALL     004666E8              //成功CALL
016F:004DAD50 EB18             JMP      SHORT 004DAD6A
016F:004DAD52 6A00             PUSH     BYTE +00
016F:004DAD54 B9D0AD4D00       MOV      ECX,004DADD0
016F:004DAD59 BAE8AD4D00       MOV      EDX,004DADE8
016F:004DAD5E A1541C4E00       MOV      EAX,[004E1C54]
016F:004DAD63 8B00             MOV      EAX,[EAX]
016F:004DAD65 E87EB9F8FF       CALL     004666E8              //出错CALL
016F:004DAD6A 33C0             XOR      EAX,EAX
016F:004DAD6C 5A               POP      EDX
016F:004DAD6D 59               POP      ECX
016F:004DAD6E 59               POP      ECX
016F:004DAD6F 648910           MOV      [FS:EAX],EDX
016F:004DAD72 689CAD4D00       PUSH     DWORD 004DAD9C
016F:004DAD77 8D45F0           LEA      EAX,[EBP-10]
016F:004DAD7A E8119FF2FF       CALL     00404C90
016F:004DAD7F 8D45F4           LEA      EAX,[EBP-0C]
016F:004DAD82 BA02000000       MOV      EDX,02
016F:004DAD87 E8289FF2FF       CALL     00404CB4
016F:004DAD8C 8D45FC           LEA      EAX,[EBP-04]
016F:004DAD8F E8FC9EF2FF       CALL     00404C90
016F:004DAD94 C3               RET     

016F:004DACDC E857AFFEFF       CALL     004C5C38
|
016F:004C5C38 55               PUSH     EBP
016F:004C5C39 8BEC             MOV      EBP,ESP
016F:004C5C3B 83C4F0           ADD      ESP,BYTE -10
016F:004C5C3E 53               PUSH     EBX
016F:004C5C3F 56               PUSH     ESI
016F:004C5C40 57               PUSH     EDI
016F:004C5C41 33DB             XOR      EBX,EBX
016F:004C5C43 895DF0           MOV      [EBP-10],EBX
016F:004C5C46 894DF8           MOV      [EBP-08],ECX
016F:004C5C49 8BF2             MOV      ESI,EDX
016F:004C5C4B 8945FC           MOV      [EBP-04],EAX
016F:004C5C4E 8B7D08           MOV      EDI,[EBP+08]
016F:004C5C51 33C0             XOR      EAX,EAX
016F:004C5C53 55               PUSH     EBP
016F:004C5C54 68CB5C4C00       PUSH     DWORD 004C5CCB
016F:004C5C59 64FF30           PUSH     DWORD [FS:EAX]
016F:004C5C5C 648920           MOV      [FS:EAX],ESP
016F:004C5C5F 8BC7             MOV      EAX,EDI
016F:004C5C61 E82AF0F3FF       CALL     00404C90
016F:004C5C66 8B45FC           MOV      EAX,[EBP-04]         //EAX=机器码
016F:004C5C69 E8DAF2F3FF       CALL     00404F48             //取位数
016F:004C5C6E 84C0             TEST     AL,AL
016F:004C5C70 7643             JNA      004C5CB5             //总的来说就是看是否有机器码!
016F:004C5C72 8845F7           MOV      [EBP-09],AL
016F:004C5C75 B301             MOV      BL,01
016F:004C5C77 8D45F0           LEA      EAX,[EBP-10]
016F:004C5C7A 33D2             XOR      EDX,EDX
016F:004C5C7C 8AD3             MOV      DL,BL
016F:004C5C7E 8B4DFC           MOV      ECX,[EBP-04]         //ECX=机器码
016F:004C5C81 8A5411FF         MOV      DL,[ECX+EDX-01]      //取1位(主要看是第几次循环)
016F:004C5C85 8BCE             MOV      ECX,ESI              //ESI算是个累加器
016F:004C5C87 C1E908           SHR      ECX,08               //逻辑右移2位
016F:004C5C8A 32D1             XOR      DL,CL                //DL xor Dl
016F:004C5C8C E8DFF1F3FF       CALL     00404E70             //DL结果转为ASCII码表示出来!
016F:004C5C91 8B55F0           MOV      EDX,[EBP-10]         //表示出来
016F:004C5C94 8BC7             MOV      EAX,EDI
016F:004C5C96 E8B5F2F3FF       CALL     00404F50             //应该是排位用
016F:004C5C9B 33C0             XOR      EAX,EAX
016F:004C5C9D 8AC3             MOV      AL,BL
016F:004C5C9F 8B17             MOV      EDX,[EDI]            //表示出来
016F:004C5CA1 0FB64402FF       MOVZX    EAX,BYTE [EDX+EAX-01]
016F:004C5CA6 03F0             ADD      ESI,EAX              //ESI=EAX+ESI
016F:004C5CA8 0FAF75F8         IMUL     ESI,[EBP-08]         //下命令可看到[ebp-08]寄存器的值是2
016F:004C5CAC 03750C           ADD      ESI,[EBP+0C]         //[EBP+0C]寄存器的值是3
016F:004C5CAF 43               INC      EBX                  //计数器+1(看是否把每位机器码都计算了)
016F:004C5CB0 FE4DF7           DEC      BYTE [EBP-09]        //计算完了一个?去掉一个吧!
016F:004C5CB3 75C2             JNZ      004C5C77             //这里到4C5C77就是一个经典的循环计算!要计算每一位的数!
016F:004C5CB5 33C0             XOR      EAX,EAX
016F:004C5CB7 5A               POP      EDX
016F:004C5CB8 59               POP      ECX
016F:004C5CB9 59               POP      ECX
016F:004C5CBA 648910           MOV      [FS:EAX],EDX
016F:004C5CBD 68D25C4C00       PUSH     DWORD 004C5CD2
016F:004C5CC2 8D45F0           LEA      EAX,[EBP-10]
016F:004C5CC5 E8C6EFF3FF       CALL     00404C90
016F:004C5CCA C3               RET                            //返回

1)破解总结:
1>注册码和机器码位数是大概相对的,(除非遇上比较大的数).
2>注册码利用了循环每位机器码的计算方式!

2)破解推算:   (我的机器码是:0383FBFF)
      
                   计算过程(先取每位机器码)
第1位                30 xor (0 shr 8)   = 30(0)   
第2位          33 xor ((31*2+3) shr 8)  = 33(3)
第3位          38 xor ((98*2+3) shr 8)  = 39(9)
第4位          33 xor ((16C*2+3) shr 8) = 31(1)
第5位          46 xor ((30C*2+3) shr 8) = 40(@)
第6位          42 xor ((65B*2+3) shr 8) = 4E(N)
第7位          46 xor ((D07*2+3) shr 8) = 5C(\)
第8位          46 xor ((1A6D*2+3) shr 8)= 72(r)

总结:我的注册码就是: 0391@N\r

3)内存注册机:
中断地址:4DACE4
中断次数:1
第一字节:58
字节长度:1
寄存器:EDX(内存型)

4)注册信息保存位置:
HKEY_USERS\.DEFAULT\Software\SafeBox\RegNum: "0391@N\r"

5)感评:
其实像这类软件算法已经是十分十分简单,但我认为是比较典型的循环计算,而且是小循环,对小鸟们一定很有帮助!毕竟我们不是为破解别人软件而学破解的,我们想得到的是技术!另外有朋友如果写出VB注册机请帮忙把原码发给我,先谢谢了!
如果我这篇拙文对大家哪怕有一点点帮助,那么我的目的也就达到了。
最后我要感谢[CZG][OCN]的兄弟们和许许多多朋友给我的许多帮助!也感谢你能耐心看完这篇文章!收工!

======================================================================
【工程声明】本过程只供内部学习之用!如要转载请保持过程完整!
======================================================================


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (6)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
'唉,VB的注册机也有不好写的时候,不像C/C++或Pascal语言,连左、右逻辑移位的指令都没有,到最后还得自己添上

Public CF As Boolean  '定义CF标志位

Public Function SHR(iShr As Long, n As Integer) As Long 'SHR逻辑移位函数
  Dim i As Integer
  For i = 1 To n - 1
    iShr = iShr \ 2
  Next i
  CF = iShr And 1
  SHR = iShr \ 2
End Function

Private Sub Command1_Click()
  Dim Code, Sn As String
  Dim i, k As Integer
  Dim tmp, j As Long
  Code = Text1.Text
  
  If Code = "" Then
    MsgBox ("错误,请输入机器码!")
    Exit Sub
  End If
  
  j = 0
  tmp = SHR(j, 8)
  
  Sn = Chr(Asc(Mid(Code, 1, 1)) Xor tmp)
  
  j = j + Asc(Mid(Sn, 1, 1)) + 1
  
  For i = 2 To Len(Code)
    tmp = SHR((j * 2 + 3), 8)
    Sn = Sn + Chr(Asc(Mid(Code, i, 1)) Xor tmp)
    j = Asc(Mid(Sn, i, 1)) + (j * 2 + 3)
  Next i

  Text2.Text = Sn
End Sub
2005-1-28 14:58
0
雪    币: 300
活跃值: (521)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
3
谢谢小虾兄弟了~~~
2005-1-28 21:12
0
雪    币: 98745
活跃值: (201039)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
4
支持你...
2005-1-29 00:52
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
精辟,支持!
2005-2-2 14:41
0
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
6
最初由 小虾 发布
'唉,VB的注册机也有不好写的时候,不像C/C++或Pascal语言,连左、右逻辑移位的指令都没有,到最后还得自己添上

Public CF As Boolean '定义CF标志位

Public Function SHR(iShr As Long, n As Integer) As Long 'SHR逻辑移位函数
........


那请问,循环移位怎么写?小弟菜鸟,不过喜欢写注册机..
2005-2-2 14:49
0
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
7
是不是要先保存啊.....有点思路了...
2005-2-2 14:50
0
游客
登录 | 注册 方可回帖
返回
//