工具: ollydbg<我喜欢边听音乐边...^_*,用trw也可以听,不过只能听CD了:(...> 目的: 得到安装序列号!!!^_^ 软件介绍: 还原精灵是南京远志公司推出的新型纯软件版硬盘还原工具。
它可以保护您的硬盘免受病毒侵害,重新恢复删除或覆盖的文件,彻底清除安装失败的程序,并避免由于系统死机带来的数据丢失等问题。只需
简单的几步安装,即可安全地保护您的硬盘数据。还原精灵的安装不会影响硬盘分区和操作系统。轻松安装、动态保护、实时瞬间恢复。
还原精灵采用新的内核技术,安装时由软件动态分配保留空间,无须预先设置其位置和大小,从而能够最大限度的利用硬盘空间。
前言:
来段废话,DiKeN同志说让我以iPB成员的身份写一篇文章,我找不到变态的题材(关键是太变态的偶不是搞不定,就是没法写--
,嘿嘿,没办法,一拖再拖...),这次我朋友的机房要安装还原精灵,不过同一网络不能用一个序列号,所以让我写个KeyGen,偶一看,哇.....代码够变态够
恶心,所以就有了此文,在这里感谢这两年培育我茁壮成长的各位领导(DiKeN,peterchen...)还有各位FCG、iPB和OCN的兄弟们,特别是upfeed和
黑哥,感谢当初百忙之中和我聊天,嘿嘿,NOW,LET'S GO...
这儿是算法用到的数据:
convert_table[]={ 0x18 , 0x23 , 0x22 , 0x25 , 0x05 , 0x07 , 0x19 ,0x08 , 0x11 , 0x1E , 0x0D , 0x31 , 0x2C , 0x1B , 0x09 ,0x20 , 0x24 , 0x35 , 0x02 , 0x2F , 0x12 , 0x2E , 0x1F , 0x0B , 0x17 , 0x0F , 0x2B , 0x03 , 0x0E , 0x0A , 0x1D , 0x34 , 0x0C , 0x00 , 0x29 ,0x2A , 0x2D , 0x01 , 0x04 , 0x1A , 0x1C , 0x33 , 0x32 , 0x30 , 0x15 , 0x06 , 0x14 , 0x27 , 0x16 , 0x36 , 0x13 , 0x21 , 0x10 , 0x28 , 0x26 , 0x37 }; reverse_table[]={ '0x21' , '0x25' , '0x12' , '0x1B' , '0x26' , '0x04' , '0x2D' , '0x05', '0x07' , '0x0E' , '0x1D' , '0x17' , '0x20' , '0x0A' , '0x1C' , '0x19', '0x34' , '0x08' , '0x14' , '0x32' , '0x2E' , '0x2C' , '0x30' , '0x18', '0x00' , '0x06' , '0x27' , '0x0D' , '0x28' , '0x1E' , '0x09' , '0x16', '0x0F' , '0x33' , '0x02' , '0x01' , '0x10' , '0x03' , '0x36' , '0x2F', '0x35' , '0x22' , '0x23' , '0x1A' , '0x0C' , '0x24' , '0x15' , '0x13', '0x2B' , '0x0B' , '0x2A' , '0x29' , '0x1F' , '0x11' , '0x31' , '0x37' }; BASE_data[]={ '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'J' , 'K' , 'L' , 'M' , 'N' , 'P' , 'Q' , 'R' , 'S' , 'T' , 'U' , 'V' , 'W' , 'X' , 'Y' , 'Z' };
主要算法从这里开始: (1) 取序列号的后12个字母,查表BASE_data,得到12个字节变量,存放入ESP+14开始的缓冲区中,结果设为TEMP_L3W[12];
0040F258 /MOV DL,BYTE PTR DS:[ESI+EDI+14] 0040F25C MOV ECX,ESI 0040F25E PUSH EDX 0040F25F CALL SETUP.0040FB70 ; find the char in the table 0040F264 MOV BYTE PTR SS:[ESP+EDI+14],AL 0040F268 INC EDI 0040F269 CMP EDI,0C 0040F26C \JL SHORT SETUP.0040F258
(2) 用BASE32处理得到的12字节变量TEMP_L3W[]生成8 DWORD的数组,设为BASE_OUT_L3W;
我自己起的BASE32,天知道应该叫啥,主要规则是上面查表得到的12字节变量每个有5位有效位,然后5位5位的连起来,组成12*5/8=7个
DWORD变量,然后拿第12个变量直接赋给第8个DWORD变量;
0040F26E MOV AL,BYTE PTR SS:[ESP+15] ; BASE32 routine 0040F272 MOV DL,BYTE PTR SS:[ESP+14] ;ESP+14开始的缓冲区中存放着查表得到的12字节变量
上一篇:Win32ASM经验点滴
下一篇:驱动精灵(WinDriver Ghost) V2.02 个人版 上
|