GeekCat 发表于 2016-1-9 17:01:16

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,转载请注明作者及论坛并保存文章的完整!
我们都爱月姐姐

gagmeng 发表于 2016-1-9 17:21:57

沙发,支持G版算法大牛!!!

Dxer 发表于 2016-1-9 19:26:06

我来支持下。谢谢GC分享算法分析

飘云 发表于 2016-1-9 19:28:50

【编写语言】: 没脱壳不知道冲这句,赞!

81753340 发表于 2016-1-9 20:02:04

非常不错。值得拥有

GeekCat 发表于 2016-1-9 20:18:53

飘云 发表于 2016-1-9 19:28
【编写语言】: 没脱壳不知道冲这句,赞!

哈哈~
对各种语言的入口不了解~~

gujin162 发表于 2016-1-9 20:24:11


啥也不说了,楼主就是给力!

2857428593 发表于 2016-1-9 21:43:49

学习了,,,,

2857428593 发表于 2016-1-9 21:44:23

谢谢分享,学习了

wgz001 发表于 2016-1-10 10:10:42

赞,期待更多更详细的分析教程
页: [1] 2
查看完整版本: ABsee v1.0 算法分析