KeygenMe一个,顺便汇编的算法分析求教
本帖最后由 foxjinlin 于 2011-3-28 08:21 编辑小菜我最近在学易语言和汇编,用易语言写了个也很菜的KeygenMe,VC编译器静态编译,加了个UPX 2.0的壳,用来减少程序体积,呵呵,注册成功后里面有个MP3,这个比较耐听的哦。
本来这玩意是写给自己学汇编语言用的,哪知道放到OD里打开一看,小菜我就傻眼了,程序是自己写的,爆破小菜我是也勉强能做,可我自己来分析汇编算法却无从下手了,现在我的汇编学得是半生不熟,痛苦啊。
所以向论坛上的大侠们讨个该程序的汇编算法分析,帮小菜我一把,先谢过了(源码等算法分析出来后,我再传到论坛上来,易语言里看这个算法其实很简单,汇编里比较麻烦,代码比较凌乱)。 花了几分钟反了一下,你参考下吧,没细看,,应该差不多就是这样了.... BTW:那个音乐听着蛮蛋疼的说~~
.
.
.
.
省略若干
004012D9fild dword ptr ; 第一位用户名的ASCII = A
004012DCfstp qword ptr
004012DFfld qword ptr
004012E2fsub qword ptr ; A = ascii - 100
004012E8fstp qword ptr
004012EBpush 80000601
004012F0push dword ptr
004012F3push dword ptr
004012F6push 1
004012FBmov ebx, 00401E90
00401300call 00401DE9
00401305add esp, 10
.
.
.
.
.省略若干
0040139Fadd esp, 4
004013A2pop eax
004013A3mov dword ptr , eax
004013A6push 80000004
004013ABpush 0
004013ADmov eax, dword ptr ; //机器码,,,,全局变量,汗~
004013B2test eax, eax
004013B4jnz short 004013BB
004013B6mov eax, 00481BA1
004013BBpush eax
004013BCpush 1
004013C1mov ebx, 00402120
004013C6call 00401DE9
004013CBadd esp, 10
004013CEmov dword ptr , eax
004013D1mov dword ptr , edx
004013D4push 80000004
004013D9push 0
004013DBmov eax, dword ptr
004013DEtest eax, eax
004013E0jnz short 004013E7
004013E2mov eax, 00481BA1
004013E7push eax
004013E8push 1
004013EDmov ebx, 00402120
004013F2call 00401DE9
004013F7add esp, 10
004013FAmov dword ptr , eax
004013FDmov dword ptr , edx
00401400fld qword ptr ; A
00401403fmul qword ptr ; A × 10000000 = B
00401409fstp qword ptr
0040140Cfld qword ptr ; 机器码
0040140Ffsub qword ptr ; 机器码 - B = C
00401412fstp qword ptr
00401415fld qword ptr
00401418fadd qword ptr ; C + 2011 = SN
0040141Efstp qword ptr
00401421push 80000601
00401426push dword ptr
00401429push dword ptr
0040142Cpush 1
00401431mov ebx, 00402330
00401436call 00401DE9
0040143Badd esp, 10
.
.
.
.
.省略若干
004014ABmov dword ptr , eax
004014AEmov dword ptr , edx
004014B1fld qword ptr
//=====================================
004014B4fsub qword ptr ; 减法运算,传说中的关键比较,在易语言中是下面这个样子,哈~~
004014B7ftst
004014B9fstsw ax
004014BBtest ah, 1
004014BEje short 004014C2
004014C0fchs
004014C2fcomp qword ptr
004014C8fstsw ax
004014CAtest ah, 41
004014CDjnz 0040150D
//=====================================
004014D3push 0
004014D5push 0
004014D7push 0
004014D9push 80000301
004014DEpush 0
004014E0push 0
004014E5push 80000004
004014EApush 0
004014ECpush 00481BD9 ; 注册码不对,请重试!
004014F1push 3
004014F6mov ebx, 00402560
004014FBcall 00401DE9
00401500add esp, 28
00401503jmp 00401591
00401508jmp 0040153D
0040150Dpush 0
0040150Fpush 0
00401511push 0
00401513push 80000301
00401518push 0
0040151Apush 0
0040151Fpush 80000004
00401524push 0
00401526push 00481BEE ; 恭喜你,注册成功,放个小段子来奖励你一下!
0040152Bpush 3
00401530mov ebx, 00402560
00401535call 00401DE9
//注册机:
{-------------------------------------------------------------------------------
过程名: GetRegCode
作用: 计算注册码
作者: piaoyun/P.Y.G
日期: 2010.12.20
参数: sMachineCode,sUserName: string
返回值: string
特别说明:无
-------------------------------------------------------------------------------}
function GetRegCode(sMachineCode,sUserName: string):string;
var
cUserNameIndex_1: Char;
bAsc: Byte;
dwSum: DWORD;
begin
cUserNameIndex_1 := sUserName;
bAsc := Ord(cUserNameIndex_1) - 100;
dwSum := StrToInt(sMachineCode)- bAsc * 10000000;;
dwSum := dwSum + 2011;
Result := IntToStr(dwSum);
end; 本帖最后由 foxjinlin 于 2011-3-28 08:23 编辑
飘老大太强悍了,分析得不差毫厘啊。
多谢,多谢,呵呵。
音乐是蛋疼了些哦。
放出源码。
我的网速太慢,去掉了源码中的音乐换成了一个txt文件。 老飘惊现,哈哈,楼上兄弟厉害 /:013强大的对话 理解了N大的话了,如果基础没打好,学到一定程度会有瓶颈! 绝好的钻研精神!支持 新人报道,大家快乐 学习之。。
页:
[1]