pendan2001 发表于 2016-8-22 13:00

某软件算法简单分析

本帖最后由 Sound 于 2016-8-23 09:14 编辑

【软件名称】: 兴达销售小票打印软件 v3.66 标准版
【下载地址】: 自己找把
【使用工具】: OD等
【软件介绍】: 一看就明白干什么的。
【 声   明】: 仅为算法研究,勿作它途。
论坛里面有人讨论过,不过没算法分析,刚好今天要用一下,顺手发上来。

机器码:BZ2637613460
注册码:3897251368

机器码:BZ2637611050
注册码:3897247876

PEID检测信息:
Borland Delphi 6.0 - 7.0
00576684   55                     push    ebp
00576685   8BEC                   mov   ebp, esp
00576687   B907000000             mov   ecx, $00000007
0057668C   6A00                   push    $00
0057668E   6A00                   push    $00
00576690   49                     dec   ecx
00576691   75F9                   jnz   0057668C
00576693   53                     push    ebx
00576694   56                     push    esi
00576695   8BD8                   mov   ebx, eax
00576697   33C0                   xor   eax, eax
00576699   55                     push    ebp

* Possible String Reference to: '榛砧?胗^[嬪]?
|
0057669A   6894675700             push    $00576794

***** TRY
|
0057669F   64FF30               push    dword ptr fs:
005766A2   648920               mov   fs:, esp
005766A5   8D45F0               lea   eax,

|
005766A8   E843FFFFFF             call    005765F0///取CPUID
--------------------------------------------
005765F0/$53            push ebx
005765F1|.57            push edi                                 ;兴达销售.00576330
005765F2|.89C7          mov edi,eax
005765F4|.B8 01000000   mov eax,0x1
005765F9|.0FA2          cpuid
005765FB|.AB            stos dword ptr es:                  ;eax=00040651
005765FC|.89D8          mov eax,ebx
005765FE|.AB            stos dword ptr es:                  ;eax=02100800
005765FF|.89C8          mov eax,ecx
00576601|.AB            stos dword ptr es:                  ;eax=7FDAFBBF
00576602|.89D0          mov eax,edx
00576604|.AB            stos dword ptr es:                  ;eax=BFEBFBFF
00576605|.5F            pop edi                                  ;0152DCD0
00576606|.5B            pop ebx                                  ;0152DCD0
00576607\.C3            retn
--------------------------------------------
005766AD   8D55E8               lea   edx,
005766B0   8B45F0               mov   eax, //堆栈 ss:=00040651//转10进制263761


* Reference to: SysUtils.IntToStr(Integer):AnsiString;overload;
|
005766B3   E8102DE9FF             call    004093C8
005766B8|.FF75 E8       push                            ;   (ASCII "263761")
005766BB   8D55E4               lea   edx,
005766BE|.8B45 F4       mov eax,                        ;堆栈 ss:=02100800


* Reference to: SysUtils.IntToStr(Integer):AnsiString;overload;
|
005766C1   E8022DE9FF             call    004093C8//02100800转10进制
005766C6|.FF75 E4       push                            ;   (ASCII "34605056")
005766C9   8D55E0               lea   edx,
005766CC|.8B45 F8       mov eax,                        ;堆栈 ss:=7FDAFBBF

* Reference to: SysUtils.IntToStr(Integer):AnsiString;overload;
|
005766CF   E8F42CE9FF             call    004093C8//7FDAFBBF转10进制
005766D4|.FF75 E0       push                            ;(ASCII "2145057727")
005766D7   8D55DC               lea   edx,
005766DA|.8B45 FC       mov eax,                        ;堆栈 ss:=BFEBFBFF

* Reference to: SysUtils.IntToStr(Integer):AnsiString;overload;
|
005766DD   E8E62CE9FF             call    004093C8//BFEBFBFF转10进制
005766E2|.FF75 DC       push                            ;   (ASCII "-1075053569")
005766E5   8D45EC               lea   eax,
005766E8   BA04000000             mov   edx, $00000004

* Reference to: System.@LStrCatN;////字符串连接在一起
|
005766ED   E8DEE0E8FF             call    004047D0
005766F2|.8B55 EC       mov edx,                        ;(ASCII "263761346050562145057727-1075053569")

* Reference to control Edit1 : TEdit
|
005766F5   8B8314030000         mov   eax,

* Reference to: Controls.TControl.SetText(TControl;TCaption);
|
005766FB   E81484EFFF             call    0046EB14
00576700   8D55D0               lea   edx,

* Reference to control Edit1 : TEdit
|
00576703   8BB314030000         mov   esi,
00576709   8BC6                   mov   eax, esi

* Reference to: Controls.TControl.GetText(TControl):TCaption;
|
0057670B   E8D483EFFF             call    0046EAE4
00576710   8B45D0               mov   eax,
00576713   8D4DD4               lea   ecx,
00576716|.BA 0A000000   mov edx,0xA                              ;   (ASCII "263761346050562145057727-1075053569")

