-
-
[原创]再来一枚KeygenMe
-
发表于:
2013-5-16 12:51
10017
-
今天找到了这样一个程序,拿到OD里初看觉得太简单了,关键的汇编代码就那么几十行,就当是练手吧。后来分析了一阵子发现里面另有玄机,看似短短的几十行汇编代码,里面却有几个地方,稍不留神,就无法写出完整的注册机。
闲话就不多说了,直接进入主题吧。
这是一个控制台的程序,所用的编程语言我也没见到过,既然无法从API上下断,也无法从入口点下手,那就查找字符串吧。。经过一小步,就找到了这个关键代码处,由于代码比较少,我就详细的解释下,有不对的地方,恳请各位大大多多指教。
00401478 |> /837D E0 09 /CMP DWORD PTR SS:[EBP-20],9 ; 判断是否大于9
0040147C |. |77 26 |JA SHORT Keygen_#.004014A4 ; 大于则跳转
0040147E |. |89E8 |MOV EAX,EBP
00401480 |. |0345 E0 |ADD EAX,DWORD PTR SS:[EBP-20] ; 基址加上偏移
00401483 |. |83E8 08 |SUB EAX,8 ; 减8定位到字符串
00401486 |. |0FB600 |MOVZX EAX,BYTE PTR DS:[EAX] ; 依次取字符串的各个字符
00401489 |. |8845 EF |MOV BYTE PTR SS:[EBP-11],AL ; 将取到的字符存入变量,记为变量a
0040148C |. |0FBE55 EF |MOVSX EDX,BYTE PTR SS:[EBP-11] ; 将变量a的值传给edx
00401490 |. |8D45 F0 |LEA EAX,DWORD PTR SS:[EBP-10] ; eax=ebp-0x10,即让eax指向这个地址
00401493 |. |0110 |ADD DWORD PTR DS:[EAX],EDX ; eax所指向的变量b,加上edx的值
00401495 |. |8B55 F0 |MOV EDX,DWORD PTR SS:[EBP-10] ; 将b的值传给edx
00401498 |. |8D45 E8 |LEA EAX,DWORD PTR SS:[EBP-18] ; eax=ebp-0x18,即让eax指向这个地址
0040149B |. |0110 |ADD DWORD PTR DS:[EAX],EDX ; 将eax指向的变量c,加上edx的值
0040149D |. |8D45 E0 |LEA EAX,DWORD PTR SS:[EBP-20] ; eax=ebp-0x20,即让eax指向变量i
004014A0 |. |FF00 |INC DWORD PTR DS:[EAX] ; 变量i加1,为下一轮循环做准备
004014A2 |.^\EB D4 \JMP SHORT Keygen_#.00401478
[培训]科锐逆向工程师培训第53期2025年7月8日开班!