wgz001 发表于 2014-5-25 20:39:42

我一天的体会----一个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:})

不正确的地方还请多指教,另外求教异常处理的分析,谢谢您看完了



lixy8888 发表于 2014-5-25 20:52:51

第一次沙发哈

lgjxj 发表于 2014-5-25 21:33:50

哦,顶一下

cjteam 发表于 2014-5-25 22:59:28

支持,一天的努力

cfc1680 发表于 2014-5-26 08:19:57

来收下学习一下了

zaas 发表于 2014-5-26 10:04:11

别人的解决方案(我也给了参考的name + key):

严谨的态度值得学习

wgz001 发表于 2014-5-26 10:22:32

学习老外的严谨态度  
还是看不懂 {:sad:}

loveliuhao323 发表于 2014-5-27 10:13:24

高手学习了!!
页: [1]
查看完整版本: 我一天的体会----一个keygenme的体验---猥琐