* Reference to: StrUtils.LeftStr(AnsiString;Integer):AnsiString;overload;
|
0057671B   E83889ECFF             call    0043F058
00576720|.8B4D D4       mov ecx,                     ;取左边10位字符串(ASCII "2637613460")
00576723   8D45D8               lea   eax,

* Possible String Reference to: 'BZ'
|
00576726   BAAC675700             mov   edx, $005767AC

* Reference to: System.@LStrCat3;//与固定字符串BZ变成BZ2637613460
|
0057672B   E82CE0E8FF             call    0040475C
00576730   8B55D8               mov   edx,
00576733   8BC6                   mov   eax, esi

* Reference to: Controls.TControl.SetText(TControl;TCaption);
|
00576735   E8DA83EFFF             call    0046EB14
0057673A   8D55C8               lea   edx,

* Reference to control Edit1 : TEdit
|
0057673D   8B8314030000         mov   eax,

* Reference to: Controls.TControl.GetText(TControl):TCaption;
|
00576743   E89C83EFFF             call    0046EAE4
00576748   8B45C8               mov   eax,
0057674B   8D55CC               lea   edx,

* Reference to : TZhcForm._PROC_00576608()
|
0057674E   E8B5FEFFFF             call    00576608///////////////////////////////
00576753|.8B55 CC       mov edx,                     ;   (ASCII "3897251368")

* Reference to control Edit3 : TEdit
|
00576756   8B83F8020000         mov   eax,

* Reference to: Controls.TControl.SetText(TControl;TCaption);
|
0057675C   E8B383EFFF             call    0046EB14
00576761   33C0                   xor   eax, eax
00576763   5A                     pop   edx
00576764   59                     pop   ecx
00576765   59                     pop   ecx
00576766   648910               mov   fs:, edx

****** FINALLY


call    00576608///////////////////////////////注册算法


0057662B|.8B45 FC       mov eax,                        ;   (ASCII "BZ2637613460")
0057662E|.E8 DDE0E8FF   call 兴达销售.00404710
00576633|.85C0          test eax,eax
00576635|.76 1C         jbe short 兴达销售.00576653
00576637|.BA 01000000   mov edx,0x1
0057663C|>8B4D FC       mov ecx,
0057663F|.0FB64C11 FF   movzx ecx,byte ptr ds:      ;   (ASCII "BZ2637613460")依次取每位
00576644|.03D9          add ebx,ecx
00576646|.8BCB          mov ecx,ebx
00576648|.03C9          add ecx,ecx
0057664A|.8D0C49      lea ecx,dword ptr ds:
0057664D|.8BD9          mov ebx,ecx
0057664F|.42            inc edx
00576650|.48            dec eax
00576651|.^ 75 E9         jnz short 兴达销售.0057663C
00576653|> \8BC3          mov eax,ebx
00576655|.33D2          xor edx,edx
00576657|.52            push edx
00576658|.50            push eax
00576659|.8BC6          mov eax,esi


42+0=42
42+42=84
84+84x2=18C

5A+18C=1E6
1E6+1E6=3CC
3CC+3CCx2=B64

.....
ECX=E84B5628
转10进制3897251368就是注册码了。


总结下:
1。取CPUID四段,每段转换成10进制,合并在一起,取前10位,与固定字符"BZ"连接,就是机器码了。
2。注册码算法
@@:
movzx ecx,byte ptr ds:      ;   (ASCII "BZ2637613460")依次取每位
add ebx,ecx
mov ecx,ebx
add ecx,ecx
lea ecx,dword ptr ds:
mov ebx,ecx
inc edx
dec eax
jnz @@

3。还有个小插曲,程序用OD载入调试,每次启动后机器码发生变化,做内存注册机的也是。哪位论坛友能继续跟踪下,呵呵。。


KaQqi 发表于 2016-8-22 13:15

整体看了一遍。首先对楼主表示感谢。
一开始找算法call那块代码太乱,建议楼主使用插入代码。
在分析算法的时候做的挺好,我也没怎么建议可提了。
最后一个问题,为什么每次检测机器码会变呢?这个我不太懂。
总体看非常好,待会加分

china-loong 发表于 2016-8-22 13:47

我只是个新人,只想默默的问大家视频教程去哪里看?每当安安静静的想看看视频学学姿势的时候到哪都找不到! 请不要告诉我去山东找我怕   

dk123456518 发表于 2016-8-22 13:13

学习了感谢分享

pendan2001 发表于 2016-8-22 13:20

感谢cqr2287的建议,机器码发生变化还没有找到相关的代码,猜想的话可能检测了是否被调试

LeiSir 发表于 2016-8-22 13:26

谢谢分享,看不懂嘎嘎!

xyxfyh 发表于 2016-8-22 13:38

不错不错。我看完了。{:1_921:}

chinaboy008 发表于 2016-8-22 13:43


学习了感谢分享{:1_921:}

bmwgtr 发表于 2016-8-22 13:46

不错,学习了,感谢分享~~

Hunter 发表于 2016-8-22 13:53

虽然看不懂但是支持
页: [1] 2
查看完整版本: 某软件算法简单分析