ItsPersonal 2.9m算法分析与注册机源码
软件名:ItsPersonal 2.9m(见附件)功能:记录个人日记的软件,具有密码保护、数据加密、拼写检查、搜索、加入图片、为日记条目加入彩色图标、加入符号、输出为RTF格式的文件、打印全部或部分日记等特性。
查壳:无
语言:Borland Delphi 2.0
===================================================
OD载入程序后,F9运行
然后输入试练码:
iawen
0123456789
弹出出错对话框,不关闭,F12暂停,然后再打开堆栈调用窗口,找到适当的返回地址
向上找到段首下断:
004AA2B0/.55 push ebp
004AA2B1|.8BEC mov ebp, esp
004AA2B3|.33C9 xor ecx, ecx
004AA2B5|.51 push ecx
F8单步:
004AA2E5|.8D55 EC lea edx, dword ptr
004AA2E8|.8B45 F4 mov eax, dword ptr
004AA2EB|.8B80 AC010000 mov eax, dword ptr
004AA2F1|.E8 FEBCF6FF call 00415FF4 ;取用户名
004AA2F6|.8B45 EC mov eax, dword ptr
004AA2F9|.8D55 FC lea edx, dword ptr
004AA2FC|.E8 B3CEFFFF call 004A71B4
004AA301|.8B45 FC mov eax, dword ptr
004AA304|.E8 A395F5FF call 004038AC ;取用户名长度
004AA309|.85C0 test eax, eax ;测试用户名是否为空
004AA30B|.0F84 56010000 je 004AA467
004AA311|.8D55 F8 lea edx, dword ptr
004AA314|.8B45 F4 mov eax, dword ptr
004AA317|.8B80 B0010000 mov eax, dword ptr
004AA31D|.E8 D2BCF6FF call 00415FF4 ;取假码
004AA322|.8B45 F4 mov eax, dword ptr
004AA325|.8B88 D0010000 mov ecx, dword ptr
004AA32B|.8B55 F8 mov edx, dword ptr
004AA32E|.8B45 FC mov eax, dword ptr
004AA331|.E8 5AF0FFFF call 004A9390 ;关键CALL
004AA336|.84C0 test al, al
004AA338|.74 12 je short 004AA34C ;一跳就错,
跟进call 004A9390
--------------------------------------
………………
004A941C|.B9 20000000 mov ecx, 20
004A9421|.8B55 F4 mov edx, dword ptr
004A9424|.8B45 FC mov eax, dword ptr
004A9427|.E8 88FEFFFF call 004A92B4 ;生成真正的注册码???
004A942C|.8D45 F0 lea eax, dword ptr
注意堆栈,出现可疑字符:
0012F5E4 012662DCASCII "0123456789"
0012F5E8 01261814ASCII "iawen"
0012F5EC 01266308ASCII "RKS-1654279"
跟进call 004A92B4
------------------------------------
………………
004A92FD|.8B45 FC mov eax, dword ptr
004A9300|.E8 E3D3F5FF call 004066E8 ;将用户名转为大写
…………
004A9313|.B9 01000000 mov ecx, 1
004A9318|>8B45 F4 /mov eax, dword ptr
004A931B|.8A4408 FF |mov al, byte ptr ;依次取用户名字符的ASCII码到AL
004A931F|.3C 20 |cmp al, 20 ;等于0x20即空格时,跳过进行下一个
004A9321|.74 0C |je short 004A932F
004A9323|.25 FF000000 |and eax, 0FF ;将EAX高位清0
004A9328|.0FAF45 F0 |imul eax, dword ptr ;乘以0x11B4(4532)或0x115F(4447)
004A932C|.48 |dec eax ;将乘积减去1
004A932D|.03F0 |add esi, eax ;将得到的结果累加到ESI
004A932F|>41 |inc ecx
004A9330|.4A |dec edx
004A9331|.^ 75 E5 \jnz short 004A9318 ;下一个
004A9333|>8D55 EC lea edx, dword ptr
004A9336|.8BC6 mov eax, esi
004A9338|.E8 FBD6F5FF call 00406A38 ;将得到的结果转专10进制表示的ASCII码
004A933D|.8B4D EC mov ecx, dword ptr
004A9340|.8B45 08 mov eax, dword ptr
004A9343|.BA 88934A00 mov edx, 004A9388 ;ASCII "RKS-"
004A9348|.E8 ABA5F5FF call 004038F8 ;将固定字符拼接到头部
这就是算法的主体了,呵呵,用C来表示如下:
int len=strlen(strName);
int sum=0;
for(int i=0;i<len;i++){
if(strName>='a' && strName<='z')
strName-=32;
int tmp=strName*num1-1;
sum+=tmp;
}
sprintf(strCode,"RKS-%d",sum);
>>>>>>>>>返回
继续单步:
004A9456|.8B55 E4 mov edx, dword ptr
004A9459|.8B45 F0 mov eax, dword ptr
004A945C|.E8 5BA5F5FF call 004039BC
观察寄存器:
EAX 01266320 ASCII "RKS-1685899"
ECX 00000000
EDX 01266350 ASCII "0123456789"
====================>可以做内存注册机了!
如果细心,应该会发现这个软件是一个用户名对应两个注册码
调用注册码生成函数时,其区别在于对ECX所传递的值:0x10<--------->0x20
而表现在算法上就是:
对用户名每个字符处理时所乘的固定值不同:
0x11B4(4532)<================>0x115F(4447)
eax=00000049
明码比较:
而且注册码就保存在当前目录的IP.INI文件中
程序运行界面:
附件的内容很完整,含编译好的算法注册机及源码,还有内存注册机,呵呵: 学习了,我挺你,占个沙发 下载学习,谢谢! 很详细,学习一下!:victory: 原帖由 iawen 于 2007-12-31 00:19 发表 https://www.chinapyg.com/images/common/back.gif
软件名:ItsPersonal 2.9m(见附件)
功能:记录个人日记的软件,具有密码保护、数据加密、拼写检查、搜索、加入图片、为日记条目加入彩色图标、加入符号、输出为RTF格式的文件、打印全部或部分日记等特性。
查壳: ...
呵呵,真的好全,这才是算法菜鸟的真正要的东西!再次感谢,加分! 谢谢,学习一下下。。。 三刻又,我也来学习一下下。楼主的破文写得相当好。是菜鸟的一大福荫。
页:
[1]