本帖最后由 GeekCat 于 2016-1-9 17:05 编辑
【文章标题】: ABsee v1.0 算法分析 【软件大小】: 2.21 MB (2,318,848 字节)
【加壳方式】: ASPack 2.12 -> Alexey Solodovnikov
【保护方式】: 注册码
【编写语言】: 没脱壳不知道
【使用工具】: OD、PEID
【操作平台】: XP SP3 【破解声明】: 破解在于交流思路和过程,结果并不重要,请不要用于非法用途;
【软件介绍】: 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:[EBX+0x24C], 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:[0x61A9FC] ; 艋a
- 005FAA55 |. 8B00 MOV EAX, DWORD PTR DS:[EAX]
- 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:[0x61A9FC] ; 艋a
- 005FAA6F |. 8B00 MOV EAX, DWORD PTR DS:[EAX]
- 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:[0x61A9FC] ;
复制代码
- <P>005CE81E |. 64:8920 MOV DWORD PTR FS:[EAX], 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:[EBP-0x4] ; (ASCII "1QWE")
- 005CE831 |. FF75 F8 PUSH DWORD PTR SS:[EBP-0x8] ; (ASCII "2RTY")
- 005CE834 |. FF75 F4 PUSH DWORD PTR SS:[EBP-0xC] ; (ASCII "3UIO")
- 005CE837 |. 8D45 F0 LEA EAX, DWORD PTR SS:[EBP-0x10]
- 005CE83A |. BA 03000000 MOV EDX, 0x3
- 005CE83F |. E8 9462E3FF CALL ABSeeVie.00404AD8 ; 前三段注册码拼接
- 005CE844 |. 8D45 EC LEA EAX, DWORD PTR SS:[EBP-0x14]
- 005CE847 |. 50 PUSH EAX
- 005CE848 |. 8D45 E8 LEA EAX, DWORD PTR SS:[EBP-0x18]
- 005CE84B |. B9 C0E85C00 MOV ECX, ABSeeVie.005CE8C0 ; Z
- 005CE850 |. 8B55 08 MOV EDX, DWORD PTR SS:[EBP+0x8] ; (ASCII "QWER")
- 005CE853 |. E8 0C62E3FF CALL ABSeeVie.00404A64 </P>
- <P>005CE858 |. 8B55 E8 MOV EDX, DWORD PTR SS:[EBP-0x18] ; (ASCII "QWERZ")
- 005CE85B |. 33C9 XOR ECX, ECX
- 005CE85D |. 8B45 F0 MOV EAX, DWORD PTR SS:[EBP-0x10] ; (ASCII "1QWE2RTY3UIO")
- 005CE860 |. E8 73FCFFFF CALL ABSeeVie.005CE4D8 ; 算法CALL
- 005CE865 |. 8B45 EC MOV EAX, DWORD PTR SS:[EBP-0x14] ; 注意ebp-0x14
- 005CE868 |. 50 PUSH EAX
- 005CE869 |. 8D45 E4 LEA EAX, DWORD PTR SS:[EBP-0x1C]
- 005CE86C |. B9 CCE85C00 MOV ECX, ABSeeVie.005CE8CC ; A
- 005CE871 |. 8B55 08 MOV EDX, DWORD PTR SS:[EBP+0x8] ; (ASCII "QWER")
- 005CE874 |. E8 EB61E3FF CALL ABSeeVie.00404A64 ; 拼接
- 005CE879 |. 8B55 E4 MOV EDX, DWORD PTR SS:[EBP-0x1C] ; (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:[EBP-0x4] ; (ASCII "123425673890")
- 005CE60E . E8 6566E3FF CALL ABSeeVie.00404C78 ; 取前两位
- 005CE613 . 8B4D D0 MOV ECX, DWORD PTR SS:[EBP-0x30] ; (ASCII "12")
- 005CE616 . 8D45 D4 LEA EAX, DWORD PTR SS:[EBP-0x2C]
- 005CE619 . BA 50E75C00 MOV EDX, ABSeeVie.005CE750 ; $
- 005CE61E . E8 4164E3FF CALL ABSeeVie.00404A64 ; 拼接 $12
- 005CE623 . 8B45 D4 MOV EAX, DWORD PTR SS:[EBP-0x2C] ; $12
- 005CE626 . E8 A9ACE3FF CALL ABSeeVie.004092D4 ; 检测是否为数字,是数字就转化为对应数值
- 005CE62B . 8BF8 MOV EDI, EAX
- 005CE62D . C745 EC 03000>MOV DWORD PTR SS:[EBP-0x14], 0x3
- 005CE634 > 8D45 C8 LEA EAX, DWORD PTR SS:[EBP-0x38]
- 005CE637 . 50 PUSH EAX
- 005CE638 . B9 02000000 MOV ECX, 0x2
- 005CE63D . 8B55 EC MOV EDX, DWORD PTR SS:[EBP-0x14]
- 005CE640 . 8B45 FC MOV EAX, DWORD PTR SS:[EBP-0x4] ; (ASCII "123425673890")
- 005CE643 . E8 3066E3FF CALL ABSeeVie.00404C78 ; 一次取两位从第3位开始取
- 005CE648 . 8B4D C8 MOV ECX, DWORD PTR SS:[EBP-0x38] ; 34、25、67、38、90
- 005CE64B . 8D45 CC LEA EAX, DWORD PTR SS:[EBP-0x34]
- 005CE64E . BA 50E75C00 MOV EDX, ABSeeVie.005CE750 ; $
- 005CE653 . E8 0C64E3FF CALL ABSeeVie.00404A64 ; 拼接
- 005CE658 . 8B45 CC MOV EAX, DWORD PTR SS:[EBP-0x34]
- 005CE65B . E8 74ACE3FF CALL ABSeeVie.004092D4 ; 检测是否为数字,是数字就转化为对应数值
- 005CE660 . 8BD8 MOV EBX, EAX
- 005CE662 . 3B75 F4 CMP ESI, DWORD PTR SS:[EBP-0xC]
- 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:[EBP-0x8] ; (ASCII "QWERZ")
- 005CE672 . 0FB64430 FF MOVZX EAX, BYTE PTR DS:[EAX+ESI-0x1] ; 每次取1位
- 005CE677 . 33C3 XOR EAX, EBX ; 每次取的2位数字 xor 第四段取得的1位字符AS值 =65 72
- 005CE679 . 8945 E8 MOV DWORD PTR SS:[EBP-0x18], EAX ; 65
- 005CE67C . 3B7D E8 CMP EDI, DWORD PTR SS:[EBP-0x18] ; xor结果跟注册码第一段的前2位(以后每次取上次所取的后面2位)比较 大于就直接减小于就+FF再减
- 005CE67F . 7C 0F JL SHORT ABSeeVie.005CE690 ; 第一次是1、2位,第二次则为3、4位向后推
- 005CE681 . 8B45 E8 MOV EAX, DWORD PTR SS:[EBP-0x18]
- 005CE684 . 05 FF000000 ADD EAX, 0xFF
- 005CE689 . 2BC7 SUB EAX, EDI
- 005CE68B . 8945 E8 MOV DWORD PTR SS:[EBP-0x18], EAX
- 005CE68E . EB 03 JMP SHORT ABSeeVie.005CE693
- 005CE690 > 297D E8 SUB DWORD PTR SS:[EBP-0x18], EDI ; 65-12=53
- 005CE693 > 8D45 C4 LEA EAX, DWORD PTR SS:[EBP-0x3C]
- 005CE696 . 8B55 E8 MOV EDX, DWORD PTR SS:[EBP-0x18] ; 53
- 005CE699 . E8 A262E3FF CALL ABSeeVie.00404940 ; AS值转字符 53->S 3E->">" FC-> 6A
- 005CE69E . 8B55 C4 MOV EDX, DWORD PTR SS:[EBP-0x3C] ; (UNICODE "S")
- 005CE6A1 . 8D45 F0 LEA EAX, DWORD PTR SS:[EBP-0x10]
- 005CE6A4 . E8 7763E3FF CALL ABSeeVie.00404A20
- 005CE6A9 . 8BFB MOV EDI, EBX
- 005CE6AB . 8345 EC 02 ADD DWORD PTR SS:[EBP-0x14], 0x2
- 005CE6AF . 8B45 FC MOV EAX, DWORD PTR SS:[EBP-0x4] ; (ASCII "123425673890")
- 005CE6B2 . E8 6163E3FF CALL ABSeeVie.00404A18 ; 计算字符串长度
- 005CE6B7 . 3B45 EC CMP EAX, DWORD PTR SS:[EBP-0x14]
- 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,转载请注明作者及论坛并保存文章的完整!
来自群组: 我们都爱月姐姐 |