浪漫情书3.11算法分析
【破文标题】浪漫情书3.11算法分析
【破文作者】k99992002
【破解平台】winxp
【软件名称】浪漫情书3.11
【软件大小】884KB
【下载地址】http://down.52pk.net/soft/571.htm
【破解工具】PEiD 0.93中文版、OllyDbgV1.10
【保护方式】机器码+用户名+序列号
【破解声明】我乃小菜鸟一只,偶得一点心得,愿与大家分享:)只是学习没其他目的!
【破解步骤】
先用PEiD 0.93侦测,发现为ASPack 1.08.04 -> Alexey Solodovnikov 用脱壳机(Qunpack)可以简单搞定!
这里就不弄了,我已经脱好了
运行脱好的文件
运行有错误,程序有自校验
那就先解决程序自校验,OD载入后,查找字符串,找到文件读写错误,双击来到代码窗口
004974B5 . E8 EAB2F6FF CALL LoveLett.004027A4
004974BA . 8D85 B4FEFFFF LEA EAX,DWORD PTR SS:[EBP-14C]
004974C0 . E8 77E0F6FF CALL LoveLett.0040553C
004974C5 . E8 DAB2F6FF CALL LoveLett.004027A4
004974CA 3D D0050500 CMP EAX,505D0 比较
004974CF 7F 17 JG SHORT LoveLett.004974E8 如果文件大于这个数就说明出错了,把上面一行改为1M就可了(因为脱壳后的文件,有757KB)。
004974D1 . 8D85 B4FEFFFF LEA EAX,DWORD PTR SS:[EBP-14C]
004974D7 . E8 60E0F6FF CALL LoveLett.0040553C
004974DC . E8 C3B2F6FF CALL LoveLett.004027A4
004974E1 . 3D 18FA0400 CMP EAX,4FA18 比较
004974E6 7D 3D JGE SHORT LoveLett.00497525 如果文件小于这个数也出错。
004974E8 > 8D85 B0FEFFFF LEA EAX,DWORD PTR SS:[EBP-150]
我们来修改
修改后保存
再来运行看下
可以运行了
现在在注册
再用OD打开修改后的文件,
查找字符串 用户名和注册码错误
双击来到代码窗口
0048901C . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0048901F . 8B80 E0020000 MOV EAX,DWORD PTR DS:[EAX+2E0]
00489025 . E8 065CFAFF CALL LoveLett.0042EC30
0048902A . 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
0048902D . 8D55 EC LEA EDX,DWORD PTR SS:[EBP-14]
00489030 . E8 3BFEFFFF CALL LoveLett.00488E70 算法CALL 在此下断,运行!程序断下,接着F7进
00489035 . 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
00489038 . 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] 现在我们来看看它的算法
0048903B . E8 60ADF7FF CALL LoveLett.00403DA0 真假码比较 我们先在这里下断看看,EDX显示的是我们的假码,EAX就是真码
00489040 . 0F85 56010000 JNZ LoveLett.0048919C 关键跳转 不等就OVER
00489046 . B8 34924800 MOV EAX,LoveLett.00489234
00488E9E |. A1 E4784A00 MOV EAX,DWORD PTR DS:[4A78E4]
00488EA3 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
00488EA5 |. E8 82D90000 CALL LoveLett.0049682C
00488EAA |. 8B55 F8 MOV EDX,[LOCAL.2] ; 机器码
00488EAD |. 8D45 FC LEA EAX,[LOCAL.1]
00488EB0 |. 8B4D FC MOV ECX,[LOCAL.1] ; 你输入的用户名:jk.x168.com
00488EB3 |. E8 24AEF7FF CALL LoveLett.00403CDC ; 这个CALL的作用,将两者合为499024jk.x168.com 把机器码和用户名合为一个字符串
00488EB8 |. 8B45 FC MOV EAX,[LOCAL.1]
00488EBB |. E8 D0ADF7FF CALL LoveLett.00403C90 ; 计算499024jk.x168.com的长度17
00488EC0 |. 8BD0 MOV EDX,EAX
00488EC2 |. 85D2 TEST EDX,EDX
00488EC4 |. 7C 17 JL SHORT LoveLett.00488EDD
00488EC6 |. 42 INC EDX
00488EC7 |. 33C0 XOR EAX,EAX
00488EC9 |> 8B4D FC /MOV ECX,[LOCAL.1]
00488ECC |. 0FB64C01 FF |MOVZX ECX,BYTE PTR DS:[ECX+EAX-1] ; 依次取出上面那个合串的字符的ASC值
00488ED1 |. 8D78 03 |LEA EDI,DWORD PTR DS:[EAX+3] ; EAX也是依次递增+3
00488ED4 |. 0FAFCF |IMUL ECX,EDI ; ASC值与EDI相乘
00488ED7 |. 03D9 |ADD EBX,ECX ; 将相乘的结果累加
00488ED9 |. 40 |INC EAX
00488EDA |. 4A |DEC EDX
00488EDB |.^ 75 EC \JNZ SHORT LoveLett.00488EC9 这里循环,你的长度是多少就执行多少次
00488EDD |> 8BC3 MOV EAX,EBX ; 最后的总和为3D11
00488EDF |. 99 CDQ
00488EE0 |. 33C2 XOR EAX,EDX
00488EE2 |. 2BC2 SUB EAX,EDX
00488EE4 |. 69C0 C9430000 IMUL EAX,EAX,43C9 ; 3D11与系统给定值43C9相乘,EAX=102B6559
00488EEA |. 05 BBEF9505 ADD EAX,595EFBB ; 在此和595EFBB相加=15C15514(将此值转为10进制,就是我们所要的注册码了364991764
00488EEF |. 8BD6 MOV EDX,ESI
00488EF1 |. E8 0AF0F7FF CALL LoveLett.00407F00
算法分析:
a、将机器码和用户名合为一个字符串,依次取出每个字符的ASC码值乘以(它所在的位置+3),最后再把这些值加起来。
b、相加得到的总和,再乘以43C9,再加上595EFBB,最后得出的结果转为10进制,就是注册码了。
[2023春季班]2023,新的征程,脱壳机更新、iOS/eBPF、赠送云手机套装!一块裸板虚拟化五个容器云手机!3月25日起同时上调价格并赠送新设备!