- UID
- 59317
注册时间2009-1-28
阅读权限40
最后登录1970-1-1
独步武林
TA的每日心情 | 无聊 2024-1-15 22:57 |
---|
签到天数: 3 天 [LV.2]偶尔看看I
|
某软件算法分析:
在我知道大概的注册码规则条件下,苦苦追了一天。(菜就一个字)
国产XX行业软件,由于一些特殊原因,不给出名字了(前些天开始学汇编,当时的目的就是为了XX这个软件)。分析一下算法,作为自己学习汇编的作业—顺便想想怎么逆推,似乎逆推并不容易啊。。。。
【前情提要】
把假码字符串转为数据,地址储存在edi。
【戏肉】
06**F0 55 push ebp
06**F1 8B6C24 10 mov ebp,dword ptr ss:[esp+10];假码长度
06**F5 85ED test ebp,ebp
06**F7 7E 2F jle short Star.06DAFB28;长度为0跳走
06**F9 8A4C24 0C mov cl,byte ptr ss:[esp+C];把地址的地位作为运算用到的数,应该是根据假码的长度来的
06**FD 56 push esi;保存假码长度
06**FE 8B7424 18 mov esi,dword ptr ss:[esp+18];算出的机器码保存于此
06DAFB02 57 push edi;保存假码的地址
06DAFB03 8B7C24 10 mov edi,dword ptr ss:[esp+10]
06DAFB07 2BFE sub edi,esi;假码算出的机器码在此前1024字节存放
06DAFB09 8DA424 00000000 lea esp,dword ptr ss:[esp]
06DAFB10 8A0437 mov al,byte ptr ds:[edi+esi];读假码的前两个字符
06DAFB13 8AD0 mov dl,al;放入DL
06DAFB15 32D1 xor dl,cl;跟CLxor,【此为机器码的第一个字符】
06DAFB17 8AC8 mov cl,al;前两个字符放入CL
06DAFB19 C0E1 05 shl cl,5;前移5位
06DAFB1C D0E8 shr al,1;假码前两个字符后移1位
06DAFB1E 02C8 add cl,al和CL相加
06DAFB20 8816 mov byte ptr ds:[esi],dl
06DAFB22 46 inc esi;the Next
06DAFB23 4D dec ebp,计数器减一
06DAFB24 ^ 75 EA jnz short Star.06DAFB10,计数器为0跳出循环
06DAFB26 5F pop edi
06DAFB27 5E pop esi
06DAFB28 5D pop ebp
06DAFB29 C3 retn
【后续】
假码算出的机器码与用硬盘分区表算出的真码比较,真则注册,假。。。
[ 本帖最后由 zaas 于 2009-8-22 21:10 编辑 ] |
评分
-
查看全部评分
|