ABsee v1.0 算法分析
本帖最后由 GeekCat 于 2016-1-9 17:05 编辑【文章标题】: ABsee v1.0算法分析【作者邮箱】: [email protected]
【作者主页】:
【软件名称】: ABsee v1.0【软件大小】: 2.21 MB (2,318,848 字节)
【加壳方式】: ASPack 2.12 -> Alexey Solodovnikov
【保护方式】: 注册码
【编写语言】: 没脱壳不知道
【使用工具】: OD、PEID
【操作平台】: XP SP3【下载地址】: http://www.crsky.com/soft/8721.html【破解声明】: 破解在于交流思路和过程,结果并不重要,请不要用于非法用途;
【软件介绍】:ABsee是一款照片编辑和浏览工具支持bmp, jpg, png, gif, tif, pcx, ico, cur, wmf, jp2, crw和dwg格式的文件,可以使用多种浏览模式,可以修改图片的大小,RGB,对比度等各种参数。--------------------------------------------------------------------------------------------------------------------------------1、字符串、F12暂停、API都能快速定位到关键点2、代码1如下:
005FAA2F|.58 POP EAX
005FAA30|.59 POP ECX
005FAA31|.E8 665FFDFF CALL ABSeeVie.005D099C ;关键CALL
005FAA36|.84C0 TEST AL, AL
005FAA38|.74 24 JE SHORT ABSeeVie.005FAA5E ;关键跳转
005FAA3A|.C783 4C020000>MOV DWORD PTR DS:, 0x1
005FAA44|.6A 40 PUSH 0x40
005FAA46|.B9 F4AA5F00 MOV ECX, ABSeeVie.005FAAF4 ;Information
005FAA4B|.BA 00AB5F00 MOV EDX, ABSeeVie.005FAB00 ;Register successful!
005FAA50|.A1 FCA96100 MOV EAX, DWORD PTR DS: ;艋a
005FAA55|.8B00 MOV EAX, DWORD PTR DS:
005FAA57|.E8 90CCE8FF CALL ABSeeVie.004876EC
005FAA5C|.EB 32 JMP SHORT ABSeeVie.005FAA90
005FAA5E|>6A 10 PUSH 0x10
005FAA60|.B9 18AB5F00 MOV ECX, ABSeeVie.005FAB18 ;Error
005FAA65|.BA 20AB5F00 MOV EDX, ABSeeVie.005FAB20 ;Register Error!
005FAA6A|.A1 FCA96100 MOV EAX, DWORD PTR DS: ;艋a
005FAA6F|.8B00 MOV EAX, DWORD PTR DS:
005FAA71|.E8 76CCE8FF CALL ABSeeVie.004876EC
005FAA76|.EB 18 JMP SHORT ABSeeVie.005FAA90
005FAA78|>6A 30 PUSH 0x30
005FAA7A|.B9 30AB5F00 MOV ECX, ABSeeVie.005FAB30 ;Warning
005FAA7F|.BA 38AB5F00 MOV EDX, ABSeeVie.005FAB38 ;Invalid Serial number!
005FAA84|.A1 FCA96100 MOV EAX, DWORD PTR DS: ;
<P>005CE81E|.64:8920 MOV DWORD PTR FS:, ESP
005CE821|.55 PUSH EBP
005CE822|.E8 2DFFFFFF CALL ABSeeVie.005CE754 ;第四段4位不能完全相同
005CE827|.59 POP ECX
005CE828|.8BD8 MOV EBX, EAX
005CE82A|.84DB TEST BL, BL
005CE82C|.74 57 JE SHORT ABSeeVie.005CE885
005CE82E|.FF75 FC PUSH DWORD PTR SS: ;(ASCII "1QWE")
005CE831|.FF75 F8 PUSH DWORD PTR SS: ;(ASCII "2RTY")
005CE834|.FF75 F4 PUSH DWORD PTR SS: ;(ASCII "3UIO")
005CE837|.8D45 F0 LEA EAX, DWORD PTR SS:
005CE83A|.BA 03000000 MOV EDX, 0x3
005CE83F|.E8 9462E3FF CALL ABSeeVie.00404AD8 ;前三段注册码拼接
005CE844|.8D45 EC LEA EAX, DWORD PTR SS:
005CE847|.50 PUSH EAX
005CE848|.8D45 E8 LEA EAX, DWORD PTR SS:
005CE84B|.B9 C0E85C00 MOV ECX, ABSeeVie.005CE8C0 ;Z
005CE850|.8B55 08 MOV EDX, DWORD PTR SS: ;(ASCII "QWER")
005CE853|.E8 0C62E3FF CALL ABSeeVie.00404A64 </P>
<P>005CE858|.8B55 E8 MOV EDX, DWORD PTR SS: ;(ASCII "QWERZ")
005CE85B|.33C9 XOR ECX, ECX
005CE85D|.8B45 F0 MOV EAX, DWORD PTR SS: ;(ASCII "1QWE2RTY3UIO")
005CE860|.E8 73FCFFFF CALL ABSeeVie.005CE4D8 ;算法CALL
005CE865|.8B45 EC MOV EAX, DWORD PTR SS: ;注意ebp-0x14
005CE868|.50 PUSH EAX
005CE869|.8D45 E4 LEA EAX, DWORD PTR SS:
005CE86C|.B9 CCE85C00 MOV ECX, ABSeeVie.005CE8CC ;A
005CE871|.8B55 08 MOV EDX, DWORD PTR SS: ;(ASCII "QWER")
005CE874|.E8 EB61E3FF CALL ABSeeVie.00404A64 ;拼接
005CE879|.8B55 E4 MOV EDX, DWORD PTR SS: ;(ASCII "QWERA")
005CE87C|.58 POP EAX
005CE87D|.E8 E262E3FF CALL ABSeeVie.00404B64 ;比较CALL
005CE882|.0F94C3 SETE BL
005CE885|>33C0 XOR EAX, EAX
005CE887|.5A POP EDX
005CE888|.59 POP ECX</P>
<P> </P>4、算法段代码 如下:
<P>005CE600 .50 PUSH EAX
005CE601 .B9 02000000 MOV ECX, 0x2
005CE606 .BA 01000000 MOV EDX, 0x1
005CE60B .8B45 FC MOV EAX, DWORD PTR SS: ;(ASCII "123425673890")
005CE60E .E8 6566E3FF CALL ABSeeVie.00404C78 ;取前两位
005CE613 .8B4D D0 MOV ECX, DWORD PTR SS: ;(ASCII "12")
005CE616 .8D45 D4 LEA EAX, DWORD PTR SS:
005CE619 .BA 50E75C00 MOV EDX, ABSeeVie.005CE750 ;$
005CE61E .E8 4164E3FF CALL ABSeeVie.00404A64 ;拼接 $12
005CE623 .8B45 D4 MOV EAX, DWORD PTR SS: ;$12
005CE626 .E8 A9ACE3FF CALL ABSeeVie.004092D4 ;检测是否为数字,是数字就转化为对应数值
005CE62B .8BF8 MOV EDI, EAX
005CE62D .C745 EC 03000>MOV DWORD PTR SS:, 0x3
005CE634 >8D45 C8 LEA EAX, DWORD PTR SS:
005CE637 .50 PUSH EAX
005CE638 .B9 02000000 MOV ECX, 0x2
005CE63D .8B55 EC MOV EDX, DWORD PTR SS:
005CE640 .8B45 FC MOV EAX, DWORD PTR SS: ;(ASCII "123425673890")
005CE643 .E8 3066E3FF CALL ABSeeVie.00404C78 ;一次取两位从第3位开始取
005CE648 .8B4D C8 MOV ECX, DWORD PTR SS: ;34、25、67、38、90
005CE64B .8D45 CC LEA EAX, DWORD PTR SS:
005CE64E .BA 50E75C00 MOV EDX, ABSeeVie.005CE750 ;$
005CE653 .E8 0C64E3FF CALL ABSeeVie.00404A64 ;拼接
005CE658 .8B45 CC MOV EAX, DWORD PTR SS:
005CE65B .E8 74ACE3FF CALL ABSeeVie.004092D4 ;检测是否为数字,是数字就转化为对应数值
005CE660 .8BD8 MOV EBX, EAX
005CE662 .3B75 F4 CMP ESI, DWORD PTR SS:
005CE665 .7D 03 JGE SHORT ABSeeVie.005CE66A
005CE667 .46 INC ESI
005CE668 .EB 05 JMP SHORT ABSeeVie.005CE66F
005CE66A >BE 01000000 MOV ESI, 0x1
005CE66F >8B45 F8 MOV EAX, DWORD PTR SS: ;(ASCII "QWERZ")
005CE672 .0FB64430 FF MOVZX EAX, BYTE PTR DS: ;每次取1位
005CE677 .33C3 XOR EAX, EBX ;每次取的2位数字 xor 第四段取得的1位字符AS值=65 72
005CE679 .8945 E8 MOV DWORD PTR SS:, EAX ;65
005CE67C .3B7D E8 CMP EDI, DWORD PTR SS: ;xor结果跟注册码第一段的前2位(以后每次取上次所取的后面2位)比较 大于就直接减小于就+FF再减
005CE67F .7C 0F JL SHORT ABSeeVie.005CE690 ;第一次是1、2位,第二次则为3、4位向后推
005CE681 .8B45 E8 MOV EAX, DWORD PTR SS:
005CE684 .05 FF000000 ADD EAX, 0xFF
005CE689 .2BC7 SUB EAX, EDI
005CE68B .8945 E8 MOV DWORD PTR SS:, EAX
005CE68E .EB 03 JMP SHORT ABSeeVie.005CE693
005CE690 >297D E8 SUB DWORD PTR SS:, EDI ;65-12=53
005CE693 >8D45 C4 LEA EAX, DWORD PTR SS:
005CE696 .8B55 E8 MOV EDX, DWORD PTR SS: ;53
005CE699 .E8 A262E3FF CALL ABSeeVie.00404940 ;AS值转字符 53->S 3E->">" FC-> 6A
005CE69E .8B55 C4 MOV EDX, DWORD PTR SS: ;(UNICODE "S")
005CE6A1 .8D45 F0 LEA EAX, DWORD PTR SS:
005CE6A4 .E8 7763E3FF CALL ABSeeVie.00404A20
005CE6A9 .8BFB MOV EDI, EBX
005CE6AB .8345 EC 02 ADD DWORD PTR SS:, 0x2
005CE6AF .8B45 FC MOV EAX, DWORD PTR SS: ;(ASCII "123425673890")
005CE6B2 .E8 6163E3FF CALL ABSeeVie.00404A18 ;计算字符串长度
005CE6B7 .3B45 EC CMP EAX, DWORD PTR SS:
005CE6BA .^ 0F8F 74FFFFFF JG ABSeeVie.005CE634
005CE6C0 .33C0 XOR EAX, EAX</P>
<P> </P>
---------------------------------------------------------------------------------------------------------------------------算法总结:注册码前三段要全部为数字,第四段注册码字符不能全部相同,并且四段注册码要全部为4位,
1、注册码第四段加在后面加上1个字符‘Z’变成一个5位字符串,前三段拼接成一个字符串(ASCII "123425673890"),取前两位转化为数字12;
2、从符串第3位开始一次两位“34、25、67、38、90”转化为数值34、25、67、38、90得到5个两位数
3、佽次取注册码第四段加上1个字符‘Z’变成一个5位字符串的一位,分别跟前面转化形成5个两位数分别XOR运算,得到5个结果;
4、用上一步这5个xor结果,依次减去用字符串(ASCII "123425673890")得到的6个2位数据中的前5个,
如果小于0,就加上0xFF,如果大于等于0直接减得到5个结果,把这个5个值为AS值转化为字符拼接成一个5位的字符串;
5、注册码第四段加在后面加上1个字符‘A’变成一个5位字符串,要求跟第4步中最后得的5个字符相同;
可用注册码一组:8282-8282-8299-AMMM---------------------------------------------------------------------------------------------------------------------------【版权声明】:本文原创于GeekCat/P.Y.G,转载请注明作者及论坛并保存文章的完整!
我们都爱月姐姐 沙发,支持G版算法大牛!!! 我来支持下。谢谢GC分享算法分析 【编写语言】: 没脱壳不知道冲这句,赞! 非常不错。值得拥有 飘云 发表于 2016-1-9 19:28
【编写语言】: 没脱壳不知道冲这句,赞!
哈哈~
对各种语言的入口不了解~~
啥也不说了,楼主就是给力! 学习了,,,, 谢谢分享,学习了
赞,期待更多更详细的分析教程
页:
[1]
2