我一天的体会----一个keygenme的体验---猥琐
本帖最后由 wgz001 于 2014-5-25 21:57 编辑keygenme地址 KeygenMe
https://www.chinapyg.com/thread-73065-1-1.html
(出处: 中国飘云阁(PYG官方论坛) )
我一天的体会----一个keygenme的体验---猥琐
看了一天,一直不懂,问zaas要了一组可用key,还是看了好长时间,总结一下自己的体会
下断GetDlgItemTextA运行两次后 进入到程序流程
00401669 .8985 54FFFFFF MOV DWORD PTR SS:, EAX ;注册码位数放入
0040166F .83BD 58FFFFFF>CMP DWORD PTR SS:, 0x0 ;比较用户名是否为空
00401676 .74 09 JE SHORT dumped_.00401681
00401678 .83BD 54FFFFFF>CMP DWORD PTR SS:, 0x0 ;比较注册码是否为空
0040167F .75 05 JNZ SHORT dumped_.00401686
00401681 >E9 0D010000 JMP dumped_.00401793
00401686 >C745 FC 00000>MOV DWORD PTR SS:, 0x0
0040168D .83BD 58FFFFFF>CMP DWORD PTR SS:, 0x4 ;用户名位数是否小于4
00401694 .72 09 JB SHORT dumped_.0040169F
00401696 .83BD 54FFFFFF>CMP DWORD PTR SS:, 0x4 ;注册码位数是否小于4
0040169D .73 12 JNB SHORT dumped_.004016B1
继续往下走到这里
0040171B .E8 40020000 CALL dumped_.00401960 ;处理,F7进入
这里是用户名和注册码的处理过程
00401974|.BF 04000000 MOV EDI, 0x4 ;计算4次
00401979|>0FBE1C0E MOVSX EBX, BYTE PTR DS: ;ebx<----取用户名
0040197D|.8B2A MOV EBP, DWORD PTR DS: ;上次计算的结果
0040197F|.03C3 ADD EAX, EBX ;eax<----用户名相加
00401981|.0FBE19 MOVSX EBX, BYTE PTR DS:
00401984|.03D8 ADD EBX, EAX ;ebx<----用户名加注册码
00401986|.03EB ADD EBP, EBX ;保存结果到ebp中
00401988|.41 INC ECX ;取注册码的下一位
00401989|.4F DEC EDI
0040198A|.892A MOV DWORD PTR DS:, EBP ;保存计算后的结果
0040198C|.^ 75 EB JNZ SHORT dumped_.00401979
0040198E|.8B0D 70854000 MOV ECX, DWORD PTR DS: ;发现这里也是关键地方,可以对0x408570下内存访问
走出这个call之后,来到下面的关键地方(异常处理应该是关键吧,但是我看不懂,还请多指点)
0040172B .F775 D8 DIV DWORD PTR SS: ;这里产生异常才会出现成功,不知道为啥,(上面的相加后会溢出,使EBP-0X28==0,然后就去异常处理了)
下面是关键跳转,调试的时候注意观察ebp-0xb0的值
00401766 > \83BD 50FFFFFF>CMP DWORD PTR SS:, 0x0
算法总结:
假设用户名前四位ASCII码为a,b,c,d注册码前四位ASCII码为e,f,g,h,则它们满足下面的关系( 注册码的第五个符为“#”)
4a+3b+2c+d+e+f+g+h=0x586
(我不会编程,无法写注册机{:cry:})
不正确的地方还请多指教,另外求教异常处理的分析,谢谢您看完了
第一次沙发哈 哦,顶一下 支持,一天的努力 来收下学习一下了 别人的解决方案(我也给了参考的name + key):
严谨的态度值得学习
学习老外的严谨态度
还是看不懂 {:sad:} 高手学习了!!
页:
[1]