破解交流mov eax, 0000270F是不是这么推算来的?
本帖最后由 冥界3大法王 于 2017-1-17 10:09 编辑http://www.52pojie.cn/thread-574064-1-1.html
看了一下 初亦泽 老兄的大作:
它修改的是这里:
00570B4C 55 PUSH EBP 修改为:mov eax, 0000270F如果改成mov eax,1当然也成立只是无限授权字样被打乱而已
00570B4D 8BEC MOV EBP,ESP ret
00570B4F 83C4 D8 ADD ESP,-0x28
00570B52|.53 PUSH EBX
我们关心的是270F是如何来的?
00571708 .E8 3FF4FFFF CALL winchm.00570B4C ;进去的地址是那个00570B4C(同时这句也是注册表之后,读取到注册名的地方)
0057170D .8BD8 MOV EBX,EAX
0057170F .8BC3 MOV EAX,EBX
00571711 .83E8 01 SUB EAX,0x1 ;Switch (cases 0..270F) <==大家注意左边的这行英文 开关点270F
00571714 .72 0B JB SHORT winchm.00571721
00571716 .74 17 JE SHORT winchm.0057172F
00571718 .2D 0E270000 SUB EAX,0x270E ;看这里!显然这句很重要!我琢磨跟这句有直接关系!
0057171D .74 21 JE SHORT winchm.00571740
0057171F .EB 30 JMP SHORT winchm.00571751
00571721 >A1 0C365E00 MOV EAX,DWORD PTR DS: ;Case 0 of switch 00571711
00571726 .33D2 XOR EDX,EDX
00571728 .E8 8F56E9FF CALL winchm.00406DBC
0057172D .EB 3E JMP SHORT winchm.0057176D
0057172F >A1 0C365E00 MOV EAX,DWORD PTR DS: ;Case 1 of switch 00571711
00571734 .BA 04185700 MOV EDX,winchm.00571804 ;UNICODE "Single-user License"
00571739 .E8 7E56E9FF CALL winchm.00406DBC
0057173E .EB 2D JMP SHORT winchm.0057176D
00571740 >A1 0C365E00 MOV EAX,DWORD PTR DS: ;Case 270F of switch 00571711
00571745 .BA 38185700 MOV EDX,winchm.00571838 ;UNICODE "Unlimited-user License"
0057174A .E8 6D56E9FF CALL winchm.00406DBC
0057174F .EB 1C JMP SHORT winchm.0057176D
00571751 >8D55 E8 LEA EDX,DWORD PTR SS: ;Default case of switch 00571711
0x270F的常量只有几个
004171AA|.66:817D FE 0F>CMP WORD PTR SS:,0x270F 显然这句好像也有些关系,因为与启动弹注册有关!
最后我们掌声有请 @初亦泽 同学来说说这个作业是如何得出结论的?
个人觉得他得修改方法很巧妙!应该有掌声{:301_974:}
修改之后得以实现跳向 无限授权~~ 汇编语言的一个加减法而已
00571708 .E8 3FF4FFFF CALL winchm.00570B4C ;通过这个CALL给寄存器EAX返回一个值
0057170D .8BD8 MOV EBX,EAX
0057170F .8BC3 MOV EAX,EBX
00571711 .83E8 01 SUB EAX,0x1 ;这句的意思是把EAX里面存放的数值减一,再存入EAX,同时SUB指令也会影响标志寄存器ZF
00571714 .72 0B JB SHORT winchm.00571721
00571716 .74 17 JE SHORT winchm.0057172F
00571718 .2D 0E270000 SUB EAX,0x270E ;EAX数值减0x270E,
0057171D .74 21 JE SHORT winchm.00571740 ;可以看到这个跳到旗舰版的授权字样,所以关键就是让这个JE成立,那么上面SUB指令运行后EAX值应该为零,所以在最上面CALL返回的EAX值应该是 0x0+0x270E+0x1 =0x270F
0057171F .EB 30 JMP SHORT winchm.00571751
00571721 >A1 0C365E00 MOV EAX,DWORD PTR DS: ;Case 0 of switch 00571711
00571726 .33D2 XOR EDX,EDX
00571728 .E8 8F56E9FF CALL winchm.00406DBC
0057172D .EB 3E JMP SHORT winchm.0057176D
0057172F >A1 0C365E00 MOV EAX,DWORD PTR DS: ;Case 1 of switch 00571711
00571734 .BA 04185700 MOV EDX,winchm.00571804 ;UNICODE "Single-user License"
00571739 .E8 7E56E9FF CALL winchm.00406DBC
0057173E .EB 2D JMP SHORT winchm.0057176D
00571740 >A1 0C365E00 MOV EAX,DWORD PTR DS: ;Case 270F of switch 00571711
00571745 .BA 38185700 MOV EDX,winchm.00571838 ;UNICODE "Unlimited-user License"
0057174A .E8 6D56E9FF CALL winchm.00406DBC
0057174F .EB 1C JMP SHORT winchm.0057176D
00571751 >8D55 E8 LEA EDX,DWORD PTR SS: ;Default case of switch 00571711 大牛,膜拜 各位老师都说过一句话:不会汇编语言的都成不了大牛。 我就是活生生的例子啊 {:301_1009:}又是汇编,lz能推荐个汇编教程不 新手学习,葱白 本帖最后由 whyida 于 2017-1-17 19:31 编辑
关键 00571711 .83E8 01 SUB EAX,0x1 ;Switch (cases 0..270F) <==大家注意左边的这行英文 开关点270F
非常明显的Switch 语句, mov eax,0x270F当eax的值为0x270F 则跳向成功。
以上只是根据所贴出代码的判断。
页:
[1]