iawen 发表于 2009-3-21 18:13

oposoft All To MP4 Converter 5.6算法分析

这个软件的注册算法比较简单,就随意的分析了一下.
整体的思路是:将注册码的前16位两两相差,得到两者之差再加上0x41,得到后相应位置的值。

不多了,通过常用的方法我们找到程序判断的关键点,整理分析如下:

004099A0    /$56            push esi
004099A1    |.8B7424 08       mov esi,dword ptr ss:
004099A5    |.57            push edi
004099A6    |.8BFE            mov edi,esi
004099A8    |.83C9 FF         or ecx,FFFFFFFF
004099AB    |.33C0            xor eax,eax
004099AD    |.F2:AE         repne scas byte ptr es:
004099AF    |.F7D1            not ecx
004099B1    |.49            dec ecx                              ;取注册码的长度
004099B2    |.83F9 20         cmp ecx,20                           ;与0x20比较,即注册码的长度应为32位
004099B5    |.74 07         je short All_To_M.004099BE             ;相等则继续下一步,否则退出出错
004099B7    |>5F            pop edi
004099B8    |.33C0            xor eax,eax
004099BA    |.5E            pop esi
004099BB    |.C2 0400         retn 4
004099BE    |>33C9            xor ecx,ecx                            ;设注册码为StrCode
004099C0    |>0FBE5431 01   /movsx edx,byte ptr ds:   ;取strCode
004099C5    |.0FBE0431      |movsx eax,byte ptr ds:       ;取strCode
004099C9    |.2BC2            |sub eax,edx                           ;int n1=strCode-strCode
004099CB    |.99            |cdq                                 ;edx清0
004099CC    |.33C2            |xor eax,edx                           ;n1=n1 ^ 0
004099CE    |.2BC2            |sub eax,edx                           ;n1=n1-0
004099D0    |.0FBE5431 11   |movsx edx,byte ptr ds:    ;取strCode
004099D5    |.83C0 41         |add eax,41                            ;n1+=0x41
004099D8    |.3BD0            |cmp edx,eax
004099DA    |.^ 75 DB         |jnz short All_To_M.004099B7
004099DC    |.41            |inc ecx
004099DD    |.83F9 0F         |cmp ecx,0F
004099E0    |.^ 7C DE         \jl short All_To_M.004099C0
004099E2    |.0FBE4E 0A       movsx ecx,byte ptr ds:          ;strCode
004099E6    |.0FBE46 02       movsx eax,byte ptr ds:          ;strCode
004099EA    |.2BC1            sub eax,ecx                            ;n1=strCode-strCode
004099EC    |.33C9            xor ecx,ecx
004099EE    |.99            cdq
004099EF    |.33C2            xor eax,edx
004099F1    |.5F            pop edi
004099F2    |.2BC2            sub eax,edx
004099F4    |.0FBE56 10       movsx edx,byte ptr ds:         ;strCode
004099F8    |.83C0 41         add eax,41                           ;n1+=0X41
004099FB    |.5E            pop esi
004099FC    |.3BD0            cmp edx,eax
004099FE    |.0F94C1          sete cl
00409A01    |.8BC1            mov eax,ecx
00409A03    \.C2 0400         retn 4然后自己用C++写了一个简单的KeyGen:
#include<iostream>   
using namespace std;   

int main(){   
char strCode="0123456789ABCDEF0123456789ABCDEF";   
   
int i=0;   
int tmp=0;   
for(;i<0xF;++i){   
    if(strCode>strCode)   
      tmp=strCode-strCode;   
    else
      tmp=strCode-strCode;   
    strCode=tmp+0x41;   
}   
   
if(strCode>strCode)   
      tmp=strCode-strCode;   
    else
      tmp=strCode-strCode;   
    strCode=tmp+0x41;   
      
    cout<<strCode<<endl;   
   
return 0;   
}

链接:http://www.iawen.com/read.php/233.htm

wgz001 发表于 2009-3-21 20:03

学习加膜拜   

Hmily 发表于 2009-3-22 21:42

老鸭发广告....

热火朝天 发表于 2009-3-23 00:54

学习了,很好
页: [1]
查看完整版本: oposoft All To MP4 Converter 5.6算法分析