-
您的位置:首页 → 精文荟萃 → 破解文章 → 大岩个人所得税计算软件 1.0(P-Code)
大岩个人所得税计算软件 1.0(P-Code)
时间:2004/10/15 1:01:00来源:本站整理作者:蓝点我要评论(1)
-
【软件限制】:30天试用、功能限制
【作者声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!
【破解工具】:TRW2000娃娃修改版、Ollydbg1.09、PEiD、W32Dasm 9.0白金版
—————————————————————————————————
【过 程】:
sds.exe 无壳。Visual Basic 6.0 编写。繁琐的P-Code程序!发现WKTVBDE用不了。
至于同门的某个公路工程预算软件就不公布了其笔记了,^O^ ^O^ 大体算法流程是差不多的。
用户名:fly
机器码:1055432603Pentium Pro07/11/02
试炼码:13572468
—————————————————————————————————
程序的机器码是取C盘序列号、CPU信息以及BIOS日期生成的。程序只对系统盘的序列号进行了简单的处理,因为主要是想看看注册码的算法,所以这里就不深究机器码的生成了。
66103486 8B47 08 MOV EAX,DWORD PTR DS:[EDI+8]
====>EAX=1055432603Pentium Pro07/11/02 机器码
66103489 0FBF1E MOVSX EBX,WORD PTR DS:[ESI]
6610348C 66:833F 08 CMP WORD PTR DS:[EDI],8
66103490 74 09 JE SHORT MSVBVM60.6610349B
66103492 57 PUSH EDI
66103493 E8 CD5BF2FF CALL MSVBVM60.__vbaStrVarCopy
66103498 89042B MOV DWORD PTR DS:[EBX+EBP],EAX
6610349B 50 PUSH EAX
6610349C 33C0 XOR EAX,EAX
6610349E 8A46 02 MOV AL,BYTE PTR DS:[ESI+2]
661034A1 83C6 03 ADD ESI,3
661034A4 FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]
—————————————————————————————————
用MSVBVM60.rtcMidBstr依次取机器码的字符
66024808 E8 1E000000 CALL MSVBVM60.rtcMidBstr
6602480D C9 LEAVE
6602480E C2 0C00 RETN 0C
66024882 8B4424 14 MOV EAX,DWORD PTR SS:[ESP+14]
====>EAX=1055432603Pentium Pro07/11/02 机器码
66024886 03D8 ADD EBX,EAX
66024888 53 PUSH EBX
66024889 FF15 EC190066 CALL DWORD PTR DS:[<&OLEAUT32.#150_SysAl>
6602488F 8BF0 MOV ESI,EAX
66024891 85F6 TEST ESI,ESI
66024893 0F84 51260200 JE MSVBVM60.66046EEA
66024899 8BC6 MOV EAX,ESI
6602489B 5F POP EDI
6602489C 5E POP ESI
6602489D 5B POP EBX
6602489E C2 0C00 RETN 0C
取1、0、5、5、4、3、2、6、0、3、P、e、n、t、i、u、m、 、P、r、o、0、7、/、1、1、/、0、2
—————————————————————————————————
依次取机器码字符在程序自给的表中的位置,并以此位置为开始重新排表!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
原表——共94位字符
00415604 38 00 78 00 33 00 70 00 35 00 42 00 65 00 61 00 8.x.3.p.5.B.e.a.
00415614 62 00 63 00 64 00 66 00 67 00 68 00 69 00 6A 00 b.c.d.f.g.h.i.j.
00415624 6B 00 6C 00 6D 00 6E 00 6F 00 71 00 72 00 73 00 k.l.m.n.o.q.r.s.
00415634 74 00 75 00 76 00 77 00 79 00 7A 00 41 00 43 00 t.u.v.w.y.z.A.C.
00415644 44 00 45 00 46 00 47 00 48 00 49 00 4A 00 4B 00 D.E.F.G.H.I.J.K.
00415654 4C 00 4D 00 4E 00 4F 00 50 00 51 00 52 00 53 00 L.M.N.O.P.Q.R.S.
00415664 54 00 55 00 56 00 57 00 58 00 59 00 5A 00 20 00 T.U.V.W.X.Y.Z. .
00415674 31 00 32 00 34 00 36 00 37 00 39 00 30 00 2D 00 1.2.4.6.7.9.0.-.
00415684 2E 00 23 00 2F 00 5C 00 21 00 40 00 24 00 3C 00 ..#./.\.!.@.$.<.
00415694 3E 00 26 00 2A 00 28 00 29 00 5B 00 5D 00 7B 00 >.&.*.(.).[.].{.
004156A4 7D 00 27 00 3B 00 3A 00 2C 00 3F 00 3D 00 2B 00 }.'.;.:.,.?.=.+.
004156B4 7E 00 60 00 5E 00 7C 00 25 00 5F ~.`.^.|.%._
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
如:机器码1->重排表为
1.2.4.6.7.9.0.-...#./.\.!.@.$.<.>.&.*.(.).[.].{.}.'.;.:.,.?.=.+.~.`.^.|.%._.
8.x.3.p.5.B.e.a.b.c.d.f.g.h.i.j.k.l.m.n.o.q.r.s.t.u.v.w.y.z.A.C.D.E.F.G.
H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z. .
机器码5->重排表为
5.B.e.a.b.c.d.f.g.h.i.j.k.l.m.n.o.q.r.s.t.u.v.w.y.z.A.C.D.E.F.G.H.I.J.K.L.M.
N.O.P.Q.R.S.T.U.V.W.X.Y.Z. .1.2.4.6.7.9.0.-...#./.\.!.@.$.<.>.&.*.(.).[.].{.
}.'.;.:.,.?.=.+.~.`.^.|.%._.8.x.3.p.
呵呵,下面再多举2个例子 ^Q^ ~Q~
6601468A E8 46000000 CALL MSVBVM60.660146D5
6601468F 85C0 TEST EAX,EAX
66014691 74 33 JE SHORT MSVBVM60.660146C6
66014693 8B4D E4 MOV ECX,DWORD PTR SS:[EBP-1C]
66014696 40 INC EAX
66014697 40 INC EAX
66014698 8D7E 02 LEA EDI,DWORD PTR DS:[ESI+2]
6601469B 8BF0 MOV ESI,EAX
6601469D 33D2 XOR EDX,EDX
6601469F F3:A6 REPE CMPS BYTE PTR ES:[EDI],BYTE PTR DS:>
660146A1 75 1A JNZ SHORT MSVBVM60.660146BD
660146A3 8BC8 MOV ECX,EAX
660146A5 2B4D F8 SUB ECX,DWORD PTR SS:[EBP-8]
660146A8 D1F9 SAR ECX,1
660146AA 837D 08 00 CMP DWORD PTR SS:[EBP+8],0
660146AE 0F85 57290300 JNZ MSVBVM60.6604700B
660146B4 8BC1 MOV EAX,ECX
660146D9 8B7D 08 MOV EDI,DWORD PTR SS:[EBP+8]
660146DC 8B4D 10 MOV ECX,DWORD PTR SS:[EBP+10]
660146DF 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
660146E2 0BE4 OR ESP,ESP
660146E4 F2:66:AF REPNE SCAS WORD PTR ES:[EDI]
====>比较机器码字符在表中的位置
660146E7 B8 00000000 MOV EAX,0
660146EC 75 03 JNZ SHORT MSVBVM60.660146F1
660146EE 8D47 FE LEA EAX,DWORD PTR DS:[EDI-2]
660146F1 5F POP EDI
660146F2 5D POP EBP
660146F3 C2 0C00 RETN 0C
—————————————————————————————————
循环依次取用户名字符
660247FD 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
66024800 8D4400 FF LEA EAX,DWORD PTR DS:[EAX+EAX-1]
66024804 50 PUSH EAX
66024805 FF75 08 PUSH DWORD PTR SS:[EBP+8]
66024808 E8 1E000000 CALL MSVBVM60.rtcMidBstr
6602480D C9 LEAVE
6602480E C2 0C00 RETN 0C
66024882 8B4424 14 MOV EAX,DWORD PTR SS:[ESP+14]
66024886 03D8 ADD EBX,EAX
66024888 53 PUSH EBX
66024889 FF15 EC190066 CALL DWORD PTR DS:[<&OLEAUT32.#150_SysAl>
6602488F 8BF0 MOV ESI,EAX
66024891 85F6 TEST ESI,ESI
66024893 0F84 51260200 JE MSVBVM60.66046EEA
66024899 8BC6 MOV EAX,ESI
6602489B 5F POP EDI
6602489C 5E POP ESI
6602489D 5B POP EBX
6602489E C2 0C00 RETN 0C
直至循环用户名字符和机器码位数相等:
1055432603Pentium Pro07/11/02
flyflyflyflyflyflyflyflyflyfl 共29位
—————————————————————————————————
依次从变化后的新表中取字符和用户名的字符比较!实际就是取用户名字符在新表中的位置!但是作者这种逐一取字符比较的做法却有点“恐怖”呀。多少循环呀!^O^ ^O^ 稍不注意就转晕了!
653C433C F3:66:A7 REPE CMPS WORD PTR ES:[EDI],WORD PTR DS:>
====>循环求用户名字符在新表中的位置
—————————————————
如:第1位机器码1->重排后的新表为
1.2.4.6.7.9.0.-...#./.\.!.@.$.<.>.&.*.(.).[.].{.}.'.;.:.,.?.=.+.~.`.^.|.
%._.8.x.3.p.5.B.e.a.b.c.d.f.g.h.i.j.k.l.m.n.o.q.r.s.t.u.v.w.y.z.A.C.D.E.
F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z. .
则用户名第一位f->在新表的第50位
—————————————————
如:第2位机器码0->重排后的新表为
0.-...#./.\.!.@.$.<.>.&.*.(.).[.].{.}.'.;.:.,.?.=.+.~.`.^.|.%._.8.x.3.p.
5.B.e.a.b.c.d.f.g.h.i.j.k.l.m.n.o.q.r.s.t.u.v.w.y.z.A.C.D.E.F.G.H.I.J.K.
L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z. .1.2.4.6.7.9.
则用户名第二位l->也在新表的第50位
—————————————————
如:第3位机器码5->重排后的新表为
5.B.e.a.b.c.d.f.g.h.i.j.k.l.m.n.o.q.r.s.t.u.v.w.y.z.A.C.D.E.F.G.H.I.J.K.
L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z. .1.2.4.6.7.9.0.-...#./.\.!.@.$.<.>.&.*.(.
).[.].{.}.'.;.:.,.?.=.+.~.`.^.|.%._.8.x.3.p.
则用户名第三位y->在新表的第25位
—————————————————
如:第4位机器码5->重排后的新表为
5.B.e.a.b.c.d.f.g.h.i.j.k.l.m.n.o.q.r.s.t.u.v.w.y.z.A.C.D.E.F.G.H.I.J.K.
L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z. .1.2.4.6.7.9.0.-...#./.\.!.@.$.<.>.&.*.(.
).[.].{.}.'.;.:.,.?.=.+.~.`.^.|.%._.8.x.3.p.
则用户名第四位f->在新表的第8位 (循环用户名字符了)
…… ……直至取完19位…… ^O^ …… 晕呀 …… ^O^ ……
—————————————————————————————————
以上面所得的位置从原表中取字符生成注册码:
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
原表——共94位字符
00415604 38 00 78 00 33 00 70 00 35 00 42 00 65 00 61 00 8.x.3.p.5.B.e.a.
00415614 62 00 63 00 64 00 66 00 67 00 68 00 69 00 6A 00 b.c.d.f.g.h.i.j.
00415624 6B 00 6C 00 6D 00 6E 00 6F 00 71 00 72 00 73 00 k.l.m.n.o.q.r.s.
00415634 74 00 75 00 76 00 77 00 79 00 7A 00 41 00 43 00 t.u.v.w.y.z.A.C.
00415644 44 00 45 00 46 00 47 00 48 00 49 00 4A 00 4B 00 D.E.F.G.H.I.J.K.
00415654 4C 00 4D 00 4E 00 4F 00 50 00 51 00 52 00 53 00 L.M.N.O.P.Q.R.S.
00415664 54 00 55 00 56 00 57 00 58 00 59 00 5A 00 20 00 T.U.V.W.X.Y.Z. .
00415674 31 00 32 00 34 00 36 00 37 00 39 00 30 00 2D 00 1.2.4.6.7.9.0.-.
00415684 2E 00 23 00 2F 00 5C 00 21 00 40 00 24 00 3C 00 ..#./.\.!.@.$.<.
00415694 3E 00 26 00 2A 00 28 00 29 00 5B 00 5D 00 7B 00 >.&.*.(.).[.].{.
004156A4 7D 00 27 00 3B 00 3A 00 2C 00 3F 00 3D 00 2B 00 }.'.;.:.,.?.=.+.
004156B4 7E 00 60 00 5E 00 7C 00 25 00 5F ~.`.^.|.%._
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
1、用户名第一位f->在新表的第50位 则取原表第50位U 作为第1位注册码
2、用户名第二位l->也在新表的第50位 则取原表第50位U 作为第2位注册码
3、用户名第三位y->在新表的第25位 则取原表第25位t 作为第3位注册码
4、用户名第四位f->在新表的第8位 则取原表第8 位a 作为第4位注册码
…… ……直至取完19位…… ^O^ …… 晕呀 …… ^O^ ……
66024903 E8 11000000 CALL MSVBVM60.rtcLeftVar
6602477C 8B4424 08 MOV EAX,DWORD PTR SS:[ESP+8]
66024780 8BCE MOV ECX,ESI
66024782 85C0 TEST EAX,EAX
66024784 0F84 D7260200 JE MSVBVM60.66046E61
6602478A 8B50 FC MOV EDX,DWORD PTR DS:[EAX-4]
6602478D 3BF2 CMP ESI,EDX
6602478F 0F87 D3260200 JA MSVBVM60.66046E68
66024795 51 PUSH ECX
66024796 50 PUSH EAX
66024797 FF15 EC190066 CALL DWORD PTR DS:[<&OLEAUT32.#150_SysAl>
6602479D 8BF0 MOV ESI,EAX
====>U、U、t、a、Y、v、T、X、7……
6602479F 85F6 TEST ESI,ESI
660247A1 0F84 D4260200 JE MSVBVM60.66046E7B
660247A7 8BC6 MOV EAX,ESI
660247A9 5E POP ESI
660247AA C2 0800 RETN 8
—————————————————————————————————
把所得的字符连接起来
660FE996 E8 8969F2FF CALL MSVBVM60.__vbaStrCat
660FE99B 50 PUSH EAX
最后得出注册码 ====>EAX=UUtaYvTX7c\r=+i}_\9`bOW1U 1OZ
660FE99C 33C0 XOR EAX,EAX
660FE99E 8A06 MOV AL,BYTE PTR DS:[ESI]
660FE9A0 46 INC ESI
660FE9A1 FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]
—————————————————————————————————
注册时比较真假码的地方:
6602471A E8 03000000 CALL MSVBVM60.__vbaStrComp
6602471F C2 0800 RETN 8
66024722 > 837C24 04 02 CMP DWORD PTR SS:[ESP+4],2
66024727 0F84 B3290200 JE MSVBVM60.660470E0
6602472D 68 01000300 PUSH 30001
66024732 FF7424 08 PUSH DWORD PTR SS:[ESP+8]
66024736 FF7424 10 PUSH DWORD PTR SS:[ESP+10]
====>UUtaYvTX7c\r=+i}_\9`bOW1U 1OZ 注册码
6602473A FF7424 18 PUSH DWORD PTR SS:[ESP+18]
====>13572468 试炼码
6602473E FF15 74FE1066 CALL DWORD PTR DS:[6610FE74] ; OLEAUT32.VarBstrCmp
====>比较CALL!
66024744 85C0 TEST EAX,EAX
66024746 0F8C 9B290200 JL MSVBVM60.660470E7
6602474C 48 DEC EAX
6602474D C2 0C00 RETN 0C
—————————————————————————————————
【算 法 总 结】:
这个P-Code相对来说算法保护的够“麻烦”了,采用机子的多个信息生成机器码,在加上用户名,通过查表循环运算得出注册码。可惜最后还是简单的用了明码比较。发现程序对中文用户名的处理或许不是太好,故以上分析只是针对英文用户名。
—————————————————————————————————
【注册信息保存】:
同目录下的 regSDS.ini 中。
—————————————————————————————————
【整 理】:
用户名:fly
机器码:1055432603Pentium Pro07/11/02
注册码:UUtaYvTX7c\r=+i}_\9`bOW1U 1OZ
|
相关阅读
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破解如何给软件脱壳基础教程
查看所有1条评论>>