好友
阅读权限30
听众
最后登录1970-1-1
|
本帖最后由 zjh16529 于 2019-6-6 18:39 编辑
泽文堂天心正运内存注册机及劫持patch
软件下载地址:
天心正运.zip
(1.33 MB, 下载次数: 572)
(含内存注册机)
劫持Patch下载:
ZWTTian 和谐补丁.zip
(1.12 MB, 下载次数: 306)
0x01、初步分析
前段时间学习了南方系列的注册算法,这次给大家带来了泽文堂的天心正运图软件,Peid扫描,是Delphi无壳的。降低了一半的难度。
通过运行软件,得知在没有注册的时候,会限制时间在2016-12-31日,之后的日期无法进行推演。同时该款软件是KeyFile的注册模式。
软件通过读取zwtsoft.ini的注册信息完成注册。
0x02、注册分析
由于知道是通过KeyFile来进行注册,我们搜索字符串,找到zwtsoft.ini处下断点,也可以下读取、创建文件的api断点。
[Asm] 纯文本查看 复制代码 0051AFB1 BA 58B25100 mov edx,CrackZWT.0051B258 ; zwtsoft.ini
0051AFB6 E8 6D9AEEFF call CrackZWT.00404A28
0051AFBB 8B4D FC mov ecx,dword ptr ss:[ebp-0x4]
0051AFBE B2 01 mov dl,0x1
0051AFC0 A1 C8134400 mov eax,dword ptr ds:[0x4413C8]
0051AFC5 E8 AE64F2FF call CrackZWT.00441478
0051AFCA A3 C8995200 mov dword ptr ds:[0x5299C8],eax
0051AFCF 8D55 F4 lea edx,dword ptr ss:[ebp-0xC]
0051AFD2 B8 6CB25100 mov eax,CrackZWT.0051B26C ; ID1
0051AFD7 E8 A0FBFFFF call CrackZWT.0051AB7C ; 这是读ini的ID1,一会修改里面的内容,。。。
0051AFDC 8B45 F4 mov eax,dword ptr ss:[ebp-0xC]
0051AFDF 50 push eax
0051AFE0 8D45 F0 lea eax,dword ptr ss:[ebp-0x10]
0051AFE3 E8 7868F6FF call CrackZWT.00481860 ; ID2读取
0051AFE8 8B55 F0 mov edx,dword ptr ss:[ebp-0x10]
0051AFEB 58 pop eax
0051AFEC E8 4BFCFFFF call CrackZWT.0051AC3C ; 关键算法Call.....Call里面有大量的计算及断点
0051AFF1 8BD0 mov edx,eax
0051AFF3 8B03 mov eax,dword ptr ds:[ebx]
机器码的长度为6段24位长度,
[Asm] 纯文本查看 复制代码 0051A98C 55 push ebp ; 这个Call的段首,,在此Call中,开始注册码的相关计算工作。重点关注。
0051A98D 8BEC mov ebp,esp
0051A98F 83C4 9C add esp,-0x64
0051A992 53 push ebx
0051A993 33C9 xor ecx,ecx
0051A995 894D 9C mov dword ptr ss:[ebp-0x64],ecx
0051A998 894D A0 mov dword ptr ss:[ebp-0x60],ecx
0051A99B 8BDA mov ebx,edx
0051A99D 8945 FC mov dword ptr ss:[ebp-0x4],eax
0051A9A0 8B45 FC mov eax,dword ptr ss:[ebp-0x4]
0051A9A3 E8 68A2EEFF call CrackZWT.00404C10
0051A9A8 33C0 xor eax,eax
0051A9AA 55 push ebp
0051A9AB 68 27AA5100 push CrackZWT.0051AA27
0051A9B0 64:FF30 push dword ptr fs:[eax]
0051A9B3 64:8920 mov dword ptr fs:[eax],esp
0051A9B6 8D45 A4 lea eax,dword ptr ss:[ebp-0x5C]
0051A9B9 E8 A6FEFFFF call CrackZWT.0051A864
0051A9BE 8D45 A0 lea eax,dword ptr ss:[ebp-0x60]
0051A9C1 B9 3CAA5100 mov ecx,CrackZWT.0051AA3C ; gxcwljnxz
0051A9C6 8B55 FC mov edx,dword ptr ss:[ebp-0x4]
0051A9C9 E8 9EA0EEFF call CrackZWT.00404A6C
0051A9CE 8B45 A0 mov eax,dword ptr ss:[ebp-0x60]
0051A9D1 E8 4AA0EEFF call CrackZWT.00404A20 ; 404A20Call是取长度的
0051A9D6 50 push eax
0051A9D7 8D45 9C lea eax,dword ptr ss:[ebp-0x64]
0051A9DA B9 50AA5100 mov ecx,CrackZWT.0051AA50 ; 泽文堂易学软件
0051A9DF 8B55 FC mov edx,dword ptr ss:[ebp-0x4]
0051A9E2 E8 85A0EEFF call CrackZWT.00404A6C ; 该Call拼接注册码与用户名
0051A9E7 8B45 9C mov eax,dword ptr ss:[ebp-0x64]
0051A9EA E8 31A2EEFF call CrackZWT.00404C20
0051A9EF 8BD0 mov edx,eax
0051A9F1 8D45 A4 lea eax,dword ptr ss:[ebp-0x5C]
0051A9F4 59 pop ecx
0051A9F5 E8 9EFEFFFF call CrackZWT.0051A898 ; 明白了,是用0x26的长度截取0x2B的固定长度
0051A9FA 8BD3 mov edx,ebx ; 0003-06C3-BFEB-FBFF-7FDA-FBBF泽文堂易学软件!!!取这个的0x26的长度
0051A9FC 8D45 A4 lea eax,dword ptr ss:[ebp-0x5C]
0051A9FF E8 14FFFFFF call CrackZWT.0051A918 ; 这里注册码出来了。。。跟进去
在上面的Call中,将机器码与固定字符串"泽文堂易学软件"、“gxcwljnxz”分别进行拼接。
[Asm] 纯文本查看 复制代码 EBP-13E7AC 0018FCAC 002CE458 ASCII "0003-06C3-BFEB-FBFF-7FDA-FBBF泽文堂易学软件" 长度:0x2b
EBP-13E7A8 0018FCB0 002BA0A8 ASCII "0003-06C3-BFEB-FBFF-7FDA-FBBFgxcwljnxz" 长度:0x26
[Asm] 纯文本查看 复制代码 0018FCC4 30 30 30 33 2D 30 36 43 0003-06C
0018FCD4 33 2D 42 46 45 42 2D 46 42 46 46 2D 37 46 44 41 3-BFEB-FBFF-7FDA
0018FCE4 2D 46 42 42 46 D4 F3 CE C4 CC C3 D2 D7 D1 -FBBF泽文堂易?.
同时使用用字串2的长度截取字串1的ASC码。
[Asm] 纯文本查看 复制代码 0051A898 53 push ebx ; 注册码前身:
0051A899 56 push esi
0051A89A 57 push edi
0051A89B 55 push ebp
0051A89C 8BF9 mov edi,ecx
0051A89E 8BEA mov ebp,edx
0051A8A0 8BF0 mov esi,eax
0051A8A2 8B46 10 mov eax,dword ptr ds:[esi+0x10]
0051A8A5 C1E8 03 shr eax,0x3
0051A8A8 83E0 3F and eax,0x3F
0051A8AB 8BD7 mov edx,edi ; 机器码+9gxcwljnxz位长度:0x26
0051A8AD C1E2 03 shl edx,0x3 ; 长度左移0x3位,相当于长度*2^3次方,
0051A8B0 0156 10 add dword ptr ds:[esi+0x10],edx ; 0x18FCC4地址保存计算结果,!!第2次计算过来,累计求和
0051A8B3 3B56 10 cmp edx,dword ptr ds:[esi+0x10]
0051A8B6 76 03 jbe short CrackZWT.0051A8BB
0051A8B8 FF46 14 inc dword ptr ds:[esi+0x14]
0051A8BB 8BD7 mov edx,edi ; 将长度重新初始化Edx,继续位移操作
0051A8BD C1EA 1D shr edx,0x1D ; 执行右移操作,0x1d
0051A8C0 0156 14 add dword ptr ds:[esi+0x14],edx ; 开始新的Dword空间保存edx的值
0051A8C3 BB 40000000 mov ebx,0x40 ; EBx赋值0x40///0d64
0051A8C8 2BD8 sub ebx,eax
0051A8CA 3BDF cmp ebx,edi
0051A8CC 77 32 ja short CrackZWT.0051A900
0051A8CE 8D4406 18 lea eax,dword ptr ds:[esi+eax+0x18]
0051A8D2 8BCB mov ecx,ebx
0051A8D4 8BD5 mov edx,ebp
0051A8D6 E8 25D1EEFF call CrackZWT.00407A00 ; 此Call作用是交换EAX,EDX
0051A8DB 8BD6 mov edx,esi
0051A8DD 8D46 18 lea eax,dword ptr ds:[esi+0x18] ; 将机器码与泽文党的地址传给EAX
0051A8E0 E8 4FF8FFFF call CrackZWT.0051A134
0051A8E5 EB 0E jmp short CrackZWT.0051A8F5
0051A8E7 8BD6 mov edx,esi
0051A8E9 8D441D 00 lea eax,dword ptr ss:[ebp+ebx]
0051A8ED E8 42F8FFFF call CrackZWT.0051A134
0051A8F2 83C3 40 add ebx,0x40
0051A8F5 8D43 3F lea eax,dword ptr ds:[ebx+0x3F]
0051A8F8 3BF8 cmp edi,eax
0051A8FA ^ 77 EB ja short CrackZWT.0051A8E7
0051A8FC 33C0 xor eax,eax
0051A8FE EB 02 jmp short CrackZWT.0051A902
0051A900 33DB xor ebx,ebx
0051A902 8D4406 18 lea eax,dword ptr ds:[esi+eax+0x18] ; ESi+eax*0x18,,0x18其中0x10=0123456789ABCDEFFEDCBA9876543210,,0x8的内容为,上段计算的左移与右移的数据。0x130/0x0
0051A906 8BCF mov ecx,edi
0051A908 2BCB sub ecx,ebx
0051A90A 8D541D 00 lea edx,dword ptr ss:[ebp+ebx]
0051A90E E8 EDD0EEFF call CrackZWT.00407A00
[Asm] 纯文本查看 复制代码 0051A0F8 56 push esi ; 出注册码的段首,,计算过程,还得要前溯
0051A0F9 8BF0 mov esi,eax
0051A0FB 8BC2 mov eax,edx
0051A0FD 8BD1 mov edx,ecx ; 压参数0x2到Edx,Ecx做临时变量使用!
0051A0FF 85D2 test edx,edx
0051A101 76 2F jbe short CrackZWT.0051A132 ; 计算体
0051A103 8A0E mov cl,byte ptr ds:[esi] ; 从0x18fcc4+0x8,开始取数,进行and cl,0xff操作
0051A105 80E1 FF and cl,0xFF
0051A108 8808 mov byte ptr ds:[eax],cl ; 明白EAX中的0x18fc88的作用,是保存临时结果的。
0051A10A 40 inc eax
0051A10B 8B0E mov ecx,dword ptr ds:[esi] ; 取Esi0x18fcc4,第一次是Byte,之后是Dword,4字
0051A10D C1E9 08 shr ecx,0x8 ; 右移0x8位,=1
0051A110 80E1 FF and cl,0xFF ; and cl,0xff,,=1
0051A113 8808 mov byte ptr ds:[eax],cl
0051A115 40 inc eax
0051A116 8B0E mov ecx,dword ptr ds:[esi] ; 第3次取ESi,
0051A118 C1E9 10 shr ecx,0x10 ; 右移0x10位,,ECx=0,,,,
0051A11B 80E1 FF and cl,0xFF
0051A11E 8808 mov byte ptr ds:[eax],cl
0051A120 40 inc eax
0051A121 8B0E mov ecx,dword ptr ds:[esi]
0051A123 C1E9 18 shr ecx,0x18 ; 右移0x18位,,,
0051A126 80E1 FF and cl,0xFF ; and cl,0xff,,,
0051A129 8808 mov byte ptr ds:[eax],cl
0051A12B 40 inc eax
0051A12C 83C6 04 add esi,0x4 ; Esi+0x4,,,将偏移转到0x18fcc4+0x4位置。
0051A12F 4A dec edx
0051A130 ^ 75 D1 jnz short CrackZWT.0051A103
0051A132 5E pop esi
在此处进行3轮的循环,用来生成最终的注册码。跟踪的太累,直接找到计算完成后的地址,
[Asm] 纯文本查看 复制代码 0051AC72 E8 3D000000 call CrackZWT.0051ACB4 ; 这个call有计算过程。
0051AC77 8B55 F4 mov edx,dword ptr ss:[ebp-0xC]
0051AC7A 8B45 FC mov eax,dword ptr ss:[ebp-0x4]
0051AC7D E8 EA9EEEFF call CrackZWT.00404B6C ; 定义为关键的Call
直接在此处51AC7A这里截取EDX中的内存,即为注册码。
0x03、注册信息
将爆出的注册码写进zwtsoft.ini中的ID1=后面的地方,Local=是你注册的用户名。可自行修改。
先生成注册用的zwtsoft.ini文件,然后把内存注册机生成的注册码保存进ini文件即可!
[Asm] 纯文本查看 复制代码 [zwtsoft]
Local=Lmze2000
User=泽文堂
ID1=43562ea3-75617234-40821625-55d047c2
ID2=0003-06C3-BFEB-FBFF-7FDA-FBBF
|
免费评分
-
查看全部评分
本帖被以下淘专辑推荐:
- · 学习及教程|主题: 1131, 订阅: 1124
- · 教程类|主题: 265, 订阅: 43
|